iridium-db 0.4.0

A high-performance vector-graph hybrid storage and indexing engine
use crate::core::topology;
use crate::features::storage::{manifest, sstable};

mod blob;
mod blob_api;
mod cache;
mod fs;
mod mutation;
mod open;
mod reads;
mod types;
mod vector;
mod wal_codec;

const INTERNAL_INBOUND_ADJACENCY_INDEX: &str = "__ir_inbound_adjacency";
const INTERNAL_INBOUND_ADJACENCY_FIELD: &str = "__internal.adjacency.in";
const INTERNAL_TYPED_INBOUND_EDGE_INDEX: &str = "__ir_typed_inbound_edges";
const INTERNAL_TYPED_INBOUND_EDGE_FIELD: &str = "__internal.edges.typed.in";
use cache::{
    cache_get_logical_node, cache_put_logical_node, clear_logical_node_cache,
    invalidate_logical_node_cache, node_row_summary_from_logical,
};
use fs::{compaction_marker_path, parse_run_id};
use wal_codec::{apply_bitmap_posting, decode_delta, decode_wal_record, WalRecord};

#[cfg(test)]
pub use crate::features::storage::vector_contract::encode_legacy_f32_payload as encode_legacy_vector_payload_f32;
pub use crate::features::storage::vector_contract::{
    decode_vector_payload, encode_vector_payload_f32, encode_vector_payload_quantized_i8,
    parse_inline_vector_param, DecodedVectorPayload, StructuredVector, VectorEncoding,
    VectorMetric, VectorSpaceDescriptor,
};
pub use blob::{
    BlobAckMode, BlobBackend, BlobDurabilityTarget, BlobGetResult, BlobPrefixDeleteResult,
    BlobPutOptions, BlobPutResult, BlobReadOptions, BlobReadTierPolicy,
};
pub use blob_api::{
    delete_blob, delete_blob_prefix, delete_blobs, get_blob, get_blob_with_options, has_blob,
    has_blobs, list_blob_prefix, put_blob, put_blob_with_options,
};
#[cfg(feature = "rhodium-backend")]
pub use blob_api::{get_compiled_plan_with_options, put_compiled_plan_with_options};
pub use mutation::{
    compact, compaction_job_status, compaction_jobs_snapshot, encode_adjacency, encode_delta,
    encode_typed_edge_delta_add, encode_typed_edge_delta_delete, flush, latest_compaction_job_id,
    put_edge_delta, put_edge_deltas_batch, put_embedding_pending, put_full_node, put_tombstone,
    put_vector_delta, put_vector_delta_batch, recover_from_wal, retire_vector_space, sync,
};
pub use open::{
    open_store, open_store_for_request, open_store_with_blob_backend,
    open_store_with_injected_blob_store, open_store_with_reactor,
    open_store_with_reactor_and_blob_backend, open_store_with_reactor_and_injected_blob_store,
};
pub use reads::{
    bitmap_add_posting, bitmap_postings, bitmap_postings_in_range_limit,
    bitmap_postings_in_range_limit_for_request, create_bitmap_index, get_inbound_neighbors,
    get_logical_node, get_logical_node_for_request, get_node_row_summary,
    get_node_row_summary_for_request, get_typed_inbound_neighbors, get_typed_outbound_neighbors,
    list_bitmap_indexes, node_is_embedding_pending, node_is_tombstoned,
};
pub use types::{
    report_metrics, AmpMetrics, AmpReport, CoreId, LogicalNode, NodeRowSummary, Result, ShardId,
    StorageConfig, StorageError, StorageHandle, ThreadCoreLaneConfig, ThreadCoreRequest,
};
pub(crate) use vector::register_vector_space_for_write;
pub use vector::{
    ann_space_for_query, decode_runtime_vector, hnsw_insert, hnsw_insert_for_space, hnsw_search,
    hnsw_search_in_space, rebuild_vector_space, resume_hnsw_maintenance, suspend_hnsw_maintenance,
    vector_space_for_metric,
};

pub fn shard_for_node(node_id: u64, shard_count: u16) -> ShardId {
    topology::shard_for_node(node_id, shard_count)
}

pub fn request_owns_node(request: &ThreadCoreRequest, node_id: u64) -> bool {
    topology::request_owns_node(request, node_id)
}

#[cfg(test)]
mod tests;