feat(deployment): add secure Linux runtime (#17)
quality-gate / quality (push) Failing after 1m9s
quality-gate / container (push) Has been skipped

This commit is contained in:
KyuubiYoru
2026-07-16 15:03:04 +02:00
parent be732de7c9
commit 08729ae25c
23 changed files with 1941 additions and 28 deletions
@@ -15,6 +15,7 @@ internal sealed class InMemoryEphemeralRendezvousStore : IEphemeralRendezvousSto
private readonly Dictionary<MediationHandle, SessionListingId> _presenceHandles = [];
private readonly Dictionary<MediationHandle, PresenceEntry> _presence = [];
private readonly Dictionary<JoinAttemptId, AttemptEntry> _attempts = [];
private readonly PriorityQueue<AttemptExpiry, long> _attemptExpiries = new();
private readonly Dictionary<JoinAttemptId, OutcomeReportEntry> _outcomeReports = [];
private readonly Dictionary<MediationHandle, JoinAttemptId> _attemptHandles = [];
private readonly Dictionary<string, IdempotencyEntry> _idempotency = new(StringComparer.Ordinal);
@@ -82,6 +83,15 @@ internal sealed class InMemoryEphemeralRendezvousStore : IEphemeralRendezvousSto
}
}
internal int GetActiveJoinAttemptCountForDrain()
{
lock (_gate)
{
_expiryChurn += RemoveExpiredAttempts(_monotonicClock.Elapsed);
return _attempts.Count;
}
}
internal EphemeralStoreSnapshot GetMetricsSnapshot()
{
lock (_gate)
@@ -451,6 +461,9 @@ internal sealed class InMemoryEphemeralRendezvousStore : IEphemeralRendezvousSto
now + _options.JoinAttemptLifetime,
WallDeadline(now, _options.JoinAttemptLifetime));
_attempts.Add(command.AttemptId, attempt);
_attemptExpiries.Enqueue(
new AttemptExpiry(command.AttemptId, attempt.Deadline),
attempt.Deadline.Ticks);
_outcomeReports.Add(command.AttemptId, new(
command.ListingId,
command.ClientSubject,
@@ -920,15 +933,7 @@ internal sealed class InMemoryEphemeralRendezvousStore : IEphemeralRendezvousSto
_presence.Remove(handle);
}
JoinAttemptId[] expiredAttempts = _attempts
.Where(item => item.Value.Deadline <= now)
.Select(static item => item.Key)
.ToArray();
_expiryChurn += expiredAttempts.Length;
foreach (JoinAttemptId attemptId in expiredAttempts)
{
RemoveAttempt(attemptId);
}
_expiryChurn += RemoveExpiredAttempts(now);
JoinAttemptId[] expiredOutcomes = _outcomeReports
.Where(item => item.Value.Deadline <= now)
@@ -958,6 +963,7 @@ internal sealed class InMemoryEphemeralRendezvousStore : IEphemeralRendezvousSto
_presenceHandles.Clear();
_presence.Clear();
_attempts.Clear();
_attemptExpiries.Clear();
_outcomeReports.Clear();
_attemptHandles.Clear();
_idempotency.Clear();
@@ -1000,6 +1006,24 @@ internal sealed class InMemoryEphemeralRendezvousStore : IEphemeralRendezvousSto
}
}
private int RemoveExpiredAttempts(TimeSpan now)
{
int removed = 0;
while (_attemptExpiries.TryPeek(out AttemptExpiry candidate, out long deadlineTicks)
&& deadlineTicks <= now.Ticks)
{
_attemptExpiries.Dequeue();
if (_attempts.TryGetValue(candidate.AttemptId, out AttemptEntry? current)
&& current.Deadline == candidate.Deadline)
{
RemoveAttempt(candidate.AttemptId);
removed++;
}
}
return removed;
}
private bool HandleExists(MediationHandle handle) =>
_presenceHandles.ContainsKey(handle) || _attemptHandles.ContainsKey(handle);
@@ -1195,6 +1219,8 @@ internal sealed class InMemoryEphemeralRendezvousStore : IEphemeralRendezvousSto
public bool IsCancelled { get; set; }
}
private readonly record struct AttemptExpiry(JoinAttemptId AttemptId, TimeSpan Deadline);
private sealed class OutcomeReportEntry(
SessionListingId listingId,
string clientSubject,