Version:

Preventing duplicate actions

Tarantool guarantees that every update is applied only once at every replica.
However, due to asynchronous nature of the replication, the order of updates is
not guaranteed. Further we analyse this problem in more details, provide
examples of replication going out of sync, and suggest solutions.

If we check replication statuses with box.info, we’ll see that replication
at master #1 is stopped (1.upstream.status=stopped). Additionally, no data
is replicated from that master (section 1.downstream is missing in the
report), because the downstream has encountered the same error:

The cases described in previous paragraphs represent examples of
non-commutative operations, i.e. operations, which result depends on the
execution order. On the contrary, for commutative operations, the
execution order doesn’t matter.

Consider for example the following command:

tarantool> box.space.tester:upsert{{1,0},{{'+',2,1)}

This operation is commutative: we get the same result no matter in which order
the update is applied on the other masters.