Clean up old releases

This commit is contained in:
Robert committed 2023-03-04 19:25:31 +01:00
1 parent 5d01665d6e
commit ee19776afa
6 files changed
+65 -39

No files matched your search

@@ -7,6 +7,7 @@ public class ReleaseEntity
public Guid Id { get; set; }
public string Version { get; set; }
public string ReleaseId { get; set; }
public ReleaseEntityStatus Status { get; set; }
public DateTimeOffset? InstalledAt { get; set; }
}
@@ -15,5 +16,6 @@ public enum ReleaseEntityStatus
{
Queued,
Installed,
Historical
Historical,
Unknown
}
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Artemis.Storage.Entities.General;
using Artemis.Storage.Repositories.Interfaces;
using LiteDB;
@@ -18,25 +17,25 @@ public class ReleaseRepository : IReleaseRepository
_repository.Database.GetCollection<ReleaseEntity>().EnsureIndex(s => s.Status);
}
public string GetQueuedVersion()
public ReleaseEntity GetQueuedVersion()
{
return _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Queued).FirstOrDefault()?.Version;
return _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Queued).FirstOrDefault();
}
public string GetInstalledVersion()
public ReleaseEntity GetInstalledVersion()
{
return _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Installed).FirstOrDefault()?.Version;
return _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Installed).FirstOrDefault();
}
public string GetPreviousInstalledVersion()
public ReleaseEntity GetPreviousInstalledVersion()
{
return _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Historical).OrderByDescending(r => r.InstalledAt).FirstOrDefault()?.Version;
return _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Historical).OrderByDescending(r => r.InstalledAt).FirstOrDefault();
}
public void QueueInstallation(string version)
public void QueueInstallation(string version, string releaseId)
{
// Mark release as queued and add if missing
ReleaseEntity release = _repository.Query<ReleaseEntity>().Where(r => r.Version == version).FirstOrDefault() ?? new ReleaseEntity {Version = version};
ReleaseEntity release = _repository.Query<ReleaseEntity>().Where(r => r.Version == version).FirstOrDefault() ?? new ReleaseEntity {Version = version, ReleaseId = releaseId};
release.Status = ReleaseEntityStatus.Queued;
_repository.Upsert(release);
}
@@ -50,10 +49,7 @@ public class ReleaseRepository : IReleaseRepository
_repository.Upsert(release);
// Mark other releases as historical
List<ReleaseEntity> oldReleases = _repository.Query<ReleaseEntity>().Where(r => r.Version != version && r.Status == ReleaseEntityStatus.Installed).ToList();
if (!oldReleases.Any())
return;
List<ReleaseEntity> oldReleases = _repository.Query<ReleaseEntity>().Where(r => r.Version != version && r.Status != ReleaseEntityStatus.Historical).ToList();
foreach (ReleaseEntity oldRelease in oldReleases)
oldRelease.Status = ReleaseEntityStatus.Historical;
_repository.Update<ReleaseEntity>(oldReleases);
@@ -61,16 +57,20 @@ public class ReleaseRepository : IReleaseRepository
public void DequeueInstallation()
{
_repository.DeleteMany<ReleaseEntity>(r => r.Status == ReleaseEntityStatus.Queued);
// Mark all queued releases as unknown, until FinishInstallation is called we don't know the status
List<ReleaseEntity> queuedReleases = _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Queued).ToList();
foreach (ReleaseEntity queuedRelease in queuedReleases)
queuedRelease.Status = ReleaseEntityStatus.Unknown;
_repository.Update<ReleaseEntity>(queuedReleases);
}
}
public interface IReleaseRepository : IRepository
{
string GetQueuedVersion();
string GetInstalledVersion();
string GetPreviousInstalledVersion();
void QueueInstallation(string version);
ReleaseEntity GetQueuedVersion();
ReleaseEntity GetInstalledVersion();
ReleaseEntity GetPreviousInstalledVersion();
void QueueInstallation(string version, string releaseId);
void FinishInstallation(string version);
void DequeueInstallation();
}