GDPR-erase a single cell at `(array, coord, system_from_ms)`. Writes the `CELL_GDPR_ERASURE_SENTINEL` (`0xFE`) into the memtable as a new tile version at `system_from_ms`. Any read at `system_as_of >= system_from_ms` returns `CeilingResult::Erased` for this coord. The sentinel is physically removed by compaction once the tile version falls outside the array's `audit_retain_ms` horizon. This is e
(
&mut self,
id: &ArrayId,
coord: Vec<nodedb_array::types::coord::value::CoordValue>,
system_from_ms: i64,
wal_lsn: u64,
)
| 56 | /// This is equivalent to calling `delete_cells` with `erasure: true` |
| 57 | /// on a single cell, exposed as a named method for clarity at call sites. |
| 58 | pub fn gdpr_erase_cell( |
| 59 | &mut self, |
| 60 | id: &ArrayId, |
| 61 | coord: Vec<nodedb_array::types::coord::value::CoordValue>, |
| 62 | system_from_ms: i64, |
| 63 | wal_lsn: u64, |
| 64 | ) -> ArrayEngineResult<()> { |
| 65 | use super::wal::ArrayDeleteCell; |
| 66 | self.delete_cells( |
| 67 | id, |
| 68 | vec![ArrayDeleteCell { |
| 69 | coord, |
| 70 | system_from_ms, |
| 71 | erasure: true, |
| 72 | }], |
| 73 | wal_lsn, |
| 74 | ) |
| 75 | } |
| 76 | |
| 77 | pub(super) fn maybe_flush(&mut self, id: &ArrayId) -> ArrayEngineResult<()> { |
| 78 | let stats = self.store(id)?.memtable.stats(); |