mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-01-12 07:49:51 -05:00
save and backup wallet files once per 5 minutes on polling
This commit is contained in:
parent
0462ddc273
commit
9e95de2d7e
@ -901,6 +901,7 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void requestSaveWallet() {
|
||||
|
||||
// save wallet off main thread
|
||||
@ -911,6 +912,7 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
|
||||
}, getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveWallet() {
|
||||
synchronized (walletLock) {
|
||||
if (!walletExists()) {
|
||||
@ -2675,7 +2677,7 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
|
||||
pollInProgress = false;
|
||||
}
|
||||
}
|
||||
requestSaveWallet();
|
||||
saveWalletWithDelay();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,11 +30,13 @@ public abstract class XmrWalletBase {
|
||||
// constants
|
||||
public static final int SYNC_PROGRESS_TIMEOUT_SECONDS = 120;
|
||||
public static final int DIRECT_SYNC_WITHIN_BLOCKS = 100;
|
||||
public static final int SAVE_WALLET_DELAY_SECONDS = 300;
|
||||
|
||||
// inherited
|
||||
protected MoneroWallet wallet;
|
||||
@Getter
|
||||
protected final Object walletLock = new Object();
|
||||
protected Timer saveWalletDelayTimer;
|
||||
@Getter
|
||||
protected XmrConnectionService xmrConnectionService;
|
||||
protected boolean wasWalletSynced;
|
||||
@ -146,8 +148,23 @@ public abstract class XmrWalletBase {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected abstract void onConnectionChanged(MoneroRpcConnection connection);
|
||||
public void saveWalletWithDelay() {
|
||||
// delay writing to disk to avoid frequent write operations
|
||||
if (saveWalletDelayTimer == null) {
|
||||
saveWalletDelayTimer = UserThread.runAfter(() -> {
|
||||
requestSaveWallet();
|
||||
UserThread.execute(() -> saveWalletDelayTimer = null);
|
||||
}, SAVE_WALLET_DELAY_SECONDS, TimeUnit.SECONDS);
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------- ABSTRACT -----------------------------
|
||||
|
||||
public abstract void saveWallet();
|
||||
|
||||
public abstract void requestSaveWallet();
|
||||
|
||||
protected abstract void onConnectionChanged(MoneroRpcConnection connection);
|
||||
|
||||
// ------------------------------ PRIVATE HELPERS -------------------------
|
||||
|
||||
|
@ -245,16 +245,20 @@ public class XmrWalletService extends XmrWalletBase {
|
||||
return user.getWalletCreationDate();
|
||||
}
|
||||
|
||||
public void saveMainWallet() {
|
||||
saveMainWallet(!(Utilities.isWindows() && wallet != null));
|
||||
@Override
|
||||
public void saveWallet() {
|
||||
saveWallet(!(Utilities.isWindows() && wallet != null));
|
||||
}
|
||||
|
||||
public void saveMainWallet(boolean backup) {
|
||||
public void saveWallet(boolean backup) {
|
||||
synchronized (walletLock) {
|
||||
saveWallet(getWallet(), backup);
|
||||
}
|
||||
}
|
||||
|
||||
public void requestSaveMainWallet() {
|
||||
ThreadUtils.submitToPool(() -> saveMainWallet()); // save wallet off main thread
|
||||
@Override
|
||||
public void requestSaveWallet() {
|
||||
ThreadUtils.submitToPool(() -> saveWallet()); // save wallet off main thread
|
||||
}
|
||||
|
||||
public boolean isWalletAvailable() {
|
||||
@ -443,7 +447,7 @@ public class XmrWalletService extends XmrWalletBase {
|
||||
if (Boolean.TRUE.equals(txConfig.getRelay())) {
|
||||
cachedTxs.addFirst(tx);
|
||||
cacheWalletInfo();
|
||||
requestSaveMainWallet();
|
||||
requestSaveWallet();
|
||||
}
|
||||
return tx;
|
||||
}
|
||||
@ -453,7 +457,7 @@ public class XmrWalletService extends XmrWalletBase {
|
||||
public String relayTx(String metadata) {
|
||||
synchronized (walletLock) {
|
||||
String txId = wallet.relayTx(metadata);
|
||||
requestSaveMainWallet();
|
||||
requestSaveWallet();
|
||||
return txId;
|
||||
}
|
||||
}
|
||||
@ -552,7 +556,7 @@ public class XmrWalletService extends XmrWalletBase {
|
||||
// freeze outputs
|
||||
for (String keyImage : unfrozenKeyImages) wallet.freezeOutput(keyImage);
|
||||
cacheWalletInfo();
|
||||
requestSaveMainWallet();
|
||||
requestSaveWallet();
|
||||
}
|
||||
}
|
||||
|
||||
@ -574,7 +578,7 @@ public class XmrWalletService extends XmrWalletBase {
|
||||
// thaw outputs
|
||||
for (String keyImage : frozenKeyImages) wallet.thawOutput(keyImage);
|
||||
cacheWalletInfo();
|
||||
requestSaveMainWallet();
|
||||
requestSaveWallet();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1424,14 +1428,14 @@ public class XmrWalletService extends XmrWalletBase {
|
||||
HavenoUtils.havenoSetup.getWalletInitialized().set(true);
|
||||
|
||||
// save but skip backup on initialization
|
||||
saveMainWallet(false);
|
||||
saveWallet(false);
|
||||
} catch (Exception e) {
|
||||
if (isClosingWallet || isShutDownStarted || HavenoUtils.havenoSetup.getWalletInitialized().get()) return; // ignore if wallet closing, shut down started, or app already initialized
|
||||
log.warn("Error initially syncing main wallet: {}", e.getMessage());
|
||||
if (numSyncAttempts <= 1) {
|
||||
log.warn("Failed to sync main wallet. Opening app without syncing", numSyncAttempts);
|
||||
HavenoUtils.havenoSetup.getWalletInitialized().set(true);
|
||||
saveMainWallet(false);
|
||||
saveWallet(false);
|
||||
|
||||
// reschedule to init main wallet
|
||||
UserThread.runAfter(() -> {
|
||||
@ -1809,7 +1813,7 @@ public class XmrWalletService extends XmrWalletBase {
|
||||
tasks.add(() -> {
|
||||
try {
|
||||
wallet.changePassword(oldPassword, newPassword);
|
||||
saveMainWallet();
|
||||
saveWallet();
|
||||
} catch (Exception e) {
|
||||
log.warn("Error changing main wallet password: " + e.getMessage() + "\n", e);
|
||||
throw e;
|
||||
@ -2002,7 +2006,7 @@ public class XmrWalletService extends XmrWalletBase {
|
||||
if (wallet != null && !isShutDownStarted) {
|
||||
try {
|
||||
cacheWalletInfo();
|
||||
requestSaveMainWallet();
|
||||
saveWalletWithDelay();
|
||||
} catch (Exception e) {
|
||||
log.warn("Error caching wallet info: " + e.getMessage() + "\n", e);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user