GetAllVBSeqnos need to be sure that the seqno returned to the caller is not a prepare/abort.
A DCP protocol update is required (an extension of the sync-write DCP protocol changes already made in mad-hatter). The reason for the protocol change is to solve an issue in GetAllVBSeqnos for replica vbuckets.
When we return the 'high-seqno' of a replica, we use the replica's current snapshot.end. The value exposed in this case can, if the replica is receiving a disk snapshot suffer the same issue described in
MB-36948, in that it could be a prepare/abort. If the caller of GetAllVBSeqnos does not opt into sync-replication, then it expects to see the snapshot.end on DCP, however it won't (the view-engine will do exactly that and likely block rebalance, or just hang).
To resolve the issue the DCP snapshot marker command needs to transmit the extra seqno (which won't be a prepare/abort) from active to replica and then GetAllVBSeqnos can use that value for the replica seqno if the caller hasn't negotiated sync-replication.
This MB covers the change to the DCP protocol.
|For Gerrit Dashboard: MB-37013|
|118282,4||MB-37013: Expand snapshot marker V2 to include max-visible-seqno||mad-hatter||kv_engine||Status: ABANDONED||-2||-1|
|118387,22||MB-37013: Update DcpSnapShotMarker V2 to allow for an extra seqno||mad-hatter||kv_engine||Status: MERGED||+2||+1|
|118779,2||Merge remote-tracking branch 'couchbase/mad-hatter'||master||kv_engine||Status: ABANDONED||0||-1|
|118796,2||Merge branch 'couchbase/mad-hatter'||master||kv_engine||Status: MERGED||+2||+1|