feat(batch28): implement jetstream api dispatch and account request core

This commit is contained in:
Joseph Doherty
2026-02-28 22:24:10 -05:00
parent 2c4bebfb8d
commit bf115b116e
7 changed files with 778 additions and 5 deletions

View File

@@ -127,6 +127,72 @@ public sealed partial class Account
return (server, jsa, null);
}
internal void TrackAPI()
{
_mu.EnterReadLock();
var jsa = JetStream;
_mu.ExitReadLock();
if (jsa is null)
return;
jsa.UsageLock.EnterWriteLock();
try
{
jsa.UsageApi++;
jsa.ApiTotal++;
jsa.SendClusterUsageUpdate();
if (jsa.Js is JetStream js)
Interlocked.Add(ref js.ApiTotal, 1);
}
finally
{
jsa.UsageLock.ExitWriteLock();
}
}
internal void TrackAPIErr()
{
_mu.EnterReadLock();
var jsa = JetStream;
_mu.ExitReadLock();
if (jsa is null)
return;
jsa.UsageLock.EnterWriteLock();
try
{
jsa.UsageApi++;
jsa.ApiTotal++;
jsa.UsageErr++;
jsa.ApiErrors++;
jsa.SendClusterUsageUpdate();
if (jsa.Js is JetStream js)
{
Interlocked.Add(ref js.ApiTotal, 1);
Interlocked.Add(ref js.ApiErrors, 1);
}
}
finally
{
jsa.UsageLock.ExitWriteLock();
}
}
internal (bool Enabled, bool ShouldError) CheckJetStream()
{
_mu.EnterReadLock();
try
{
return (JetStream is not null, _nleafs + _nrleafs == 0);
}
finally
{
_mu.ExitReadLock();
}
}
internal (bool MaxBytesRequired, long MaxStreamBytes) MaxBytesLimits(StreamConfig? cfg)
{
_mu.EnterReadLock();