Skip to content

Commit de1ad73

Browse files
author
Shrey Patel
committed
fix(search): Make indexing idempotent
1 parent b6433de commit de1ad73

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

crates/matrix-sdk-search/src/index.rs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@
1414

1515
use std::{fmt, fs, path::Path, sync::Arc};
1616

17-
use ruma::{OwnedEventId, OwnedRoomId, RoomId, events::AnySyncMessageLikeEvent};
17+
use ruma::{EventId, OwnedEventId, OwnedRoomId, RoomId, events::AnySyncMessageLikeEvent};
1818
use tantivy::{
1919
Index, IndexReader, TantivyDocument,
2020
collector::TopDocs,
2121
directory::{MmapDirectory, error::OpenDirectoryError},
2222
query::QueryParser,
2323
schema::Value,
2424
};
25-
use tracing::error;
25+
use tracing::{error, warn};
2626

2727
use crate::{
2828
OpStamp, TANTIVY_INDEX_MEMORY_BUDGET,
@@ -129,8 +129,14 @@ impl RoomIndex {
129129
/// This which will add/remove/edit an event in the index based on the
130130
/// event type.
131131
pub fn handle_event(&mut self, event: AnySyncMessageLikeEvent) -> Result<(), IndexError> {
132+
let event_id = event.event_id().to_owned();
133+
132134
match self.schema.handle_event(event)? {
133-
RoomIndexOperation::Add(document) => self.writer.add_document(document)?,
135+
RoomIndexOperation::Add(document) => {
136+
if !self.contains(&event_id) {
137+
self.writer.add_document(document)?;
138+
}
139+
}
134140
};
135141
Ok(())
136142
}
@@ -184,6 +190,18 @@ impl RoomIndex {
184190

185191
Ok(ret)
186192
}
193+
194+
fn contains(&self, event_id: &EventId) -> bool {
195+
let search_result = self.search(format!("event_id:\"{}\"", event_id).as_str(), 5);
196+
match search_result {
197+
// If there are > 1 entry (which there shouldn't be), still return true
198+
Ok(results) => results.len() != 0,
199+
Err(err) => {
200+
warn!("Failed to check if event has been indexed, assuming it has: {err:?}");
201+
true
202+
}
203+
}
204+
}
187205
}
188206

189207
#[cfg(test)]

0 commit comments

Comments
 (0)