mirror of
https://github.com/Qortal/qortal.git
synced 2025-03-26 23:44:34 +00:00
Merge remote-tracking branch 'alphax/master'
This commit is contained in:
commit
65c637740a
@ -43,7 +43,7 @@ public class ApplyRestart {
|
|||||||
private static final String JAVA_TOOL_OPTIONS_NAME = "JAVA_TOOL_OPTIONS";
|
private static final String JAVA_TOOL_OPTIONS_NAME = "JAVA_TOOL_OPTIONS";
|
||||||
private static final String JAVA_TOOL_OPTIONS_VALUE = "";
|
private static final String JAVA_TOOL_OPTIONS_VALUE = "";
|
||||||
|
|
||||||
private static final long CHECK_INTERVAL = 10 * 1000L; // ms
|
private static final long CHECK_INTERVAL = 30 * 1000L; // ms
|
||||||
private static final int MAX_ATTEMPTS = 12;
|
private static final int MAX_ATTEMPTS = 12;
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@ -56,7 +56,7 @@ public class ApplyRestart {
|
|||||||
else
|
else
|
||||||
Settings.getInstance();
|
Settings.getInstance();
|
||||||
|
|
||||||
LOGGER.info("Applying restart...");
|
LOGGER.info("Applying restart this can take up to 5 minutes...");
|
||||||
|
|
||||||
// Shutdown node using API
|
// Shutdown node using API
|
||||||
if (!shutdownNode())
|
if (!shutdownNode())
|
||||||
@ -64,19 +64,19 @@ public class ApplyRestart {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// Give some time for shutdown
|
// Give some time for shutdown
|
||||||
TimeUnit.SECONDS.sleep(30);
|
TimeUnit.SECONDS.sleep(60);
|
||||||
|
|
||||||
// Remove blockchain lock if exist
|
// Remove blockchain lock if exist
|
||||||
ReentrantLock blockchainLock = Controller.getInstance().getBlockchainLock();
|
ReentrantLock blockchainLock = Controller.getInstance().getBlockchainLock();
|
||||||
if (blockchainLock.isLocked())
|
if (blockchainLock.isLocked())
|
||||||
blockchainLock.unlock();
|
blockchainLock.unlock();
|
||||||
|
|
||||||
// Remove blockchain lock file if exist
|
// Remove blockchain lock file if still exist
|
||||||
TimeUnit.SECONDS.sleep(60);
|
TimeUnit.SECONDS.sleep(60);
|
||||||
deleteLock();
|
deleteLock();
|
||||||
|
|
||||||
// Restart node
|
// Restart node
|
||||||
TimeUnit.SECONDS.sleep(30);
|
TimeUnit.SECONDS.sleep(15);
|
||||||
restartNode(args);
|
restartNode(args);
|
||||||
|
|
||||||
LOGGER.info("Restarting...");
|
LOGGER.info("Restarting...");
|
||||||
@ -117,10 +117,17 @@ public class ApplyRestart {
|
|||||||
String response = ApiRequest.perform(baseUri + "admin/stop", params);
|
String response = ApiRequest.perform(baseUri + "admin/stop", params);
|
||||||
if (response == null) {
|
if (response == null) {
|
||||||
// No response - consider node shut down
|
// No response - consider node shut down
|
||||||
|
try {
|
||||||
|
TimeUnit.SECONDS.sleep(30);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
if (apiKeyNewlyGenerated) {
|
if (apiKeyNewlyGenerated) {
|
||||||
// API key was newly generated for restarting node, so we need to remove it
|
// API key was newly generated for restarting node, so we need to remove it
|
||||||
ApplyRestart.removeGeneratedApiKey();
|
ApplyRestart.removeGeneratedApiKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +178,7 @@ public class ApplyRestart {
|
|||||||
LOGGER.debug("Lockfile is: {}", lockFile);
|
LOGGER.debug("Lockfile is: {}", lockFile);
|
||||||
FileUtils.forceDelete(FileUtils.getFile(lockFile));
|
FileUtils.forceDelete(FileUtils.getFile(lockFile));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOGGER.error("Error deleting blockchain lock file: {}", e.getMessage());
|
LOGGER.debug("Error deleting blockchain lock file: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -579,26 +579,28 @@ public class Controller extends Thread {
|
|||||||
// If GUI is enabled, we're no longer starting up but actually running now
|
// If GUI is enabled, we're no longer starting up but actually running now
|
||||||
Gui.getInstance().notifyRunning();
|
Gui.getInstance().notifyRunning();
|
||||||
|
|
||||||
// Check every 10 minutes if we have enough connected peers
|
if (Settings.getInstance().isAutoRestartEnabled()) {
|
||||||
Timer checkConnectedPeers = new Timer();
|
// Check every 10 minutes if we have enough connected peers
|
||||||
|
Timer checkConnectedPeers = new Timer();
|
||||||
|
|
||||||
checkConnectedPeers.schedule(new TimerTask() {
|
checkConnectedPeers.schedule(new TimerTask() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// Get the connected peers
|
// Get the connected peers
|
||||||
int myConnectedPeers = Network.getInstance().getImmutableHandshakedPeers().size();
|
int myConnectedPeers = Network.getInstance().getImmutableHandshakedPeers().size();
|
||||||
LOGGER.debug("Node have {} connected peers", myConnectedPeers);
|
LOGGER.debug("Node have {} connected peers", myConnectedPeers);
|
||||||
if (myConnectedPeers == 0) {
|
if (myConnectedPeers == 0) {
|
||||||
// Restart node if we have 0 peers
|
// Restart node if we have 0 peers
|
||||||
LOGGER.info("Node have no connected peers, restarting node");
|
LOGGER.info("Node have no connected peers, restarting node");
|
||||||
try {
|
try {
|
||||||
RestartNode.attemptToRestart();
|
RestartNode.attemptToRestart();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("Unable to restart the node", e);
|
LOGGER.error("Unable to restart the node", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}, 10*60*1000, 10*60*1000);
|
||||||
}, 10*60*1000, 10*60*1000);
|
}
|
||||||
|
|
||||||
// Check every 10 minutes to see if the block minter is running
|
// Check every 10 minutes to see if the block minter is running
|
||||||
Timer checkBlockMinter = new Timer();
|
Timer checkBlockMinter = new Timer();
|
||||||
|
@ -114,6 +114,8 @@ public class Settings {
|
|||||||
|
|
||||||
/** Whether we check, fetch and install auto-updates */
|
/** Whether we check, fetch and install auto-updates */
|
||||||
private boolean autoUpdateEnabled = true;
|
private boolean autoUpdateEnabled = true;
|
||||||
|
/** Whether we check, restart node without connected peers */
|
||||||
|
private boolean autoRestartEnabled = false;
|
||||||
/** How long between repository backups (ms), or 0 if disabled. */
|
/** How long between repository backups (ms), or 0 if disabled. */
|
||||||
private long repositoryBackupInterval = 0; // ms
|
private long repositoryBackupInterval = 0; // ms
|
||||||
/** Whether to show a notification when we backup repository. */
|
/** Whether to show a notification when we backup repository. */
|
||||||
@ -973,6 +975,10 @@ public class Settings {
|
|||||||
return this.autoUpdateEnabled;
|
return this.autoUpdateEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAutoRestartEnabled() {
|
||||||
|
return this.autoRestartEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
public String[] getAutoUpdateRepos() {
|
public String[] getAutoUpdateRepos() {
|
||||||
return this.autoUpdateRepos;
|
return this.autoUpdateRepos;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user