copybook-sequence-ring 0.4.3

Deterministic sequence reordering primitive for parallel copybook pipelines
Documentation

copybook-sequence-ring

Deterministic sequence reordering primitive for parallel pipelines.

Overview

SequenceRing accepts potentially out-of-order records tagged with a sequence ID and emits them in strict order. This enables deterministic output when processing COBOL records across multiple worker threads, which is critical for maintaining data integrity in parallel pipelines.

Usage

use copybook_sequence_ring::{SequenceRing, SequencedRecord};

let mut ring = SequenceRing::new(100, 50); // channel capacity, max reorder window
let sender = ring.sender();

// Workers send results out of order
sender.send(SequencedRecord::new(2, "second")).unwrap();
sender.send(SequencedRecord::new(1, "first")).unwrap();
sender.send(SequencedRecord::new(3, "third")).unwrap();

// Consumer receives in strict sequence order
assert_eq!(ring.recv_ordered().unwrap(), Some("first"));
assert_eq!(ring.recv_ordered().unwrap(), Some("second"));
assert_eq!(ring.recv_ordered().unwrap(), Some("third"));

Public API

  • SequencedRecord<T> — Record wrapper with a monotonic sequence ID
  • SequenceRing<T> — Bounded channel with reorder buffer for in-order emission
  • SequenceRingStats — Operational statistics (buffer size, sequence progress)

License

AGPL-3.0-or-later