Skip to content

feat(consensus): admit four-mebibyte protected session values end-to-end #683

Description

@VerifiedOrganic

Problem

The durable SQLite session backend can support protected records with a 4 MiB plaintext ceiling plus 64 KiB of envelope/framing reserve, but the consensus profile cannot truthfully advertise that capacity end to end:

  • CONSENSUS_MAX_RPC_PAYLOAD_BYTES is 2 MiB, so a larger CAS command is rejected before Raft proposal.
  • Consumer batch response admission budgets four JSON bytes per stored payload byte under an 8 MiB aggregate ceiling, so raising the consensus value capability would reject every Get/CAS batch slot.
  • Network frames remain independently bounded and must stay consistent with both request and response ceilings.

This is a generic session-consensus transport/capability gap. Product-specific code must not bypass it or invent a local store/transport substitute.

Required scope

  • Define one explicit maximum protected session value supported by consensus, including command, replication, snapshot, restore, and consumer response framing.
  • Make ConsensusSessionStore::capabilities().max_value_bytes truthful for that complete path.
  • Admit a protected 4 MiB plaintext record plus bounded envelope/framing overhead through a real multi-node proposal and exact readback.
  • Preserve bounded allocation, batching, cancellation, redaction, and fail-closed oversize behavior.
  • Keep point operations usable without making small Get/CAS batches unconditionally fail merely because the backend supports a larger value.
  • Reject exact one-over request/response/replication boundaries before mutation.

Evidence

  • Unit boundary tests for consensus codec/RPC and consumer response admission.
  • Exact-at-limit and one-over proposal tests.
  • Multi-node encrypted CAS/readback/restore proof.
  • Mutation proving that lowering any required transport or response fence makes the acceptance test RED.

Refs #663.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestrustPull requests that update rust code

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions