Skip to content

Async-overflow-policy ​

AsyncOverflowPolicy is the public enum that controls what an AsyncLogger should do when its queue cannot accept a record immediately. It is a direct alias to the async model enum used by AsyncLoggerConfig and the runtime queue selection logic.

Interface ​

moonbit
pub type AsyncOverflowPolicy = @utils.AsyncOverflowPolicy

output ​

  • AsyncOverflowPolicy - Public async queue overflow enum with the variants Blocking, DropOldest, and DropNewest.

Explanation ​

Detailed rules explaining key parameters and behaviors

  • This is a type alias, not a separate runtime adapter.
  • AsyncOverflowPolicy::Blocking waits for queue space when a non-blocking enqueue does not succeed.
  • AsyncOverflowPolicy::DropOldest lets the underlying async queue discard older pending records when capacity is limited.
  • AsyncOverflowPolicy::DropNewest discards the incoming record instead of blocking.
  • The same enum is used by AsyncLoggerConfig::new(...), async config parsing, and the queue-kind mapping inside AsyncLogger.
  • The canonical labels Blocking, DropOldest, and DropNewest are also the labels emitted again by async config serializers, so export and parse stay aligned around one public vocabulary.
  • Async config parsing accepts the canonical label DropNewest and also the compatibility alias DropLatest, both mapping to the same public enum variant.
  • When try_put(...) reports that a record was not accepted under a drop policy, dropped_count() increases for that rejected enqueue.

How to Use ​

Here are some specific examples provided.

When Need Backpressure Instead Of Silent Dropping ​

When producers should wait for queue space:

moonbit
let config = AsyncLoggerConfig::new(max_pending=64, overflow=AsyncOverflowPolicy::Blocking)

In this example, logging pressure can slow producers instead of dropping data immediately.

When Need Bounded Async Logging With Drop Behavior ​

When async logging should keep moving under load without blocking callers:

moonbit
let config = AsyncLoggerConfig::new(max_pending=64, overflow=AsyncOverflowPolicy::DropNewest)

In this example, the incoming record is dropped if the queue cannot accept it.

Error Case ​

e.g.:

  • If async config text uses unsupported overflow text, async config parsing raises a failure.

  • The parser error path for unsupported overflow text is the same Failure surface used by the async config utilities.

  • Under drop policies, sustained overload increases dropped_count() instead of guaranteeing delivery.

  • The precise record discarded by the underlying queue behavior depends on the selected policy and queue implementation, so callers should not assume dropped_count() alone identifies which message was lost.

Notes ​

  1. This policy applies to bitlogger_async, not synchronous QueuedSink.

  2. Choose Blocking only when producer-side waiting is acceptable for the caller.

  3. Serialized config uses the canonical DropNewest label even though the parser also accepts DropLatest.

Published from the repository docs folder with VitePress.