feat(batch28): merge jetstream-api
This commit is contained in:
@@ -178,6 +178,72 @@ public sealed partial class Account
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
@@ -530,4 +596,22 @@ public sealed partial class Account
|
||||
|
||||
return EnableAllJetStreamServiceImportsAndMappings();
|
||||
}
|
||||
|
||||
internal Exception? JsNonClusteredStreamLimitsCheck(StreamConfig config)
|
||||
{
|
||||
var (server, jsa, err) = CheckForJetStream();
|
||||
if (err is not null || server is null || jsa is null)
|
||||
return err ?? new InvalidOperationException("jetstream not enabled for account");
|
||||
|
||||
var selected = jsa.SelectLimits(config.Replicas);
|
||||
if (!selected.Found)
|
||||
return new InvalidOperationException(JsApiErrors.NewJSNoLimitsError().Description ?? "jetstream limits not configured");
|
||||
|
||||
var reservation = jsa.TieredReservation(selected.Tier, config);
|
||||
var js = server.GetJetStream();
|
||||
if (js is null)
|
||||
return new InvalidOperationException("jetstream not enabled");
|
||||
|
||||
return js.CheckAccountLimits(selected.Limits, config, reservation);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user