use super::keys::ROOT;
pub const NAMESPACE: &[u8] = b"\0uqa-diskann-generations-v1\0";
pub const LEGACY_PREFIX: [u8; ROOT.len() + 1] = {
let mut prefix = [0; ROOT.len() + 1];
let mut index = 0;
while index < ROOT.len() {
prefix[index] = ROOT[index];
index += 1;
}
prefix[ROOT.len()] = 1;
prefix
};
pub const LEGACY_NAMESPACE_BYTES: usize = LEGACY_PREFIX.len() + 16 + 8 + 8;
pub const LEGACY_END: [u8; LEGACY_PREFIX.len()] = {
let mut prefix = LEGACY_PREFIX;
prefix[ROOT.len()] = 2;
prefix
};
pub fn is_legacy_namespace(namespace: &[u8]) -> bool {
namespace.len() == LEGACY_NAMESPACE_BYTES && namespace.starts_with(&LEGACY_PREFIX)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::diskann_index::format::DiskANNGeneration;
use crate::key_value::diskann::keys::Keys;
#[test]
fn diskann_identifier_domains_select_only_complete_predecessor_namespaces() {
let keys = Keys::new(DiskANNGeneration::new([9; 16], 11, 12, 13).unwrap());
let legacy = keys.legacy_allocation_namespace();
assert!(is_legacy_namespace(legacy));
assert!(legacy >= LEGACY_PREFIX.as_slice() && legacy < LEGACY_END.as_slice());
for unrelated in [
&legacy[..legacy.len() - 1],
keys.prefix(),
NAMESPACE,
LEGACY_PREFIX.as_slice(),
LEGACY_END.as_slice(),
b"ordinary-reservations",
] {
assert!(!is_legacy_namespace(unrelated));
}
}
}