{"record":{"id":"d058e7a4851f287c","repo":"theonedev/onedev","slug":"incorrect-data-format-illegal-data-version","errorCode":null,"errorMessage":"Incorrect data format: illegal data version","messagePattern":"Incorrect data format: illegal data version","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/data/DefaultDataService.java","lineNumber":337,"sourceCode":"\t\t\t\tthrow ExceptionUtils.unchecked(e);\n\t\t}\n\t}\n\n\tprivate File getVersionFile(File dataDir) {\n\t\tFile versionFile = new File(dataDir, ModelVersion.class.getSimpleName() + \"s.xml\");\n\t\tif (!versionFile.exists())\n\t\t\tversionFile = new File(dataDir, \"VersionTables.xml\");\n\t\treturn versionFile;\n\t}\n\t\n\t@Override\n\tpublic void migrateData(File dataDir) {\n\t\tFile versionFile = getVersionFile(dataDir);\n\t\t\n\t\tVersionedXmlDoc dom = VersionedXmlDoc.fromFile(versionFile);\n\t\tList<Element> elements = dom.getRootElement().elements();\n\t\tif (elements.size() != 1)\n\t\t\tthrow new RuntimeException(\"Incorrect data format: illegal data version\");\n\t\tElement versionElement = elements.iterator().next().element(ModelVersion.PROP_VERSION_COLUMN);\t\t\n\t\tif (versionElement == null) {\n\t\t\tthrow new RuntimeException(\"Incorrect data format: no data version\");\n\t\t}\n\t\t\n\t\tif (MigrationHelper.migrate(versionElement.getText(), new DataMigrator(), dataDir)) {\n\t\t\t// load version file again in case we changed something of it while migrating\n\t\t\tversionFile = getVersionFile(dataDir);\n\t\t\tdom = VersionedXmlDoc.fromFile(versionFile);\n\t\t\telements = dom.getRootElement().elements();\n\t\t\tPreconditions.checkState(elements.size() == 1);\n\t\t\tversionElement = Preconditions.checkNotNull(elements.iterator().next().element(ModelVersion.PROP_VERSION_COLUMN));\t\t\n\t\t\tversionElement.setText(MigrationHelper.getVersion(DataMigrator.class));\n\t\t\tdom.writeToFile(versionFile, false);\n\t\t}\t\t\n\t}\n\n\t/**","sourceCodeStart":319,"sourceCodeEnd":355,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/data/DefaultDataService.java#L319-L355","documentation":"migrateData reads the site db_version XML file via VersionedXmlDoc and expects the root element to contain exactly one child. If the root has a different number of elements, the file's data format is illegal and it throws this RuntimeException.","triggerScenarios":"The db_version file in the data directory was hand-edited, truncated, corrupted, or produced by an incompatible tool so its root element has zero or multiple children.","commonSituations":"Manual editing of the site data version file, disk corruption, partial file copy during site backup/restore, or merging data directories.","solutions":["Restore the db_version file from a known-good site backup","Recreate the file with the correct single-element structure containing the version column entry","If the site data is unusable, re-initialize the site data directory and re-import projects","Diff the file against one from a working installation of the same version"],"exampleFix":"<!-- before: corrupted multiple roots -->\n<root><version>10</version><version>9</version></root>\n<!-- after -->\n<root><version>10</version></root>","handlingStrategy":"validation","validationCode":"Document dom = parse(dbVersionFile);\nif (dom.getRootElement().elements().size() != 1) restoreFromBackup(dbVersionFile);","typeGuard":null,"tryCatchPattern":"try { migrateData(dir); } catch (RuntimeException e) { if (e.getMessage().contains(\"illegal data version\")) { restoreDbVersionFile(); } }","preventionTips":["Never hand-edit the db_version file","Back up the whole site data directory before maintenance","Copy data directories atomically, not partially","Validate XML after any manual tooling touches it"],"tags":["data-format","xml","migration"],"backgroundTag":"schema-validation-failed","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}