Add synchronous fetch flow to BeatmapOnlineLookupQueue

The async flow doesn't work great with the realm import process. We
might be able to improve on this going forward, but for the time being
adding a synchronous path seems safest.

After all, we are already an an asynchronous (dedicated) thread pool at
this point.
This commit is contained in:
Dean Herbert
2022-01-13 16:13:30 +09:00
parent bdb2979b2e
commit 93c78253d6
2 changed files with 14 additions and 13 deletions

View File

@ -54,6 +54,12 @@ namespace osu.Game.Beatmaps
prepareLocalCache();
}
public void Update(BeatmapSetInfo beatmapSet, CancellationToken cancellationToken)
{
foreach (var b in beatmapSet.Beatmaps)
lookup(beatmapSet, b);
}
public Task UpdateAsync(BeatmapSetInfo beatmapSet, CancellationToken cancellationToken)
{
return Task.WhenAll(beatmapSet.Beatmaps.Select(b => UpdateAsync(beatmapSet, b, cancellationToken)).ToArray());
@ -73,13 +79,17 @@ namespace osu.Game.Beatmaps
var req = new GetBeatmapRequest(beatmapInfo);
req.Failure += fail;
try
{
// intentionally blocking to limit web request concurrency
api.Perform(req);
if (req.CompletionState == APIRequestCompletionState.Failed)
{
logForModel(set, $"Online retrieval failed for {beatmapInfo}");
beatmapInfo.OnlineID = -1;
}
var res = req.Response;
if (res != null)
@ -99,13 +109,8 @@ namespace osu.Game.Beatmaps
}
catch (Exception e)
{
fail(e);
}
void fail(Exception e)
{
beatmapInfo.OnlineID = -1;
logForModel(set, $"Online retrieval failed for {beatmapInfo} ({e.Message})");
beatmapInfo.OnlineID = -1;
}
}