ppy/osu · error
Ran out of new beatmap IDs to assign to unsubmitted beatmaps
Error message
Ran out of new beatmap IDs to assign to unsubmitted beatmaps!
What it means
Thrown during beatmap submission when allocatedBeatmapIds.Count == 0 but there are still unsubmitted difficulties needing IDs. The server pre-allocated a finite batch of beatmap IDs and the local set has more difficulties than IDs available.
Source
Thrown at osu.Game/Screens/Edit/Submission/SubmissionBeatmapExporter.cs:45
{
base.MutateBeatmap(beatmapSet, playableBeatmap);
if (beatmapSetId != null && allocatedBeatmapIds != null)
{
playableBeatmap.BeatmapInfo.BeatmapSet = beatmapSet;
playableBeatmap.BeatmapInfo.BeatmapSet!.OnlineID = (int)beatmapSetId;
if (allocatedBeatmapIds.Contains(playableBeatmap.BeatmapInfo.OnlineID))
{
allocatedBeatmapIds.Remove(playableBeatmap.BeatmapInfo.OnlineID);
return;
}
if (playableBeatmap.BeatmapInfo.OnlineID > 0)
throw new InvalidOperationException($@"Difficulty ""{playableBeatmap.BeatmapInfo.DifficultyName}"" has BeatmapID {playableBeatmap.BeatmapInfo.OnlineID} that has not been assigned to it by the server!");
if (allocatedBeatmapIds.Count == 0)
throw new InvalidOperationException(@"Ran out of new beatmap IDs to assign to unsubmitted beatmaps!");
int newId = allocatedBeatmapIds.First();
allocatedBeatmapIds.Remove(newId);
playableBeatmap.BeatmapInfo.OnlineID = newId;
}
}
}
}
View on GitHub (pinned to d9c73e12ad)
Solutions
- Request a larger allocation batch from the server before submitting (increase the requested ID count).
- Reduce the number of new difficulties submitted in a single operation.
- Retry submission after the server grants additional IDs.
- Check the allocation request parameter that specifies how many IDs are needed.
Example fix
// before
if (allocatedBeatmapIds.Count == 0)
throw new InvalidOperationException(@"Ran out of new beatmap IDs to assign to unsubmitted beatmaps!");
// after (precompute need)
int needed = beatmapSet.Beatmaps.Count(b => b.OnlineID <= 0);
if (allocatedBeatmapIds.Count < needed)
throw new InvalidOperationException($"Need {needed} IDs but server allocated {allocatedBeatmapIds.Count}."); Defensive patterns
Strategy: validation
Validate before calling
int needed = beatmapSet.Beatmaps.Count(b => b.OnlineID <= 0);
if (allocatedBeatmapIds.Count < needed)
throw new InvalidOperationException($"Need {needed} IDs; have {allocatedBeatmapIds.Count}."); Try / catch
try { exporter.Export(...); }
catch (InvalidOperationException) { /* re-request allocation, retry */ } Prevention
- Compute the number of new difficulties and request that many IDs from the server.
- Split large submissions to fit the allocation quota.
- Retry after obtaining more IDs.
When it happens
Trigger: Submitting a beatmap set where the number of new (OnlineID <= 0) difficulties exceeds the count of IDs returned by the server's allocation endpoint.
Common situations: Adding many difficulties to a set in one submission; server allocation quota exhausted; client requested too few IDs from the allocation endpoint.
Related errors
- Difficulty ""{playableBeatmap.BeatmapInfo.DifficultyName}""
- Beatmap file {b.File!.Filename} could not be opened!
- Timed out while loading beatmap ({beatmapInfo}).
- Creating ruleset instance failed when attempting to create p
- Beatmap can not be converted for the ruleset (ruleset: {rule
AI-assisted analysis of ppy/osu@d9c73e12ad (2026-08-13).
Data as JSON: /api/errors/90a3cefa6ebba6a7.
Report an issue: GitHub.