diff options
author | Paul J. Davis <paul.joseph.davis@gmail.com> | 2018-03-29 11:02:25 -0500 |
---|---|---|
committer | Paul J. Davis <paul.joseph.davis@gmail.com> | 2018-03-29 14:39:53 -0500 |
commit | 455d6341fb3fde32d55a59d9b823ac01f15745ba (patch) | |
tree | 257a39ec8697fefe7fa051cd800713c3c4c4bd9a | |
parent | 6ffe0421ac524138a6b48fd010f2540631b83d16 (diff) | |
download | couchdb-455d6341fb3fde32d55a59d9b823ac01f15745ba.tar.gz |
Fix compaction resumption for the BT engine
This bug prevents the proper resumption of compactions that died during
the meta copy phase. The issue is that we were setting the update_seq
but not copying over the id and seq tree states. Thus when compaction
resumed from the bad files we'd end up skipping the part where we copy
docs over and then think everything was finished. Thus completely
clearing a database of its contents.
Luckily this isn't release code and as such should have fairly minimal
impact other than those who might be running off master.
-rw-r--r-- | src/couch/src/couch_bt_engine.erl | 1 | ||||
-rw-r--r-- | src/couch/src/couch_bt_engine_compactor.erl | 2 |
2 files changed, 2 insertions, 1 deletions
diff --git a/src/couch/src/couch_bt_engine.erl b/src/couch/src/couch_bt_engine.erl index 940689708..43a77b071 100644 --- a/src/couch/src/couch_bt_engine.erl +++ b/src/couch/src/couch_bt_engine.erl @@ -92,6 +92,7 @@ % Used by the compactor -export([ set_update_seq/2, + update_header/2, copy_security/2 ]). diff --git a/src/couch/src/couch_bt_engine_compactor.erl b/src/couch/src/couch_bt_engine_compactor.erl index 2f7a3513a..4e52064b4 100644 --- a/src/couch/src/couch_bt_engine_compactor.erl +++ b/src/couch/src/couch_bt_engine_compactor.erl @@ -386,7 +386,7 @@ commit_compaction_data(#st{header = OldHeader} = St0, Fd) -> MetaFd = couch_emsort:get_fd(St0#st.id_tree), MetaState = couch_emsort:get_state(St0#st.id_tree), St1 = bind_id_tree(St0, St0#st.fd, DataState), - Header = St1#st.header, + Header = couch_bt_engine:update_header(St1, St1#st.header), CompHeader = #comp_header{ db_header = Header, meta_state = MetaState |