Skip to content

Commit 2865a6e

Browse files
committed
Remove Refresh job states if their job doesn't exist
1 parent fa30e48 commit 2865a6e

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

Refresh.Database/GameDatabaseContext.Workers.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ public bool MarkWorkerContacted(int id)
5050
return JsonConvert.DeserializeObject(state.State, type);
5151
}
5252

53+
public IQueryable<string> GetAllJobIds(WorkerClass? workerClass)
54+
{
55+
IQueryable<PersistentJobState> states = this.JobStates;
56+
if (workerClass != null) states = states.Where(s => s.Class == workerClass);
57+
return states.Select(s => s.JobId);
58+
}
59+
5360
public void UpdateOrCreateJobState(string jobId, object state, WorkerClass workerClass)
5461
{
5562
PersistentJobState? jobState = this.JobStates.FirstOrDefault(s => s.JobId == jobId && s.Class == workerClass);
@@ -66,4 +73,10 @@ public void UpdateOrCreateJobState(string jobId, object state, WorkerClass worke
6673
jobState.State = JsonConvert.SerializeObject(state, Formatting.None);
6774
this.SaveChanges();
6875
}
76+
77+
public void RemoveJobState(string jobId, bool save = true)
78+
{
79+
this.JobStates.RemoveRange(s => s.JobId == jobId);
80+
if (save) this.SaveChanges();
81+
}
6982
}

Refresh.Workers/WorkerManager.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,20 @@ public void Start()
105105
this._threadShouldRun = true;
106106
Thread thread = new(() =>
107107
{
108+
GameDatabaseContext database = this._databaseProvider.GetContext();
109+
string[] jobsFromWorkerManager = this._jobs.Select(j => j.GetType().Name).ToArray();
110+
string[] jobsFromDatabase = database.GetAllJobIds(WorkerClass.Refresh).ToArray();
111+
112+
foreach (string jobId in jobsFromDatabase)
113+
{
114+
if (!jobsFromWorkerManager.Any(j => j == jobId))
115+
{
116+
this._logger.LogInfo(RefreshContext.Worker, $"Removing job state for {jobId} because it doesn't exist in RefreshWorkerManager (likely from a newer/different Refresh build).");
117+
database.RemoveJobState(jobId, false);
118+
}
119+
}
120+
database.SaveChanges();
121+
108122
while (this._threadShouldRun)
109123
{
110124
try

0 commit comments

Comments
 (0)