feat(batch2): verify memstore remainder features
This commit is contained in:
@@ -103,6 +103,23 @@ public sealed class JetStreamMemStore : IStreamStore
|
||||
_scheduling = new MsgScheduling(RunMsgScheduling);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Factory that mirrors Go <c>newMemStore</c> mapping semantics.
|
||||
/// </summary>
|
||||
public static JetStreamMemStore NewMemStore(StreamConfig cfg)
|
||||
{
|
||||
var ms = new JetStreamMemStore(cfg);
|
||||
|
||||
if (cfg.FirstSeq > 0)
|
||||
{
|
||||
var (_, err) = ms.PurgeInternal(cfg.FirstSeq);
|
||||
if (err != null)
|
||||
throw err;
|
||||
}
|
||||
|
||||
return ms;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// IStreamStore — store / load
|
||||
// -----------------------------------------------------------------------
|
||||
@@ -1133,17 +1150,7 @@ public sealed class JetStreamMemStore : IStreamStore
|
||||
_mu.EnterReadLock();
|
||||
try
|
||||
{
|
||||
if (_msgs == null || _msgs.Count == 0) return (Array.Empty<ulong>(), null);
|
||||
var seqs = new List<ulong>(_fss.Size());
|
||||
_fss.IterFast((subj, ss) =>
|
||||
{
|
||||
if (ss.LastNeedsUpdate)
|
||||
RecalculateForSubj(Encoding.UTF8.GetString(subj), ss);
|
||||
seqs.Add(ss.Last);
|
||||
return true;
|
||||
});
|
||||
seqs.Sort();
|
||||
return (seqs.ToArray(), null);
|
||||
return AllLastSeqsLocked();
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -1151,6 +1158,27 @@ public sealed class JetStreamMemStore : IStreamStore
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns sorted per-subject last sequences without taking locks.
|
||||
/// Mirrors Go <c>allLastSeqsLocked</c>.
|
||||
/// </summary>
|
||||
private (ulong[] Seqs, Exception? Error) AllLastSeqsLocked()
|
||||
{
|
||||
if (_msgs == null || _msgs.Count == 0) return (Array.Empty<ulong>(), null);
|
||||
|
||||
var seqs = new List<ulong>(_fss.Size());
|
||||
_fss.IterFast((subj, ss) =>
|
||||
{
|
||||
if (ss.LastNeedsUpdate)
|
||||
RecalculateForSubj(Encoding.UTF8.GetString(subj), ss);
|
||||
seqs.Add(ss.Last);
|
||||
return true;
|
||||
});
|
||||
|
||||
seqs.Sort();
|
||||
return (seqs.ToArray(), null);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public (ulong[] Seqs, Exception? Error) MultiLastSeqs(string[] filters, ulong maxSeq, int maxAllowed)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user