Storage, backups, and migration
DadaProgressions beta uses a hybrid YAML storage layout designed to keep source data separate from rebuildable leaderboard indexes.
Data layout
plugins/DadaProgressions/data/
meta.yml
player-names.yml
community-goals/<goalId>.yml
players/<uuid>.yml
indexes/player-goals/<goalId>.yml
Source-of-truth data includes:
meta.yml;player-names.yml;community-goals/<goalId>.yml;players/<uuid>.yml.
Files under indexes/player-goals/ are derived and can be rebuilt.
Beta 26.5 periodic persistence
Periodic persistence now works in two phases:
- dirty YAML is serialized into immutable snapshots on the Bukkit thread;
- filesystem writes are performed by one dedicated writer thread.
This reduces periodic disk I/O on the main server tick while avoiding concurrent mutation of live Bukkit YamlConfiguration objects.
The writer protects ordering: an older queued snapshot is not allowed to overwrite a newer synchronous save.
Current global settings are:
storage:
async-periodic-writes: true
save-interval-ticks: 600
writer-flush-timeout-seconds: 10
Explicit operations that require durability, including reward-claim reservation/finalization, reload, backup, and shutdown, wait for the storage state to be safely persisted before continuing.
Manual backups
Create a backup with:
/dp admin backup
Backups are written under:
plugins/DadaProgressions/backups/manual-<timestamp>/data/
Use this before:
- plugin updates;
- large goal changes;
- reset commands;
- manual recovery work.
Leaderboard indexes
Rebuild derived indexes with:
/dp admin rebuildindexes
Use the broader repair command when you also want missing storage directories recreated:
/dp admin repair
Repair does not invent or silently replace missing source progress.
Corrupt YAML handling
Corrupt source YAML is quarantined with a suffix similar to:
.corrupt-<timestamp>
Corrupt derived index files may be deleted and rebuilt.
If a source file is quarantined, investigate and restore from a known-good backup rather than creating replacement progress by hand.
Legacy data.yml migration
Older beta data may exist as:
plugins/DadaProgressions/data.yml
During migration, DadaProgressions creates a pre-migration backup. After successful conversion, the old file is renamed to data.yml.bak. If migration fails, the original is left in place.
Migration metadata is recorded in data/meta.yml.
Old DadaAchievements folder
If plugins/DadaProgressions/ is missing or empty and an old plugins/DadaAchievements/ folder exists, DadaProgressions can copy the old data into the new plugin folder.
The old folder is never deleted automatically.
Manual file editing
Do not edit runtime files in data/ while the server is running. Use admin commands for normal corrections. If manual recovery is unavoidable:
- stop the server;
- take a full copy of the data folder;
- edit only the required source file;
- remove/rebuild derived indexes if necessary;
- start the server and run
/dp admin validate.