Compaction impact on replication when rev_limit is enabled


#1

Here is the setup:

Client CBL has the setMaxRevTreeDepth set to 3 and sync GW has the revs_limit set to 5. Compaction is set to run every 1 hr on client CBL and every 24 hrs on CB database.

Can somebody clarify what will be the behavior in the below scenarios:

  1. The CBL compaction runs every 1 hr and after a day, when the server side compaction has run, we see a push replication is trying to send old revisions form the client to the server. Per our understanding we should not be sending the older revisions. Is this correct behavior?

Lets say for Doc1 :
CBL revision tree = 1-2-3-[4 replaces 1]-[5 replaces 2]-[6 replaces 3]-[7 replaces 4] = 5-6-7
SG-CB revision tree = 1-2-3-4-5-[6 replaces 1]-[7 replaces 2] = 3-4-5-6-7

Client goes offline for couple of hrs. Server side more updates happen:

CBL tree by eod: 5-6-7
SG-CB tree at eod: 8-9-10-11-12
at this time compaction runs on server side along with the hourly compaction run on the CBL.

After this when the push-replicator is invoked we see it reporting:
5 - missing
6 - missing
7 - missing
and the replicator trying to push the 5-6-7 revisions to the sync gw(these revisions were removed as part of compaction and revs_limit setting to 5)

This is causing a document conflict and replication failure. Is this the expected behavior? We were expecting to see it do nothing for a push as the 5-6-7 WAS already there on the server side and had been compacted.

Please advise.

Thx,
Debu