Skip to main content

ApiaryNode

Struct ApiaryNode 

Source
pub struct ApiaryNode {
    pub config: NodeConfig,
    pub storage: Arc<dyn StorageBackend>,
    pub registry: Arc<RegistryManager>,
    pub query_ctx: Arc<Mutex<ApiaryQueryContext>>,
    pub bee_pool: Arc<BeePool>,
    pub cell_cache: Arc<CellCache>,
    pub thermometer: ColonyThermometer,
    pub abandonment_tracker: Arc<AbandonmentTracker>,
    /* private fields */
}
Expand description

An Apiary compute node — the runtime for one machine in the swarm.

The node holds a reference to the storage backend and its configuration. In solo mode it uses LocalBackend; in multi-node mode it uses S3Backend. The node is otherwise stateless — all committed state lives in object storage.

Fields§

§config: NodeConfig

Node configuration including auto-detected capacity.

§storage: Arc<dyn StorageBackend>

The shared storage backend (object storage or local filesystem).

§registry: Arc<RegistryManager>

Registry manager for DDL operations.

§query_ctx: Arc<Mutex<ApiaryQueryContext>>

DataFusion-based SQL query context.

§bee_pool: Arc<BeePool>

Pool of bees for isolated task execution.

§cell_cache: Arc<CellCache>

Local cell cache with LRU eviction.

§thermometer: ColonyThermometer

Colony thermometer for measuring system health.

§abandonment_tracker: Arc<AbandonmentTracker>

Abandonment tracker for task failure handling.

Implementations§

Source§

impl ApiaryNode

Source

pub async fn start(config: NodeConfig) -> Result<Self>

Start a new Apiary node with the given configuration.

Initialises the appropriate storage backend based on config.storage_uri and logs the node’s capacity.

Source

pub async fn shutdown(&self)

Gracefully shut down the node.

Stops background tasks (heartbeat writer, world view builder), deletes the heartbeat file, and cleans up resources.

Source

pub async fn write_to_frame( &self, hive: &str, box_name: &str, frame_name: &str, batch: &RecordBatch, ) -> Result<WriteResult>

Write data to a frame. This is the end-to-end write path:

  1. Resolve frame from registry
  2. Open/create ledger
  3. Validate schema
  4. Partition data
  5. Write cells to storage
  6. Commit ledger entry
Source

pub async fn read_from_frame( &self, hive: &str, box_name: &str, frame_name: &str, partition_filter: Option<&HashMap<String, String>>, ) -> Result<Option<RecordBatch>>

Read data from a frame, optionally filtering by partition values. Returns all matching data as a merged RecordBatch.

Source

pub async fn overwrite_frame( &self, hive: &str, box_name: &str, frame_name: &str, batch: &RecordBatch, ) -> Result<WriteResult>

Overwrite all data in a frame with new data. Commits a RewriteCells entry removing all existing cells and adding new ones.

Source

pub async fn init_frame_ledger( &self, hive: &str, box_name: &str, frame_name: &str, ) -> Result<()>

Initialize the ledger for a frame (called after create_frame in registry).

Source

pub async fn sql(&self, query: &str) -> Result<Vec<RecordBatch>>

Execute a SQL query and return results as RecordBatches.

The query is executed through the BeePool — assigned to an idle bee or queued if all bees are busy. Each bee runs in its own sealed chamber with memory budget and timeout enforcement.

Supports:

  • Standard SQL (SELECT, GROUP BY, ORDER BY, etc.) over frames
  • Custom commands: USE HIVE, USE BOX, SHOW HIVES, SHOW BOXES, SHOW FRAMES, DESCRIBE
  • 3-part table names: hive.box.frame
  • 1-part names after USE HIVE / USE BOX
Source

pub async fn bee_status(&self) -> Vec<BeeStatus>

Return the status of each bee in the pool.

Source

pub async fn world_view(&self) -> WorldView

Return the current world view snapshot.

Source

pub async fn swarm_status(&self) -> SwarmStatus

Return swarm status: a summary of all nodes visible to this node.

Source

pub async fn colony_status(&self) -> ColonyStatus

Return the current colony status: temperature and regulation state.

Source

pub async fn sql_distributed(&self, query: &str) -> Result<Vec<RecordBatch>>

Execute a distributed query (v2 feature - explicit control).

This method is reserved for v2 when users want explicit control over distributed execution strategy. In v1, distributed execution happens transparently within the query context based on query planning.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more