diff --git a/Content.Server/Database/UserDbDataManager.cs b/Content.Server/Database/UserDbDataManager.cs index 549758d801..f2c506240b 100644 --- a/Content.Server/Database/UserDbDataManager.cs +++ b/Content.Server/Database/UserDbDataManager.cs @@ -63,7 +63,12 @@ public sealed class UserDbDataManager public bool IsLoadComplete(IPlayerSession session) { - return _users[session.UserId].Task.IsCompleted; + return GetLoadTask(session).IsCompleted; + } + + public Task GetLoadTask(IPlayerSession session) + { + return _users[session.UserId].Task; } private sealed record UserData(CancellationTokenSource Cancel, Task Task); diff --git a/Content.Server/GameTicking/GameTicker.Player.cs b/Content.Server/GameTicking/GameTicker.Player.cs index c114cf418c..f18e00e4ab 100644 --- a/Content.Server/GameTicking/GameTicker.Player.cs +++ b/Content.Server/GameTicking/GameTicker.Player.cs @@ -120,8 +120,27 @@ namespace Content.Server.GameTicking async void SpawnWaitDb() { + // Temporary debugging code to fix a random test failures + var initialStatus = _userDb.GetLoadTask(session).Status; + var prefsLoaded = _prefsManager.HavePreferencesLoaded(session); + DebugTools.Assert(session.Status == SessionStatus.InGame); + await _userDb.WaitLoadComplete(session); - SpawnPlayer(session, EntityUid.Invalid); + + try + { + SpawnPlayer(session, EntityUid.Invalid); + } + catch (Exception e) + { + Log.Error($"Caught exception while trying to spawn a player.\n" + + $"Initial DB task status: {initialStatus}\n" + + $"Prefs initially loaded: {prefsLoaded}\n" + + $"DB task status: {_userDb.GetLoadTask(session).Status}\n" + + $"Prefs loaded: {_prefsManager.HavePreferencesLoaded(session)}\n" + + $"Exception: \n{e}"); + throw; + } } async void SpawnObserverWaitDb() diff --git a/Content.Server/Preferences/Managers/IServerPreferencesManager.cs b/Content.Server/Preferences/Managers/IServerPreferencesManager.cs index 83df700b71..8c06e00ab1 100644 --- a/Content.Server/Preferences/Managers/IServerPreferencesManager.cs +++ b/Content.Server/Preferences/Managers/IServerPreferencesManager.cs @@ -17,5 +17,6 @@ namespace Content.Server.Preferences.Managers bool TryGetCachedPreferences(NetUserId userId, [NotNullWhen(true)] out PlayerPreferences? playerPreferences); PlayerPreferences GetPreferences(NetUserId userId); IEnumerable> GetSelectedProfilesForPlayers(List userIds); + bool HavePreferencesLoaded(IPlayerSession session); } }