Skip to content

Add atomic KVStore batch writes for restart-consistent state #970

Description

@joostjager

Issue #966 tracks a recurring class of crash/replay gaps between LDK-managed state and ldk-node-managed state. LDK persists ChannelManager, ChannelMonitors, and replayable LDK events. ldk-node separately persists PaymentDetails in PaymentStore and user-facing events in EventQueue.

When those streams are written independently, one side of a logical transition can become durable while the other does not. That leads to missing payment records, replay-only reconstruction, duplicate app events, startup backfill questions, and case-by-case reconciliation logic.

I think we should consider adding an atomic batch-write primitive to the ldk-node KV store layer, so related records can be committed as one restart-consistent unit. For example, one batch could include the LDK-derived persistence update, the corresponding PaymentStore update, and the EventQueue update that exposes it to the application.

The goal is not to require SQL, one big serialized blob, or a full LDK persistence redesign. The narrower goal is to let ldk-node write semantically coupled records together when needed, and have either all of them become durable or none of them become durable.

This seems like a natural extension of deferred writing. We already hold work until a persistence boundary; the missing piece is that ldk-node records still land through separate streams. If the underlying store supports atomic batches, the same boundary could include ldk-node state too.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions