Skip to main content

Module tokio

Module tokio 

Source
Expand description

A production-focused runtime based on Tokio with secure randomness and storage backed by the local filesystem.

§Panics

Unless configured otherwise, any task panic will lead to a runtime panic. This includes panics raised while dropping a task’s future or output, after which a handle still awaiting the task resolves to crate::Error::Closed.

§Storage

crate::Runner::start holds the storage directory (an advisory lock on its .hold file) until the run’s storage and every operation it dispatched have finished. A start on a directory another run still holds blocks, with a warning, until then. A Context, Storage, or Blob kept past start keeps the hold.

Before user code starts, Linux flushes the storage filesystem. Other platforms synchronize the storage directory, then each existing partition before its first scan or open. These directory flushes make inherited partition and blob removals durable before a scan or open observes their absence. Creation and removal synchronize subsequent directory changes.

Other platforms also flush existing blobs individually on their first open. Directory synchronization covers names. This separate flush covers file data. On macOS, both use F_FULLFSYNC through std::fs::File::sync_all.

Failures while synchronizing blob contents, including during SYNC writes, are retained across opens of the blob, even after every handle is dropped. Creation failures are retained when the header is complete. Removing or recreating the blob clears its retained error. A new runtime instance starts without the error record and still requires normal storage recovery.

§Example

use commonware_runtime::{Spawner, Runner, Supervisor, tokio, Metrics};

let executor = tokio::Runner::default();
executor.start(|context| async move {
    println!("Parent started");
    let result = context.child("child").spawn(|_| async move {
        println!("Child started");
        "hello"
    });
    println!("Child result: {:?}", result.await);
    println!("Parent exited");
});

Modules§

telemetry
Utilities for collecting and reporting telemetry data.
tracing
Utilities to export traces to an OTLP endpoint.

Structs§

Config
Configuration for the tokio runtime.
Context
Implementation of crate::Spawner, crate::Clock, crate::Network, and crate::Storage for the tokio runtime.
Executor
Runtime based on Tokio.
NetworkConfig
Runner
Implementation of crate::Runner for the tokio runtime.