Port batch 32 JS cluster meta feature implementations

This commit is contained in:
Joseph Doherty
2026-02-28 22:30:33 -05:00
parent e878246bed
commit 7e8b81b648
5 changed files with 1038 additions and 0 deletions

View File

@@ -127,6 +127,57 @@ public sealed partial class Account
return (server, jsa, null);
}
internal (NatsServer? Server, JetStream? JetStream, JsAccount? JetStreamAccount) GetJetStreamFromAccount()
{
_mu.EnterReadLock();
var jetStreamAccount = JetStream;
_mu.ExitReadLock();
if (jetStreamAccount == null)
return (null, null, null);
jetStreamAccount.Lock.EnterReadLock();
var jetStream = jetStreamAccount.Js as JetStream;
jetStreamAccount.Lock.ExitReadLock();
if (jetStream == null)
return (null, null, null);
return (jetStream.Server as NatsServer, jetStream, jetStreamAccount);
}
internal bool JetStreamIsStreamLeader(string stream)
{
var (server, jetStream, _) = GetJetStreamFromAccount();
if (server == null || jetStream == null)
return false;
jetStream.Lock.EnterReadLock();
try
{
return (jetStream.Cluster as JetStreamCluster)?.IsStreamLeader(Name, stream) == true;
}
finally
{
jetStream.Lock.ExitReadLock();
}
}
internal bool JetStreamIsConsumerLeader(string stream, string consumer)
{
var (server, jetStream, _) = GetJetStreamFromAccount();
if (server == null || jetStream == null)
return false;
jetStream.Lock.EnterReadLock();
try
{
return (jetStream.Cluster as JetStreamCluster)?.IsConsumerLeader(Name, stream, consumer) == true;
}
finally
{
jetStream.Lock.ExitReadLock();
}
}
internal (bool MaxBytesRequired, long MaxStreamBytes) MaxBytesLimits(StreamConfig? cfg)
{
_mu.EnterReadLock();