mirror of
https://github.com/ppy/osu.git
synced 2025-01-13 17:13:06 +08:00
Merge pull request #26439 from bdach/do-not-attempt-score-upgrade-for-custom-rulesets
Do not attempt to recalculate non-legacy scores or scores set on custom rulesets
This commit is contained in:
commit
06447e95aa
@ -1,6 +1,7 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
@ -182,9 +183,63 @@ namespace osu.Game.Tests.Database
|
|||||||
AddAssert("Score version not upgraded", () => Realm.Run(r => r.Find<ScoreInfo>(scoreInfo.ID)!.TotalScoreVersion), () => Is.EqualTo(30000002));
|
AddAssert("Score version not upgraded", () => Realm.Run(r => r.Find<ScoreInfo>(scoreInfo.ID)!.TotalScoreVersion), () => Is.EqualTo(30000002));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestCustomRulesetScoreNotSubjectToUpgrades([Values] bool available)
|
||||||
|
{
|
||||||
|
RulesetInfo rulesetInfo = null!;
|
||||||
|
ScoreInfo scoreInfo = null!;
|
||||||
|
TestBackgroundDataStoreProcessor processor = null!;
|
||||||
|
|
||||||
|
AddStep("Add unavailable ruleset", () => Realm.Write(r => r.Add(rulesetInfo = new RulesetInfo
|
||||||
|
{
|
||||||
|
ShortName = Guid.NewGuid().ToString(),
|
||||||
|
Available = available
|
||||||
|
})));
|
||||||
|
|
||||||
|
AddStep("Add score for unavailable ruleset", () => Realm.Write(r => r.Add(scoreInfo = new ScoreInfo(
|
||||||
|
ruleset: rulesetInfo,
|
||||||
|
beatmap: r.All<BeatmapInfo>().First())
|
||||||
|
{
|
||||||
|
TotalScoreVersion = 30000001
|
||||||
|
})));
|
||||||
|
|
||||||
|
AddStep("Run background processor", () => Add(processor = new TestBackgroundDataStoreProcessor()));
|
||||||
|
AddUntilStep("Wait for completion", () => processor.Completed);
|
||||||
|
|
||||||
|
AddAssert("Score not marked as failed", () => Realm.Run(r => r.Find<ScoreInfo>(scoreInfo.ID)!.BackgroundReprocessingFailed), () => Is.False);
|
||||||
|
AddAssert("Score version not upgraded", () => Realm.Run(r => r.Find<ScoreInfo>(scoreInfo.ID)!.TotalScoreVersion), () => Is.EqualTo(30000001));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestNonLegacyScoreNotSubjectToUpgrades()
|
||||||
|
{
|
||||||
|
ScoreInfo scoreInfo = null!;
|
||||||
|
TestBackgroundDataStoreProcessor processor = null!;
|
||||||
|
|
||||||
|
AddStep("Add score which requires upgrade (and has beatmap)", () =>
|
||||||
|
{
|
||||||
|
Realm.Write(r =>
|
||||||
|
{
|
||||||
|
r.Add(scoreInfo = new ScoreInfo(ruleset: r.All<RulesetInfo>().First(), beatmap: r.All<BeatmapInfo>().First())
|
||||||
|
{
|
||||||
|
TotalScoreVersion = 30000005,
|
||||||
|
LegacyTotalScore = 123456,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
AddStep("Run background processor", () => Add(processor = new TestBackgroundDataStoreProcessor()));
|
||||||
|
AddUntilStep("Wait for completion", () => processor.Completed);
|
||||||
|
|
||||||
|
AddAssert("Score not marked as failed", () => Realm.Run(r => r.Find<ScoreInfo>(scoreInfo.ID)!.BackgroundReprocessingFailed), () => Is.False);
|
||||||
|
AddAssert("Score version not upgraded", () => Realm.Run(r => r.Find<ScoreInfo>(scoreInfo.ID)!.TotalScoreVersion), () => Is.EqualTo(30000005));
|
||||||
|
}
|
||||||
|
|
||||||
public partial class TestBackgroundDataStoreProcessor : BackgroundDataStoreProcessor
|
public partial class TestBackgroundDataStoreProcessor : BackgroundDataStoreProcessor
|
||||||
{
|
{
|
||||||
protected override int TimeToSleepDuringGameplay => 10;
|
protected override int TimeToSleepDuringGameplay => 10;
|
||||||
|
|
||||||
|
public bool Completed => ProcessingTask.IsCompleted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ using osu.Framework.Graphics;
|
|||||||
using osu.Framework.Logging;
|
using osu.Framework.Logging;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Database;
|
using osu.Game.Database;
|
||||||
|
using osu.Game.Extensions;
|
||||||
using osu.Game.Online.API;
|
using osu.Game.Online.API;
|
||||||
using osu.Game.Overlays;
|
using osu.Game.Overlays;
|
||||||
using osu.Game.Overlays.Notifications;
|
using osu.Game.Overlays.Notifications;
|
||||||
@ -28,6 +29,8 @@ namespace osu.Game
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class BackgroundDataStoreProcessor : Component
|
public partial class BackgroundDataStoreProcessor : Component
|
||||||
{
|
{
|
||||||
|
protected Task ProcessingTask { get; private set; } = null!;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private RulesetStore rulesetStore { get; set; } = null!;
|
private RulesetStore rulesetStore { get; set; } = null!;
|
||||||
|
|
||||||
@ -61,7 +64,7 @@ namespace osu.Game
|
|||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
Task.Factory.StartNew(() =>
|
ProcessingTask = Task.Factory.StartNew(() =>
|
||||||
{
|
{
|
||||||
Logger.Log("Beginning background data store processing..");
|
Logger.Log("Beginning background data store processing..");
|
||||||
|
|
||||||
@ -314,10 +317,17 @@ namespace osu.Game
|
|||||||
{
|
{
|
||||||
Logger.Log("Querying for scores that need total score conversion...");
|
Logger.Log("Querying for scores that need total score conversion...");
|
||||||
|
|
||||||
HashSet<Guid> scoreIds = realmAccess.Run(r => new HashSet<Guid>(r.All<ScoreInfo>()
|
HashSet<Guid> scoreIds = realmAccess.Run(r => new HashSet<Guid>(
|
||||||
.Where(s => !s.BackgroundReprocessingFailed && s.BeatmapInfo != null
|
r.All<ScoreInfo>()
|
||||||
|
.Where(s => !s.BackgroundReprocessingFailed
|
||||||
|
&& s.BeatmapInfo != null
|
||||||
|
&& s.IsLegacyScore
|
||||||
&& s.TotalScoreVersion < LegacyScoreEncoder.LATEST_VERSION)
|
&& s.TotalScoreVersion < LegacyScoreEncoder.LATEST_VERSION)
|
||||||
.AsEnumerable().Select(s => s.ID)));
|
.AsEnumerable()
|
||||||
|
// must be done after materialisation, as realm doesn't want to support
|
||||||
|
// nested property predicates
|
||||||
|
.Where(s => s.Ruleset.IsLegacyRuleset())
|
||||||
|
.Select(s => s.ID)));
|
||||||
|
|
||||||
Logger.Log($"Found {scoreIds.Count} scores which require total score conversion.");
|
Logger.Log($"Found {scoreIds.Count} scores which require total score conversion.");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user