Skip to content

Async-logger-pending-count

Read the current number of queued records that are still waiting to be processed. This API is the most direct backlog metric for an async logger instance.

Interface

moonbit
pub fn[S] AsyncLogger::pending_count(self : AsyncLogger[S]) -> Int {}

input

  • self : AsyncLogger[S] - Async logger whose current backlog should be inspected.

output

  • Int - Current number of pending records still in the async pipeline.

Explanation

Detailed rules explaining key parameters and behaviors

  • The count increases when records are accepted into the queue.
  • The count decreases as the worker drains records.
  • The count is also reset to 0 when queued records are abandoned through clear-close paths such as close(clear=true).
  • Log attempts against a closed queue do not create new pending backlog.
  • This is a point-in-time metric and may change immediately after it is read.
  • Use this helper when a single backlog number is enough and a full state() snapshot is unnecessary.

How to Use

Here are some specific examples provided.

When Need A Fast Backlog Check

When code should observe queue pressure directly:

moonbit
let pending = logger.pending_count()

In this example, callers get the current queue backlog without building a full diagnostics snapshot.

When Wait For Near-idle Conditions

When operators or tests want to inspect drain progress:

moonbit
if logger.pending_count() == 0 {
  println("queue idle")
}

In this example, the queue backlog is checked directly.

Error Case

e.g.:

  • If the worker is not running, pending_count() may stay above 0 until records are drained or cleared.

  • If wait_idle() returns early because has_failed() became true, pending_count() may still be above 0 until later cleanup or clear-close handling runs.

  • In the current tested split, that later cleanup can either force the leftover pending item into dropped_count() on native-worker shutdown paths or leave the closed-queue remainder visible in pending_count() on compatibility shutdown paths.

  • That means pending_count() can still stay above 0 even after is_closed=true on compatibility-style shutdown paths, because closure there does not necessarily convert the leftover failed backlog into dropped records.

  • A later restarted run() can still drain that retained backlog after failure-reset startup, so a nonzero pending count after failure is not necessarily a permanent terminal state.

  • If the queue is empty, the method simply returns 0.

Notes

  1. Use state() when you also need dropped counts, failure state, or runtime mode.

  2. This helper is useful for lightweight health checks and tests.

  3. Pair it with is_running() or has_failed() when backlog alone is not enough to explain whether the worker is actively draining, stopped, or failed.

Published from the repository docs folder with VitePress.