diff --git a/src/box/wal.c b/src/box/wal.c index 388de6a064bc072050f2c44031b02c2dffea3758..336a0a0b7e6097b2784734d2bc7545005370bf09 100644 --- a/src/box/wal.c +++ b/src/box/wal.c @@ -908,9 +908,20 @@ wal_assign_lsn(struct vclock *vclock_diff, struct vclock *base, (*row)->tsn = tsn; (*row)->is_commit = row == end - 1; } else { - vclock_follow(vclock_diff, (*row)->replica_id, - (*row)->lsn - vclock_get(base, - (*row)->replica_id)); + int64_t diff = (*row)->lsn - vclock_get(base, (*row)->replica_id); + if (diff <= vclock_get(vclock_diff, + (*row)->replica_id)) { + say_crit("Attempt to write a broken LSN to WAL:" + " replica id: %d, confirmed lsn: %d," + " new lsn %d", (*row)->replica_id, + vclock_get(base, (*row)->replica_id) + + vclock_get(vclock_diff, + (*row)->replica_id), + (*row)->lsn); + assert(false); + } else { + vclock_follow(vclock_diff, (*row)->replica_id, diff); + } } } }