Files
natsdotnet/src/NATS.Server/JetStream/Storage/IConsumerStore.cs
Joseph Doherty 921554f410 feat: define StreamStore/ConsumerStore interfaces from Go store.go
Port IStreamStore, IConsumerStore, StoreMsg, StreamState, SimpleState,
ConsumerState, FileStoreConfig, StoreCipher, StoreCompression types.
Rename Models.StreamState → ApiStreamState to avoid namespace conflict.
2026-02-23 21:06:16 -05:00

57 lines
2.1 KiB
C#

using NATS.Server.JetStream.Models;
using StorageType = NATS.Server.JetStream.Models.StorageType;
namespace NATS.Server.JetStream.Storage;
// Go: server/store.go:357
/// <summary>
/// Persists and retrieves durable consumer state: delivery progress, ack floor,
/// pending messages, and redelivery counts. One store instance per consumer.
/// Mirrors Go's ConsumerStore interface.
/// </summary>
public interface IConsumerStore
{
// Go: ConsumerStore.SetStarting — initialise the starting stream sequence for a new consumer
void SetStarting(ulong sseq);
// Go: ConsumerStore.UpdateStarting — update the starting sequence after a reset
void UpdateStarting(ulong sseq);
// Go: ConsumerStore.Reset — reset state to a given stream sequence
void Reset(ulong sseq);
// Go: ConsumerStore.HasState — returns true if any persisted state exists
bool HasState();
// Go: ConsumerStore.UpdateDelivered — record a new delivery (dseq=consumer seq, sseq=stream seq,
// dc=delivery count, ts=Unix nanosecond timestamp)
void UpdateDelivered(ulong dseq, ulong sseq, ulong dc, long ts);
// Go: ConsumerStore.UpdateAcks — record an acknowledgement (dseq=consumer seq, sseq=stream seq)
void UpdateAcks(ulong dseq, ulong sseq);
// Go: ConsumerStore.Update — overwrite the full consumer state in one call
void Update(ConsumerState state);
// Go: ConsumerStore.State — return a snapshot of current consumer state
ConsumerState State();
// Go: ConsumerStore.BorrowState — return state without copying (caller must not retain beyond call)
ConsumerState BorrowState();
// Go: ConsumerStore.EncodedState — return the binary-encoded state for replication
byte[] EncodedState();
// Go: ConsumerStore.Type — the storage type backing this store (File or Memory)
StorageType Type();
// Go: ConsumerStore.Stop — flush and close the store without deleting data
void Stop();
// Go: ConsumerStore.Delete — stop the store and delete all persisted state
void Delete();
// Go: ConsumerStore.StreamDelete — called when the parent stream is deleted
void StreamDelete();
}