feat: complete remaining jetstream parity implementation plan

This commit is contained in:
Joseph Doherty
2026-02-23 10:16:16 -05:00
parent c7bbf45c8f
commit f46b331921
59 changed files with 1734 additions and 54 deletions

View File

@@ -11,11 +11,30 @@ public sealed class JetStreamPublisher
}
public bool TryCapture(string subject, ReadOnlyMemory<byte> payload, out PubAck ack)
=> TryCapture(subject, payload, null, out ack);
=> TryCaptureWithOptions(subject, payload, new PublishOptions(), out ack);
public bool TryCapture(string subject, ReadOnlyMemory<byte> payload, string? msgId, out PubAck ack)
=> TryCaptureWithOptions(subject, payload, new PublishOptions { MsgId = msgId }, out ack);
public bool TryCaptureWithOptions(string subject, ReadOnlyMemory<byte> payload, PublishOptions options, out PubAck ack)
{
if (_preconditions.IsDuplicate(msgId, out var existingSequence))
if (_streamManager.FindBySubject(subject) is not { } stream)
{
ack = new PubAck();
return false;
}
var state = stream.Store.GetStateAsync(default).GetAwaiter().GetResult();
if (!_preconditions.CheckExpectedLastSeq(options.ExpectedLastSeq, state.LastSeq))
{
ack = new PubAck
{
ErrorCode = 10071,
};
return true;
}
if (_preconditions.IsDuplicate(options.MsgId, out var existingSequence))
{
ack = new PubAck
{
@@ -26,14 +45,8 @@ public sealed class JetStreamPublisher
}
var captured = _streamManager.Capture(subject, payload);
if (captured == null)
{
ack = new PubAck();
return false;
}
ack = captured;
_preconditions.Record(msgId, ack.Seq);
ack = captured ?? new PubAck();
_preconditions.Record(options.MsgId, ack.Seq);
return true;
}
}