nickva opened a new pull request #3739:
URL: https://github.com/apache/couchdb/pull/3739


   Previously, if the source db purge sequence > `purge_infos_limit`, shard 
splitting would crash with the `{{invalid_start_purge_seq,0}, 
[{couch_bt_engine,fold_purge_infos,5...` error. That was because purge 
sequences where always copied starting from 0. That would only work as long as 
the total number of purges stayed below the purge_infos_limit threshold. In 
order to correctly gather and the purge sequences, the start sequence must be 
based off of the actual oldest sequence currently available.
   
   An example of how it should be done is in the `mem_rpc` module, when 
[loading purge 
infos](https://github.com/apache/couchdb/blob/4ea9f1ea1a2078162d0e281948b56469228af3f7/src/mem3/src/mem3_rpc.erl#L206-L207),
 so here we do exactly the same. The `MinSeq - 1` logic is also evident by 
inspecting the 
[fold_purge_infos](https://github.com/apache/couchdb/blob/3.x/src/couch/src/couch_bt_engine.erl#L625-L637)
 function.
   
   The test sets up the exact scenario as described above: reduces the purge 
info limit to 10 then purges 20 documents. By purging more than the limit, we 
ensure the starting sequence is now != 0. However, the purge sequence btree is 
actually trimmed down during compaction. That is why there are a few extra 
helper functions to ensure compaction runs and finishes before shard splitting 
starts.
   
   Fixes: https://github.com/apache/couchdb/issues/3738
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to