aarondb/federation
Local, in-runtime federation over independently owned AaronDB databases.
This module deliberately composes local database actors only. It does not provide remote transport, coordinated writes, failover, quorum, or HA.
Types
pub type FederatedResult {
FederatedResult(
rows: List(FederatedRow),
sources: List(String),
)
}
Constructors
-
FederatedResult(rows: List(FederatedRow), sources: List(String))
pub type FederatedRow {
FederatedRow(
source: String,
row: dict.Dict(String, fact.Value),
)
}
Constructors
-
FederatedRow(source: String, row: dict.Dict(String, fact.Value))
pub type FederationError {
SourceUnavailable(name: String)
SourceTimeout(name: String)
}
Constructors
-
SourceUnavailable(name: String) -
SourceTimeout(name: String)
pub type Source {
Source(name: String, db: process.Subject(transactor.Message))
}
Constructors
-
Source(name: String, db: process.Subject(transactor.Message))
Values
pub fn new(sources: List(Source)) -> Result(Federation, String)
Construct a local federation.
Source names must be non-empty and unique. Every source must expose the same set of declared schema attributes. This is a compatibility guard, not schema negotiation: callers own schema rollout across their databases.
pub fn query(
federation: Federation,
query: ast.Query,
) -> Result(FederatedResult, FederationError)
Run a query using the default five-second source deadline.
See query_with_timeout for the fail-fast failure contract.
pub fn query_with_timeout(
federation: Federation,
query: ast.Query,
timeout_ms: Int,
) -> Result(FederatedResult, FederationError)
Run a query against every live source in stable source-name order.
This is the fail-fast federation API. It returns no result if any source is
unavailable or fails to reply before timeout_ms; callers therefore cannot
accidentally treat partial source successes as a complete federated read.