force restart trade wallet on connection refused during poll

This commit is contained in:
woodser 2024-01-25 11:57:26 -05:00
parent 2a2eb0c82f
commit eb323f6d65
2 changed files with 30 additions and 11 deletions

View file

@ -125,6 +125,7 @@ public abstract class Trade implements Tradable, Model {
private MoneroWallet wallet; private MoneroWallet wallet;
boolean wasWalletSynced; boolean wasWalletSynced;
boolean pollInProgress; boolean pollInProgress;
boolean restartInProgress;
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
// Enums // Enums
@ -898,6 +899,14 @@ public abstract class Trade implements Tradable, Model {
} }
} }
public void forceStopWallet() {
if (wallet != null) {
log.warn("Force stopping wallet for {} {}", getClass().getSimpleName(), getId());
xmrWalletService.stopWallet(wallet, wallet.getPath(), true);
wallet = null;
}
}
public void deleteWallet() { public void deleteWallet() {
synchronized (walletLock) { synchronized (walletLock) {
if (walletExists()) { if (walletExists()) {
@ -1321,11 +1330,7 @@ public abstract class Trade implements Tradable, Model {
e.printStackTrace(); e.printStackTrace();
// force stop wallet // force stop wallet
if (wallet != null) { forceStopWallet();
log.warn("Force stopping wallet for {} {}", getClass().getSimpleName(), getId());
xmrWalletService.stopWallet(wallet, wallet.getPath(), true);
wallet = null;
}
} }
// de-initialize // de-initialize
@ -2151,18 +2156,32 @@ public abstract class Trade implements Tradable, Model {
} }
} }
} catch (Exception e) { } catch (Exception e) {
boolean isConnectionRefused = e.getMessage() != null && e.getMessage().contains("Connection refused");
if (isConnectionRefused) forceRestartTradeWallet();
else {
boolean isWalletConnected = isWalletConnectedToDaemon(); boolean isWalletConnected = isWalletConnectedToDaemon();
if (!isWalletConnected) xmrConnectionService.checkConnection(); // check connection if wallet is not connected if (!isWalletConnected) xmrConnectionService.checkConnection(); // check connection if wallet is not connected
if (!isShutDownStarted && wallet != null && isWalletConnected) { if (!isShutDownStarted && wallet != null && isWalletConnected) {
log.warn("Error polling trade wallet for {} {}: {}. Monerod={}", getClass().getSimpleName(), getId(), e.getMessage(), getXmrWalletService().getConnectionService().getConnection()); log.warn("Error polling trade wallet for {} {}: {}. Monerod={}", getClass().getSimpleName(), getId(), e.getMessage(), getXmrWalletService().getConnectionService().getConnection());
//e.printStackTrace(); //e.printStackTrace();
} }
}
} finally { } finally {
pollInProgress = false; pollInProgress = false;
} }
} }
} }
private void forceRestartTradeWallet() {
log.warn("Force restarting trade wallet for {} {}", getClass().getSimpleName(), getId());
if (isShutDownStarted || restartInProgress) return;
restartInProgress = true;
forceStopWallet();
if (!isShutDownStarted) wallet = getWallet();
restartInProgress = false;
if (!isShutDownStarted) ThreadUtils.execute(() -> tryInitSyncing(), getId());
}
private long getWalletRefreshPeriod() { private long getWalletRefreshPeriod() {
if (isIdling()) return IDLE_SYNC_PERIOD_MS; if (isIdling()) return IDLE_SYNC_PERIOD_MS;
return xmrConnectionService.getRefreshPeriodMs(); return xmrConnectionService.getRefreshPeriodMs();

View file

@ -754,7 +754,7 @@ public class XmrWalletService {
} }
} }
// shut down trade and main wallets at same time // shut down main wallet
walletListeners.clear(); walletListeners.clear();
closeMainWallet(true); closeMainWallet(true);
log.info("Done shutting down main wallet"); log.info("Done shutting down main wallet");