forked from Qortal/qortal
Fix system-dependent path separator usage.
Although HSQLDB is happy being given unix-style path separator '/' and converting as necessary on other platforms (e.g. Windows), manipulation of repository pathnames in Java, outside of HSQLDB, needs to use platform-specific path separators. Thus, changes made to replace '/' with File.separator where necessary. This should fix repository rebuild errors, which then lead to odd start-up errors like: 2020-03-11 13:55:19 INFO Controller:270 - Starting repository 2020-03-11 13:55:20 INFO Controller:287 - Validating blockchain 2020-03-11 13:55:20 INFO HSQLDBRepository:227 - Rebuilding repository from scratch 2020-03-11 13:55:20 INFO GenesisBlock:296 - Using genesis block timestamp of 1583870000000 2020-03-11 13:55:21 WARN HSQLDBRepository:720 - Uncommitted changes (882) after connection close, session [3] java.lang.NullPointerException at org.qortal.transform.block.BlockTransformer.decodeOnlineAccounts(BlockTransformer.java:422) at org.qortal.block.Block.getExpandedAccounts(Block.java:546) at org.qortal.block.Block.increaseAccountLevels(Block.java:1245) at org.qortal.block.Block.increaseAccountLevels(Block.java:1239) at org.qortal.block.Block.process(Block.java:1206) at org.qortal.block.GenesisBlock.process(GenesisBlock.java:345) at org.qortal.block.BlockChain.rebuildBlockchain(BlockChain.java:526) at org.qortal.block.BlockChain.validate(BlockChain.java:481) at org.qortal.controller.Controller.main(Controller.java:289) The above happens because the old blockchain still exists when trying to process the genesis block.
This commit is contained in:
parent
b0b0e2ac18
commit
90e0f9dddc
@ -1,5 +1,6 @@
|
||||
package org.qortal.controller;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.security.SecureRandom;
|
||||
@ -99,7 +100,7 @@ public class Controller extends Thread {
|
||||
private static final long MISBEHAVIOUR_COOLOFF = 10 * 60 * 1000L; // ms
|
||||
private static final int MAX_BLOCKCHAIN_TIP_AGE = 5; // blocks
|
||||
private static final Object shutdownLock = new Object();
|
||||
private static final String repositoryUrlTemplate = "jdbc:hsqldb:file:%s/blockchain;create=true;hsqldb.full_log_replay=true";
|
||||
private static final String repositoryUrlTemplate = "jdbc:hsqldb:file:%s" + File.separator + "blockchain;create=true;hsqldb.full_log_replay=true";
|
||||
private static final long ARBITRARY_REQUEST_TIMEOUT = 5 * 1000L; // ms
|
||||
private static final long REPOSITORY_BACKUP_PERIOD = 123 * 60 * 1000L; // ms
|
||||
private static final long NTP_PRE_SYNC_CHECK_PERIOD = 5 * 1000L; // ms
|
||||
|
@ -337,8 +337,8 @@ public class HSQLDBRepository implements Repository {
|
||||
Path oldRepoFilePath = oldRepoPath.getFileName();
|
||||
|
||||
// Try to open backup. We need to remove "create=true" and insert "backup" dir before final filename.
|
||||
String backupUrlTemplate = "jdbc:hsqldb:file:%s/backup/%s;create=false;hsqldb.full_log_replay=true";
|
||||
return String.format(backupUrlTemplate, oldRepoDirPath.toString(), oldRepoFilePath.toString());
|
||||
String backupUrlTemplate = "jdbc:hsqldb:file:%s%sbackup%s%s;create=false;hsqldb.full_log_replay=true";
|
||||
return String.format(backupUrlTemplate, oldRepoDirPath.toString(), File.separator, File.separator, oldRepoFilePath.toString());
|
||||
}
|
||||
|
||||
/* package */ static void attemptRecovery(String connectionUrl) throws DataException {
|
||||
@ -361,8 +361,8 @@ public class HSQLDBRepository implements Repository {
|
||||
.forEach(File::delete);
|
||||
|
||||
try (Statement stmt = connection.createStatement()) {
|
||||
// Now "backup" the backup back to original repository location (the parent)
|
||||
// NOTE: trailing / is OK because HSQLDB checks for both / and O/S-specific separator
|
||||
// Now "backup" the backup back to original repository location (the parent).
|
||||
// NOTE: trailing / is OK because HSQLDB checks for both / and O/S-specific separator.
|
||||
// textdb.allow_full_path connection property is required to be able to use '..'
|
||||
stmt.execute("BACKUP DATABASE TO '../' BLOCKING AS FILES");
|
||||
} catch (SQLException e) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user