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

pub type Federation {
  Federation(sources: List(Source))
}

Constructors

  • Federation(sources: List(Source))
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

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.

Search Document