Server side fixes for LL upgrades and list validation

This commit is contained in:
Timothy Baldridge 2021-07-09 22:13:31 -06:00
parent d3725c5b74
commit 5cbed8dade
3 changed files with 125 additions and 106 deletions

View File

@ -260,6 +260,8 @@ namespace Wabbajack.Lib.Downloaders
public override async Task<(Archive? Archive, TempFile NewFile)> FindUpgrade(Archive a, Func<Archive, Task<AbsolutePath>> downloadResolver) public override async Task<(Archive? Archive, TempFile NewFile)> FindUpgrade(Archive a, Func<Archive, Task<AbsolutePath>> downloadResolver)
{ {
if (IsAttachment) return default;
var files = await GetFilesInGroup(); var files = await GetFilesInGroup();
var nl = new Levenshtein(); var nl = new Levenshtein();
@ -273,6 +275,8 @@ namespace Wabbajack.Lib.Downloaders
var tmpHash = await tmp.Path.FileHashAsync(); var tmpHash = await tmp.Path.FileHashAsync();
if (tmpHash == null) return default; if (tmpHash == null) return default;
newFile.Hash = tmpHash.Value; newFile.Hash = tmpHash.Value;
var state = ((TState)newFile.State);
await state.LoadMetaData();
return (newFile, tmp); return (newFile, tmp);
} }

View File

@ -232,12 +232,16 @@ namespace Wabbajack.Server.Services
private AsyncLock _healLock = new AsyncLock(); private AsyncLock _healLock = new AsyncLock();
private async Task<(Archive, ArchiveStatus)> TryToHeal(ValidationData data, Archive archive, ModlistMetadata modList) private async Task<(Archive, ArchiveStatus)> TryToHeal(ValidationData data, Archive archive, ModlistMetadata modList)
{
try
{ {
using var _ = await _healLock.WaitAsync(); using var _ = await _healLock.WaitAsync();
var srcDownload = await _sql.GetArchiveDownload(archive.State.PrimaryKeyString, archive.Hash, archive.Size); var srcDownload =
await _sql.GetArchiveDownload(archive.State.PrimaryKeyString, archive.Hash, archive.Size);
if (srcDownload == null || srcDownload.IsFailed == true) if (srcDownload == null || srcDownload.IsFailed == true)
{ {
_logger.Log(LogLevel.Information, $"Cannot heal {archive.State.PrimaryKeyString} Size: {archive.Size} Hash: {(long)archive.Hash} because it hasn't been previously successfully downloaded"); _logger.Log(LogLevel.Information,
$"Cannot heal {archive.State.PrimaryKeyString} Size: {archive.Size} Hash: {(long)archive.Hash} because it hasn't been previously successfully downloaded");
return (archive, ArchiveStatus.InValid); return (archive, ArchiveStatus.InValid);
} }
@ -258,7 +262,8 @@ namespace Wabbajack.Server.Services
var upgradeTime = DateTime.UtcNow; var upgradeTime = DateTime.UtcNow;
_logger.LogInformation($"Validator Finding Upgrade for {archive.Hash} {archive.State.PrimaryKeyString}"); _logger.LogInformation(
$"Validator Finding Upgrade for {archive.Hash} {archive.State.PrimaryKeyString}");
Func<Archive, Task<AbsolutePath>> resolver = async findIt => Func<Archive, Task<AbsolutePath>> resolver = async findIt =>
{ {
@ -283,11 +288,13 @@ namespace Wabbajack.Server.Services
if (upgrade == default) if (upgrade == default)
{ {
_logger.Log(LogLevel.Information, $"Cannot heal {archive.State.PrimaryKeyString} because an alternative wasn't found"); _logger.Log(LogLevel.Information,
$"Cannot heal {archive.State.PrimaryKeyString} because an alternative wasn't found");
return (archive, ArchiveStatus.InValid); return (archive, ArchiveStatus.InValid);
} }
_logger.LogInformation($"Upgrade {upgrade.Archive.State.PrimaryKeyString} found for {archive.State.PrimaryKeyString}"); _logger.LogInformation(
$"Upgrade {upgrade.Archive.State.PrimaryKeyString} found for {archive.State.PrimaryKeyString}");
{ {
@ -309,7 +316,8 @@ namespace Wabbajack.Server.Services
var destDownload = await _sql.GetArchiveDownload(id); var destDownload = await _sql.GetArchiveDownload(id);
if (destDownload.Archive.Hash == srcDownload.Archive.Hash && destDownload.Archive.State.PrimaryKeyString == srcDownload.Archive.State.PrimaryKeyString) if (destDownload.Archive.Hash == srcDownload.Archive.Hash &&
destDownload.Archive.State.PrimaryKeyString == srcDownload.Archive.State.PrimaryKeyString)
{ {
_logger.Log(LogLevel.Information, $"Can't heal because src and dest match"); _logger.Log(LogLevel.Information, $"Can't heal because src and dest match");
return (archive, ArchiveStatus.InValid); return (archive, ArchiveStatus.InValid);
@ -317,7 +325,8 @@ namespace Wabbajack.Server.Services
if (destDownload.Archive.Hash == default) if (destDownload.Archive.Hash == default)
{ {
_logger.Log(LogLevel.Information, "Can't heal because we got back a default hash for the downloaded file"); _logger.Log(LogLevel.Information,
"Can't heal because we got back a default hash for the downloaded file");
return (archive, ArchiveStatus.InValid); return (archive, ArchiveStatus.InValid);
} }
@ -344,6 +353,12 @@ namespace Wabbajack.Server.Services
_logger.LogInformation($"Patch in progress {archive.Hash} {archive.State.PrimaryKeyString}"); _logger.LogInformation($"Patch in progress {archive.Hash} {archive.State.PrimaryKeyString}");
return (archive, ArchiveStatus.Updating); return (archive, ArchiveStatus.Updating);
} }
catch (Exception ex)
{
_logger.LogError(ex, "During healing");
return (archive, ArchiveStatus.InValid);
}
}
private async Task<(Archive archive, ArchiveStatus)> ValidateArchive(ValidationData data, Archive archive) private async Task<(Archive archive, ArchiveStatus)> ValidateArchive(ValidationData data, Archive archive)
{ {

View File

@ -126,7 +126,7 @@ namespace Wabbajack.Server.Services
new DiscordMessage new DiscordMessage
{ {
Content = Content =
$"Error downloading modlist {list.Links.MachineURL} - {list.DownloadMetadata.Hash}" $"Error downloading modlist {list.Links.MachineURL} - {list.DownloadMetadata.Hash} - {ex.Message}"
}); });
} }
finally finally