Skip to content

fix: do not lose vanilla playerdata during premium migration - #12

Merged
WieszczY85 merged 2 commits into
mainfrom
fix/vanilla-world-roots-migration
Oct 3, 2026
Merged

WieszczY85 merged 2 commits into
mainfrom
fix/vanilla-world-roots-migration

Conversation

@WieszczY85

Copy link
Copy Markdown
Member

Przyczyna

AuthGatewayX jest ładowany jako STARTUP, a provider vanilla dostawał jednorazowy snapshot server.worlds. Jeżeli w tej fazie lista światów była pusta lub niepełna, provider zapamiętywał pustą listę do końca życia pluginu. Wtedy inspect zwracał NO_VANILLA_UUID_DATA, mimo że world/playerdata/<stare-uuid>.dat faktycznie istniał. Pipeline traktował to jako NO_DATA i mógł zakończyć całą migrację jako COMPLETED.

To tłumaczy przypadek, w którym EssentialsX został poprawnie zmigrowany, ale gracz po wejściu nie ma ekwipunku/XP/lokalizacji zapisanych w vanilla playerdata.

Poprawka

  • provider zachowuje początkowe rooty światów, ale przy każdym inspect/migrate/rollback ponownie odkrywa światy z filesystemu na podstawie level.dat;
  • jeżeli nie da się ustalić żadnego świata, migracja jest teraz BLOCKED (VANILLA_WORLD_ROOTS_UNAVAILABLE) zamiast fałszywego NO_DATA;
  • wykrywanie odbywa się w migration executorze, więc nie dokładamy I/O na głównym wątku;
  • rooty są normalizowane, deduplikowane i sortowane, aby zachować stabilne mapowanie backupów;
  • dodane testy regresyjne dla pustego snapshotu podczas STARTUP oraz fail-closed przy braku rootów.

Ważne dla już zakończonych migracji

Ta poprawka zapobiega kolejnym fałszywym COMPLETED, ale istniejący zakończony ticket nie powinien być automatycznie ponownie uruchamiany. Dane docelowego UUID mogły się już zmienić po wejściu gracza, dlatego naprawa takiego przypadku powinna być jawna i wykonywana przy graczu offline, z backupem targetu.

@WieszczY85
WieszczY85 merged commit f7547b9 into main Oct 3, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant