Merge pull request #323 from meilisearch/fix-index-deletion

Fix index deletion once again
This commit is contained in:
Clément Renault 2019-11-22 14:00:19 +01:00 committed by GitHub
commit b3b73e2276
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 13 deletions

View File

@ -12,7 +12,7 @@ jobs:
container: tpayet/chiquitita:latest container: tpayet/chiquitita:latest
steps: steps:
- script: | - script: |
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain nightly curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
$HOME/.cargo/bin/rustup component add rustfmt $HOME/.cargo/bin/rustup component add rustfmt
displayName: 'Install rustc and components' displayName: 'Install rustc and components'
- script: | - script: |
@ -34,7 +34,7 @@ jobs:
container: tpayet/chiquitita:latest container: tpayet/chiquitita:latest
steps: steps:
- script: | - script: |
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain nightly curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
$HOME/.cargo/bin/rustup component add rustfmt $HOME/.cargo/bin/rustup component add rustfmt
displayName: 'Install rustc and components' displayName: 'Install rustc and components'
- script: | - script: |

View File

@ -18,7 +18,7 @@ pub struct Database {
pub env: heed::Env, pub env: heed::Env,
common_store: heed::PolyDatabase, common_store: heed::PolyDatabase,
indexes_store: heed::Database<Str, Unit>, indexes_store: heed::Database<Str, Unit>,
indexes: RwLock<HashMap<String, (Index, thread::JoinHandle<()>)>>, indexes: RwLock<HashMap<String, (Index, thread::JoinHandle<MResult<()>>)>>,
update_fn: Arc<ArcSwapFn>, update_fn: Arc<ArcSwapFn>,
} }
@ -36,7 +36,7 @@ macro_rules! r#break_try {
pub enum UpdateEvent { pub enum UpdateEvent {
NewUpdate, NewUpdate,
MustStop, MustClear,
} }
pub type UpdateEvents = Receiver<UpdateEvent>; pub type UpdateEvents = Receiver<UpdateEvent>;
@ -48,7 +48,7 @@ fn update_awaiter(
index_uid: &str, index_uid: &str,
update_fn: Arc<ArcSwapFn>, update_fn: Arc<ArcSwapFn>,
index: Index, index: Index,
) { ) -> MResult<()> {
let mut receiver = receiver.into_iter(); let mut receiver = receiver.into_iter();
while let Some(UpdateEvent::NewUpdate) = receiver.next() { while let Some(UpdateEvent::NewUpdate) = receiver.next() {
loop { loop {
@ -97,6 +97,14 @@ fn update_awaiter(
} }
debug!("update loop system stopped"); debug!("update loop system stopped");
let mut writer = env.write_txn()?;
store::clear(&mut writer, &index)?;
writer.commit()?;
debug!("store {} cleared", index_uid);
Ok(())
} }
impl Database { impl Database {
@ -226,14 +234,15 @@ impl Database {
// and clear all the LMDB dbi // and clear all the LMDB dbi
let mut writer = self.env.write_txn()?; let mut writer = self.env.write_txn()?;
self.indexes_store.delete(&mut writer, &name)?; self.indexes_store.delete(&mut writer, &name)?;
store::clear(&mut writer, &index)?;
writer.commit()?; writer.commit()?;
// send a stop event to the update loop of the index
index.updates_notifier.send(UpdateEvent::MustClear).unwrap();
drop(indexes_lock); drop(indexes_lock);
// join the update loop thread to ensure it is stopped // join the update loop thread to ensure it is stopped
handle.join().unwrap(); handle.join().unwrap()?;
Ok(true) Ok(true)
} }

View File

@ -92,7 +92,7 @@ pub struct Index {
pub updates: Updates, pub updates: Updates,
pub updates_results: UpdatesResults, pub updates_results: UpdatesResults,
updates_notifier: UpdateEventsEmitter, pub(crate) updates_notifier: UpdateEventsEmitter,
} }
impl Index { impl Index {
@ -381,9 +381,6 @@ pub fn open(
} }
pub fn clear(writer: &mut heed::RwTxn, index: &Index) -> MResult<()> { pub fn clear(writer: &mut heed::RwTxn, index: &Index) -> MResult<()> {
// send a stop event to the update loop of the index
index.updates_notifier.send(UpdateEvent::MustStop).unwrap();
// clear all the stores // clear all the stores
index.main.clear(writer)?; index.main.clear(writer)?;
index.postings_lists.clear(writer)?; index.postings_lists.clear(writer)?;

View File

@ -202,7 +202,7 @@ pub async fn search_multi_index(mut ctx: Context<Data>) -> SResult<Response> {
search_builder.filters(filters); search_builder.filters(filters);
} }
if let Some(timeout_ms) = par_body.timeout_ms { if let Some(timeout_ms) = par_body.timeout_ms {
search_builder.timeout(Duration::from_secs(timeout_ms)); search_builder.timeout(Duration::from_millis(timeout_ms));
} }
if let Some(matches) = par_body.matches { if let Some(matches) = par_body.matches {
if matches { if matches {