Change the update loop to be more explicit on index clear

This commit is contained in:
Clément Renault 2019-11-27 13:43:28 +01:00
parent 6d686ac14f
commit 1def56ea11
No known key found for this signature in database
GPG Key ID: 92ADA4E935E71FA4

View File

@ -55,7 +55,23 @@ fn update_awaiter(
index: Index,
) -> MResult<()> {
let mut receiver = receiver.into_iter();
while let Some(UpdateEvent::NewUpdate) = receiver.next() {
while let Some(event) = receiver.next() {
// if we receive a *MustClear* event, clear the index and break the loop
if let UpdateEvent::MustClear = event {
let mut writer = env.typed_write_txn::<MainT>()?;
let mut update_writer = update_env.typed_write_txn::<UpdateT>()?;
store::clear(&mut writer, &mut update_writer, &index)?;
writer.commit()?;
update_writer.commit()?;
debug!("store {} cleared", index_uid);
break
}
loop {
// We instantiate a *write* transaction to *block* the thread
// until the *other*, notifiying, thread commits
@ -115,14 +131,6 @@ fn update_awaiter(
debug!("update loop system stopped");
let mut writer = env.typed_write_txn::<MainT>()?;
let mut update_writer = update_env.typed_write_txn::<UpdateT>()?;
store::clear(&mut writer, &mut update_writer, &index)?;
writer.commit()?;
update_writer.commit()?;
debug!("store {} cleared", index_uid);
Ok(())
}