Fix admin logs duplicate id error when running tests (#16203)

This commit is contained in:
DrSmugleaf
2023-05-07 03:14:23 -07:00
committed by GitHub
parent c48f17aa33
commit d072cb6144
7 changed files with 35 additions and 108 deletions

View File

@@ -68,8 +68,8 @@ public sealed partial class AdminLogManager : SharedAdminLogManager, IAdminLogMa
// Per update
private TimeSpan _nextUpdateTime;
private readonly ConcurrentQueue<QueuedLog> _logQueue = new();
private readonly ConcurrentQueue<QueuedLog> _preRoundLogQueue = new();
private readonly ConcurrentQueue<AdminLog> _logQueue = new();
private readonly ConcurrentQueue<AdminLog> _preRoundLogQueue = new();
// Per round
private int _currentRoundId;
@@ -171,7 +171,7 @@ public sealed partial class AdminLogManager : SharedAdminLogManager, IAdminLogMa
_nextUpdateTime = _timing.RealTime.Add(_queueSendDelay);
// TODO ADMIN LOGS array pool
var copy = new List<QueuedLog>(_logQueue.Count + _preRoundLogQueue.Count);
var copy = new List<AdminLog>(_logQueue.Count + _preRoundLogQueue.Count);
copy.AddRange(_logQueue);
_logQueue.Clear();
@@ -183,10 +183,10 @@ public sealed partial class AdminLogManager : SharedAdminLogManager, IAdminLogMa
}
else
{
foreach (var queued in _preRoundLogQueue)
foreach (var log in _preRoundLogQueue)
{
queued.Log.RoundId = _currentRoundId;
CacheLog(queued);
log.RoundId = _currentRoundId;
CacheLog(log);
}
copy.AddRange(_preRoundLogQueue);
@@ -231,6 +231,17 @@ public sealed partial class AdminLogManager : SharedAdminLogManager, IAdminLogMa
{
Interlocked.Exchange(ref _currentLogId, 0);
if (!_preRoundLogQueue.IsEmpty)
{
// This technically means that you could get pre-round logs from
// a previous round passed onto the next one
// If this happens please file a complaint with your nearest lottery
foreach (var log in _preRoundLogQueue)
{
log.Id = NextLogId;
}
}
if (_metricsEnabled)
{
PreRoundQueueCapReached.Set(0);
@@ -240,30 +251,26 @@ public sealed partial class AdminLogManager : SharedAdminLogManager, IAdminLogMa
}
}
private async void Add(LogType type, LogImpact impact, string message, JsonDocument json, HashSet<Guid> players, Dictionary<int, string?> entities)
private void Add(LogType type, LogImpact impact, string message, JsonDocument json, HashSet<Guid> players, List<AdminLogEntity> entities)
{
var logId = NextLogId;
var date = DateTime.UtcNow;
var log = new AdminLog
{
Id = logId,
Id = NextLogId,
RoundId = _currentRoundId,
Type = type,
Impact = impact,
Date = date,
Date = DateTime.UtcNow,
Message = message,
Json = json,
Players = new List<AdminLogPlayer>(players.Count)
Players = new List<AdminLogPlayer>(players.Count),
Entities = entities
};
var queued = new QueuedLog(log, entities);
foreach (var id in players)
{
var player = new AdminLogPlayer
{
LogId = logId,
LogId = log.Id,
PlayerUserId = id
};
@@ -272,11 +279,11 @@ public sealed partial class AdminLogManager : SharedAdminLogManager, IAdminLogMa
if (_runLevel == GameRunLevel.PreRoundLobby)
{
_preRoundLogQueue.Enqueue(queued);
_preRoundLogQueue.Enqueue(log);
}
else
{
_logQueue.Enqueue(queued);
_logQueue.Enqueue(log);
CacheLog(log);
}
}