<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>361</buildNumber><marked><SHA1>28c0aada922ad2a510b00b4f0b7e0399c8cc8246</SHA1><branch><SHA1>28c0aada922ad2a510b00b4f0b7e0399c8cc8246</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>28c0aada922ad2a510b00b4f0b7e0399c8cc8246</SHA1><branch><SHA1>28c0aada922ad2a510b00b4f0b7e0399c8cc8246</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>28c0aada922ad2a510b00b4f0b7e0399c8cc8246</SHA1><branch><SHA1>28c0aada922ad2a510b00b4f0b7e0399c8cc8246</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/mcMMO-Dev/mcMMO.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><artifact><displayPath>mcMMO.jar</displayPath><fileName>mcMMO.jar</fileName><relativePath>target/mcMMO.jar</relativePath></artifact><artifact><displayPath>original-mcMMO.jar</displayPath><fileName>original-mcMMO.jar</fileName><relativePath>target/original-mcMMO.jar</relativePath></artifact><building>false</building><displayName>#361</displayName><duration>74611</duration><estimatedDuration>66807</estimatedDuration><fullDisplayName>mcMMO #361</fullDisplayName><id>361</id><inProgress>false</inProgress><keepLog>false</keepLog><number>361</number><queueId>308</queueId><result>SUCCESS</result><timestamp>1790124554034</timestamp><url>https://popicraft.net/jenkins/job/mcMMO/361/</url><builtOn>Builder</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java</affectedPath><affectedPath>src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java</affectedPath><commitId>7af1f86d31d9007157477d1f4ad934b825761f4a</commitId><timestamp>1789611309000</timestamp><author><absoluteUrl>https://popicraft.net/jenkins/user/127477265+cyrne1-7208</absoluteUrl><fullName>127477265+cyrne1-7208</fullName></author><authorEmail>127477265+cyrne1-7208@users.noreply.github.com</authorEmail><comment>Fix FlatFile database truncation on read failure

In FlatFileDatabaseManager, methods that read the database before writing
(newUser, purgePowerlessUsers, purgeOldUsers, removeUser, saveUserUUID,
saveUserUUIDs, and checkFileHealthAndStructure) previously continued
to write or rewrite the database file even when reading encountered an
IOException. This caused partial or empty contents to overwrite mcmmo.users,
resulting in data loss / truncation.

This change:
- Guards newUser() by returning an unloaded PlayerProfile on IOException,
  preventing the subsequent FileWriter block from overwriting the database.
- Guards purgePowerlessUsers() by returning 0 on IOException without writing.
- Guards rewriteUsersFile() to return false on IOException without writing,
  and updates its callers (purgeOldUsers, removeUser, saveUserUUIDs) to abort
  early on read failure.
- Guards saveUserUUID() to return false on exception without writing.
- Guards checkFileHealthAndStructure() to return null on validation IOException,
  preventing the subsequent update block from overwriting the database.
- Adds comprehensive unit tests verifying that a mid-stream read failure
  leaves the database file byte-for-byte identical across all operations.

Signed-off-by: Cyrne1_7208 &lt;127477265+cyrne1-7208@users.noreply.github.com&gt;
</comment><date>2026-09-17 02:15:09 +0000</date><id>7af1f86d31d9007157477d1f4ad934b825761f4a</id><msg>Fix FlatFile database truncation on read failure</msg><path><editType>edit</editType><file>src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java</file></path><path><editType>edit</editType><file>src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://popicraft.net/jenkins/user/127477265+cyrne1-7208</absoluteUrl><fullName>127477265+cyrne1-7208</fullName></culprit></freeStyleBuild>