MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / delete

Method delete

nodedb/src/engine/kv/engine_write.rs:123–179  ·  view source on GitHub ↗

DELETE: remove key(s). Returns count of keys actually deleted.

(
        &mut self,
        tenant_id: u64,
        collection: &str,
        keys: &[Vec<u8>],
        now_ms: u64,
    )

Source from the content-addressed store, hash-verified

121
122 /// DELETE: remove key(s). Returns count of keys actually deleted.
123 pub fn delete(
124 &mut self,
125 tenant_id: u64,
126 collection: &str,
127 keys: &[Vec<u8>],
128 now_ms: u64,
129 ) -> usize {
130 let tkey = table_key(tenant_id, collection);
131 let table = match self.tables.get_mut(&tkey) {
132 Some(t) => t,
133 None => return 0,
134 };
135
136 let mut count = 0;
137 let has_indexes = self.indexes.get(&tkey).is_some_and(|s| !s.is_empty());
138 let has_sorted = self.sorted_indexes.has_indexes(tkey);
139
140 for key in keys {
141 // Cancel expiry if the key had one.
142 if let Some(meta) = table.get_entry_meta(key)
143 && meta.has_ttl
144 {
145 let composite = expiry_key(tenant_id, collection, key);
146 self.expiry.cancel(&composite, meta.expire_at_ms);
147 }
148
149 // Extract field values before deletion (for index cleanup).
150 let old_fields = if has_indexes {
151 table
152 .get(key, now_ms)
153 .map(extract_all_field_values_from_msgpack)
154 } else {
155 None
156 };
157
158 if table.delete(key, now_ms) {
159 count += 1;
160
161 // Clean up secondary indexes.
162 if let Some(fields) = &old_fields
163 && let Some(idx_set) = self.indexes.get_mut(&tkey)
164 {
165 let refs: Vec<(&str, &[u8])> = fields
166 .iter()
167 .map(|(k, v)| (k.as_str(), v.as_slice()))
168 .collect();
169 idx_set.on_delete(key, &refs);
170 }
171
172 // Clean up sorted indexes.
173 if has_sorted {
174 self.sorted_indexes.on_delete(tkey, key);
175 }
176 }
177 }
178 count
179 }
180

Callers 1

index_cleaned_on_deleteFunction · 0.45

Calls 13

table_keyFunction · 0.85
expiry_keyFunction · 0.85
get_entry_metaMethod · 0.80
collectMethod · 0.80
get_mutMethod · 0.45
getMethod · 0.45
is_emptyMethod · 0.45
has_indexesMethod · 0.45
cancelMethod · 0.45
iterMethod · 0.45
as_strMethod · 0.45
as_sliceMethod · 0.45

Tested by 1

index_cleaned_on_deleteFunction · 0.36