use crate::domain::CodeIndexSummary;
use super::{FrameworkGraphStore, StorageError};
mod catalog;
mod projection;
mod publication;
mod query;
mod repository_set;
mod retention;
mod source;
mod task;
pub use catalog::RepositoryCatalogStore;
pub use projection::SoftwareProjectionStore;
pub use publication::CodeIndexPublicationStore;
pub use query::CodeQueryReadStore;
pub use repository_set::CodeRepositorySetStore;
pub use retention::CodeScopeRetentionStore;
pub use source::CodeIndexSourceStore;
pub use task::CodeIndexTaskStore;
pub const CODE_INDEX_TASK_LEASE_RECOVERY_UNAVAILABLE: &str =
"code index task lease recovery is unavailable";
pub const CODE_INDEX_TASK_LEASE_RENEWAL_UNAVAILABLE: &str =
"code index task lease renewal is unavailable";
pub const CODE_INDEX_FINALIZATION_COARSE_PHASE_COUNT: usize = 11;
pub const CODE_INDEX_FINALIZATION_MAX_STEPS: usize = crate::domain::CODE_QUERY_INDEX_PLAN_UNIT_COUNT
+ CODE_INDEX_FINALIZATION_COARSE_PHASE_COUNT
+ 2;
pub fn code_index_finalization_max_steps(
committed_reference_count: usize,
) -> Result<usize, StorageError> {
committed_reference_count
.checked_mul(4)
.and_then(|pages| pages.checked_add(CODE_INDEX_FINALIZATION_MAX_STEPS + 6))
.ok_or_else(|| {
StorageError::CapacityExceeded(
"reference-resolution and search finalization step bound exceeds platform capacity"
.to_owned(),
)
})
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CodeIndexFinalizationStep {
Pending { checkpoint_state: String },
Ready(Box<CodeIndexSummary>),
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct CodeImpactChanges {
pub paths: Vec<String>,
pub deleted_symbol_names: Vec<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct CodeRepositorySetEdgeSelector {
pub origin_files: Vec<(String, String)>,
pub target_records: Vec<(String, String, String)>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeIndexTaskSeed {
pub repository_id: String,
pub alias: String,
pub ref_selector: String,
pub resolved_commit_sha: String,
pub tree_hash: String,
pub source_scope: String,
pub path_filters: Vec<String>,
pub language_filters: Vec<String>,
pub mode: crate::domain::CodeIndexMode,
pub input_fingerprint: String,
pub resource_budget: crate::domain::CodeIndexResourceBudget,
pub payload_json: String,
pub now_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeIndexTaskClaimRequest {
pub task_id: Option<String>,
pub lease_owner: String,
pub lease_duration_ms: u64,
pub max_attempts: u32,
pub now_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeIndexTaskLeaseRenewal {
pub task_id: String,
pub lease_owner: String,
pub attempt_count: u32,
pub publication_generation: u64,
pub lease_duration_ms: u64,
pub now_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeIndexTaskLeaseRecord {
pub task_id: String,
pub lease_owner: String,
pub lease_expires_at_ms: Option<u64>,
pub attempt_count: u32,
pub publication_generation: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeIndexPublicationTarget {
pub task_id: String,
pub repository_id: String,
pub source_scope: String,
pub resolved_commit_sha: String,
pub tree_hash: String,
pub path_filters: Vec<String>,
pub language_filters: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeIndexTaskLeaseRecovery {
pub leases: Vec<CodeIndexTaskLeaseRecord>,
pub now_ms: u64,
pub max_attempts: u32,
pub error_kind: String,
pub error_message: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeIndexTaskCompletion {
pub task_id: String,
pub lease_owner: String,
pub attempt_count: u32,
pub publication_generation: u64,
pub now_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeIndexTaskFailure {
pub task_id: String,
pub lease_owner: String,
pub attempt_count: u32,
pub publication_generation: u64,
pub error_kind: String,
pub error_message: String,
pub retry_backoff_ms: u64,
pub max_attempts: u32,
pub now_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeScopeRetentionRequest {
pub repository_id: String,
pub active_scope: String,
pub retain_recent_successful_scopes: usize,
pub repository_retention_cutoff_ms: Option<u64>,
pub repository_retention_cutoff_generation: Option<u64>,
pub repository_retention_initial_scope: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeRepositorySetSeed {
pub alias: String,
pub description: Option<String>,
pub default_ref_policy_json: String,
pub now_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeRepositorySetMemberSeed {
pub set_alias: String,
pub repository_id: String,
pub repository_alias: String,
pub ref_selector: String,
pub resolved_commit_sha: String,
pub source_scope: String,
pub path_filters: Vec<String>,
pub language_filters: Vec<String>,
pub priority: i32,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeRepositorySetRefreshTaskSeed {
pub set_id: String,
pub set_alias: String,
pub input_fingerprint: String,
pub now_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeRepositorySetRefreshTaskClaimRequest {
pub task_id: Option<String>,
pub lease_owner: String,
pub lease_duration_ms: u64,
pub max_attempts: u32,
pub now_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeRepositorySetRefreshPublication {
pub task_id: String,
pub set_id: String,
pub lease_owner: String,
pub attempt_count: u32,
pub member_replacements: Vec<CodeRepositorySetMemberSeed>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeRepositorySetRefreshTaskCompletion {
pub task_id: String,
pub lease_owner: String,
pub attempt_count: u32,
pub now_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CodeRepositorySetRefreshTaskFailure {
pub task_id: String,
pub lease_owner: String,
pub attempt_count: u32,
pub error_kind: String,
pub error_message: String,
pub retry_backoff_ms: u64,
pub max_attempts: u32,
pub now_ms: u64,
}
pub trait CodeRepositoryStore:
FrameworkGraphStore
+ RepositoryCatalogStore
+ CodeIndexTaskStore
+ CodeScopeRetentionStore
+ CodeIndexSourceStore
+ CodeIndexPublicationStore
+ CodeQueryReadStore
+ SoftwareProjectionStore
+ CodeRepositorySetStore
{
}
impl<T> CodeRepositoryStore for T where
T: FrameworkGraphStore
+ RepositoryCatalogStore
+ CodeIndexTaskStore
+ CodeScopeRetentionStore
+ CodeIndexSourceStore
+ CodeIndexPublicationStore
+ CodeQueryReadStore
+ SoftwareProjectionStore
+ CodeRepositorySetStore
+ ?Sized
{
}
#[cfg(test)]
#[path = "code_tests.rs"]
mod tests;