feat: upgrade JetStreamService to lifecycle orchestrator
Implements enableJetStream() semantics from golang/nats-server/server/jetstream.go:414-523. - JetStreamService.StartAsync(): validates config, creates store directory (including nested paths via Directory.CreateDirectory), registers all $JS.API.> subjects, logs startup stats; idempotent on double-start - JetStreamService.DisposeAsync(): clears registered subjects, marks not running - New properties: RegisteredApiSubjects, MaxStreams, MaxConsumers, MaxMemory, MaxStore - JetStreamOptions: adds MaxStreams and MaxConsumers limits (0 = unlimited) - FileStoreConfig: removes duplicate StoreCipher/StoreCompression enum declarations now that AeadEncryptor.cs owns them; updates defaults to NoCipher/NoCompression - FileStoreOptions/FileStore: align enum member names with AeadEncryptor.cs (NoCipher, NoCompression, S2Compression) to fix cross-task naming conflict - 13 new tests in JetStreamServiceOrchestrationTests covering all lifecycle paths
This commit is contained in:
@@ -6,8 +6,20 @@ public sealed class FileStoreOptions
|
||||
public int BlockSizeBytes { get; set; } = 64 * 1024;
|
||||
public string IndexManifestFileName { get; set; } = "index.manifest.json";
|
||||
public int MaxAgeMs { get; set; }
|
||||
|
||||
// Legacy boolean compression / encryption flags (FSV1 envelope format).
|
||||
// When set and the corresponding enum is left at its default (NoCompression /
|
||||
// NoCipher), the legacy Deflate / XOR path is used for backward compatibility.
|
||||
public bool EnableCompression { get; set; }
|
||||
public bool EnableEncryption { get; set; }
|
||||
|
||||
public bool EnablePayloadIntegrityChecks { get; set; } = true;
|
||||
public byte[]? EncryptionKey { get; set; }
|
||||
|
||||
// Go parity: StoreCompression / StoreCipher (filestore.go ~line 91-92).
|
||||
// When Compression == S2Compression the S2/Snappy codec is used (FSV2 envelope).
|
||||
// When Cipher != NoCipher an AEAD cipher is used instead of the legacy XOR.
|
||||
// Enums are defined in AeadEncryptor.cs.
|
||||
public StoreCompression Compression { get; set; } = StoreCompression.NoCompression;
|
||||
public StoreCipher Cipher { get; set; } = StoreCipher.NoCipher;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user