uqa_storage/mvcc/
populations.rs1mod effects;
10mod reconcile;
11mod resolve;
12mod structural;
13
14pub(super) use effects::{OwnedPopulationMutation, PopulationEffects};
15pub(super) use resolve::{resolve, stage};
16
17use super::{DatabaseId, MergedRecordSnapshot, VersionResult};
18use crate::diskann_index::{
19 format::DiskANNCanonicalOrigin, DiskANNPopulationState, DiskANNPopulationWitness,
20 DiskANNQueryRead,
21};
22use crate::read_control::StorageReadControl;
23use uqa_core::{memory::BudgetedVec, DocId};
24
25pub struct DiskANNPopulationOrigin {
27 pub field: BudgetedVec<u8>,
28 pub document: DocId,
29 pub origin: DiskANNCanonicalOrigin,
30}
31
32pub struct DiskANNPopulationHeader {
34 pub field: BudgetedVec<u8>,
35 pub state: DiskANNPopulationState,
36}
37
38pub trait DiskANNPopulationRecordLayout: Send + Sync {
40 fn origin(
41 &self,
42 key: &[u8],
43 value: &[u8],
44 control: &StorageReadControl,
45 ) -> VersionResult<DiskANNPopulationOrigin>;
46
47 fn origin_prefix(
49 &self,
50 field: &[u8],
51 control: &StorageReadControl,
52 ) -> VersionResult<BudgetedVec<u8>>;
53
54 fn origin_header_prefix(
56 &self,
57 key: &[u8],
58 control: &StorageReadControl,
59 ) -> VersionResult<BudgetedVec<u8>>;
60
61 fn header_prefix(
63 &self,
64 field: &[u8],
65 control: &StorageReadControl,
66 ) -> VersionResult<BudgetedVec<u8>>;
67
68 fn header(
69 &self,
70 key: &[u8],
71 value: &[u8],
72 control: &StorageReadControl,
73 ) -> VersionResult<DiskANNPopulationHeader>;
74
75 fn witness_prefix(
76 &self,
77 header: &[u8],
78 control: &StorageReadControl,
79 ) -> VersionResult<BudgetedVec<u8>>;
80
81 fn preview_header(
83 &self,
84 key: &[u8],
85 control: &StorageReadControl,
86 ) -> VersionResult<BudgetedVec<u8>>;
87
88 fn witness_key(
89 &self,
90 header: &[u8],
91 document: DocId,
92 control: &StorageReadControl,
93 ) -> VersionResult<BudgetedVec<u8>>;
94
95 fn witness(
96 &self,
97 key: &[u8],
98 value: &[u8],
99 state: DiskANNPopulationState,
100 document: DocId,
101 origin: DiskANNCanonicalOrigin,
102 control: &StorageReadControl,
103 ) -> VersionResult<DiskANNPopulationWitness>;
104
105 fn encode_header(
106 &self,
107 key: &[u8],
108 template: &[u8],
109 state: DiskANNPopulationState,
110 control: &StorageReadControl,
111 ) -> VersionResult<BudgetedVec<u8>>;
112
113 fn encode_witness(
114 &self,
115 key: &[u8],
116 header_template: &[u8],
117 witness: DiskANNPopulationWitness,
118 control: &StorageReadControl,
119 ) -> VersionResult<BudgetedVec<u8>>;
120
121 fn with_canonical(
123 &self,
124 field: &[u8],
125 dimensions: u32,
126 view: &MergedRecordSnapshot,
127 history: DatabaseId,
128 control: &StorageReadControl,
129 visit: &mut dyn FnMut(&dyn DiskANNQueryRead) -> VersionResult<()>,
130 ) -> VersionResult<()>;
131}