Documentation
¶
Overview ¶
Package text implements a state-based Replicated Growable Array (RGA).
Positions are stable mutation tags, not offsets. Offsets are resolved only for a local edit, which makes duplicate and out-of-order deltas safe.
Index ¶
- Variables
- type Delta
- type Options
- type Position
- type RGA
- func (r *RGA) ApplyDelta(delta Delta) error
- func (r *RGA) ClockState() clock.State
- func (r *RGA) CompactTombstones(tags []Position) (int, error)
- func (r *RGA) Delete(offset, count int) (Delta, error)
- func (r *RGA) Insert(offset int, value string) (Delta, error)
- func (r *RGA) MarshalBinary() ([]byte, error)
- func (r *RGA) MarshalBinaryWithClockState() ([]byte, clock.State, error)
- func (r *RGA) MarshalJSON() ([]byte, error)
- func (r *RGA) MarshalRunBinary() ([]byte, error)
- func (r *RGA) Merge(other *RGA) error
- func (r *RGA) MissingParents() []Position
- func (r *RGA) PendingCount() int
- func (r *RGA) Positions() []Position
- func (r *RGA) Snapshot(frontier map[string]crdt.Tag) (snapshot.Snapshot, error)
- func (r *RGA) SnapshotCurrentState() (snapshot.Snapshot, error)
- func (r *RGA) SnapshotRunCurrentState() (snapshot.Snapshot, error)
- func (r *RGA) State() crdt.StateSnapshot
- func (r *RGA) String() string
- func (r *RGA) TombstoneTags() []Position
- func (r *RGA) UnmarshalBinary(data []byte) error
- func (r *RGA) UnmarshalBinaryWithLimits(data []byte, limits frame.DecoderLimits) error
- func (r *RGA) UnmarshalRunBinary(data []byte) error
Constants ¶
This section is empty.
Variables ¶
var ( ErrNilText = errors.New("text: nil RGA") ErrInvalidReplicaID = errors.New("text: invalid replica ID") ErrInvalidText = errors.New("text: invalid UTF-8 text") ErrRange = errors.New("text: range outside visible text") ErrInvalidDelta = errors.New("text: invalid RGA delta") // ErrIncompleteState indicates a state snapshot contains an unresolved // parent reference. Deltas may be partial for out-of-order delivery, but a // recoverable state frame must include the complete parent closure. ErrIncompleteState = errors.New("text: incomplete RGA state") ErrTagConflict = errors.New("text: conflicting node for one tag") // ErrUnsafeCompaction means a tombstone still anchors local or unresolved // descendants, so removing it would change RGA ordering or permit a stale // insertion to become visible. ErrUnsafeCompaction = errors.New("text: unsafe RGA tombstone compaction") // ErrResourceLimit indicates that accepting a delta would exceed the // receiver's configured in-memory safety limits. ErrResourceLimit = errors.New("text: RGA resource limit exceeded") )
Functions ¶
This section is empty.
Types ¶
type Delta ¶
type Delta struct {
// contains filtered or unexported fields
}
Delta is a joinable partial RGA state. Nodes and tombstones are deliberately opaque so a malformed delta cannot be assembled by direct field mutation.
func UnmarshalRGADelta ¶
UnmarshalRGADelta decodes one bounded canonical RGA delta frame.
func UnmarshalRGADeltaWithLimits ¶
func UnmarshalRGADeltaWithLimits(data []byte, limits frame.DecoderLimits) (Delta, error)
func UnmarshalRGARunDelta ¶ added in v1.0.6
UnmarshalRGARunDelta decodes a bounded run-v2 delta.
func (Delta) MarshalBinary ¶
MarshalBinary returns the canonical framed RGA delta.
func (Delta) MarshalJSON ¶ added in v1.0.5
MarshalJSON returns a diagnostic summary for structured logs. It omits text content, positions, tombstone identities, and clock state.
func (Delta) MarshalRunBinary ¶ added in v1.0.6
MarshalRunBinary encodes a delta with compact same-replica parent chains.
type Options ¶ added in v1.0.6
Options bounds retained RGA metadata. Values must be positive. The defaults match the maximum element count of one default framed payload while keeping unresolved dependency state substantially smaller than a full document. Applications handling untrusted peers should choose limits appropriate to a replication group instead of relying on process-wide memory availability.
func DefaultOptions ¶ added in v1.0.6
func DefaultOptions() Options
DefaultOptions returns conservative per-RGA retention limits.
type Position ¶
Position is a stable, opaque identifier for one Unicode scalar value. It remains valid after inserts before it and after it has been deleted.
type RGA ¶
type RGA struct {
// contains filtered or unexported fields
}
RGA is a collaborative text CRDT. A tombstone retained for a deleted position wins even if it arrives before the corresponding insertion.
func NewFromClockWithOptions ¶ added in v1.0.6
NewFromClockWithOptions restores an RGA clock with explicit retention limits. Clock state must be persisted atomically with a complete snapshot before reusing its replica ID.
func NewWithOptions ¶ added in v1.0.6
NewWithOptions constructs an RGA with explicit retention limits.
func (*RGA) ApplyDelta ¶
func (*RGA) ClockState ¶
func (*RGA) CompactTombstones ¶ added in v1.0.6
CompactTombstones physically removes exactly the requested tombstoned leaf nodes. It is deliberately stricter than OR-Set compaction: an RGA deletion remains a structural anchor while any integrated or pending child refers to it. Call this only after an authenticated, exact-acknowledgement epoch has durably checkpointed a post-compaction snapshot and retired old deltas.
The operation is all-or-nothing. Unknown tags are ignored; invalid tags, unresolved dependencies, non-leaf nodes, or tombstones received before their insertion return ErrUnsafeCompaction without changing the RGA.
func (*RGA) Delete ¶
Delete marks count visible runes starting at offset as removed. The delta carries only tombstones; replicas that have not received the inserts yet retain those tombstones until the matching nodes arrive.
func (*RGA) Insert ¶
Insert inserts valid UTF-8 text before visible rune offset. It creates one node per Unicode scalar, so offset/count are rune based rather than byte based and can never split UTF-8.
func (*RGA) MarshalBinary ¶
MarshalBinary returns the canonical framed RGA state.
func (*RGA) MarshalBinaryWithClockState ¶
func (*RGA) MarshalJSON ¶ added in v1.0.5
MarshalJSON returns a diagnostic summary for structured logs. It omits text content, positions, tombstone identities, and clock state.
func (*RGA) MarshalRunBinary ¶ added in v1.0.6
MarshalRunBinary encodes complete RGA state using the separately negotiated run-v2 frame. It retains v1 scalar Positions and is therefore safe to merge with v1 deltas after decoding.
func (*RGA) MissingParents ¶ added in v1.0.6
MissingParents returns stable IDs that must arrive before pending nodes can integrate. The returned slice is sorted and safe for callers to retain.
func (*RGA) PendingCount ¶ added in v1.0.6
PendingCount reports the number of accepted nodes still waiting for a missing parent. It is useful for replication diagnostics and backpressure.
func (*RGA) SnapshotRunCurrentState ¶ added in v1.0.6
SnapshotRunCurrentState returns an HLC-backed, validated run-v2 snapshot.
func (*RGA) State ¶
func (r *RGA) State() crdt.StateSnapshot
func (*RGA) TombstoneTags ¶ added in v1.0.6
TombstoneTags returns every retained deletion tag in canonical order. It is an acknowledgement input, not proof that a tag is safe to collect.
func (*RGA) UnmarshalBinary ¶
func (*RGA) UnmarshalBinaryWithLimits ¶
func (r *RGA) UnmarshalBinaryWithLimits(data []byte, limits frame.DecoderLimits) error
func (*RGA) UnmarshalRunBinary ¶ added in v1.0.6
UnmarshalRunBinary installs one complete run-v2 RGA state frame.