Merge remote-tracking branch 'alphax/master'

This commit is contained in:
crowetic 2024-11-08 08:27:53 -08:00
commit 65c637740a
3 changed files with 38 additions and 23 deletions

View File

@ -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());
} }
} }

View File

@ -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();

View File

@ -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;
} }