mirror of
https://github.com/haveno-dex/haveno.git
synced 2024-11-16 15:58:08 +00:00
sync wallet directly within 100 blocks of target height
This commit is contained in:
parent
443c2f4cdb
commit
0105c1436a
3 changed files with 23 additions and 4 deletions
|
@ -2631,7 +2631,14 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
|
|||
private void syncWalletIfBehind() {
|
||||
synchronized (walletLock) {
|
||||
if (isWalletBehind()) {
|
||||
syncWithProgress();
|
||||
|
||||
// TODO: local tests have timing failures unless sync called directly
|
||||
if (xmrConnectionService.getTargetHeight() - walletHeight.get() < XmrWalletBase.DIRECT_SYNC_WITHIN_BLOCKS) {
|
||||
xmrWalletService.syncWallet(wallet);
|
||||
} else {
|
||||
syncWithProgress();
|
||||
}
|
||||
walletHeight.set(wallet.getHeight());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ public class XmrWalletBase {
|
|||
|
||||
// constants
|
||||
public static final int SYNC_PROGRESS_TIMEOUT_SECONDS = 60;
|
||||
public static final int DIRECT_SYNC_WITHIN_BLOCKS = 100;
|
||||
|
||||
// inherited
|
||||
protected MoneroWallet wallet;
|
||||
|
@ -59,12 +60,17 @@ public class XmrWalletBase {
|
|||
}
|
||||
|
||||
public void syncWithProgress() {
|
||||
syncWithProgress(false);
|
||||
}
|
||||
|
||||
public void syncWithProgress(boolean repeatSyncToLatestHeight) {
|
||||
synchronized (walletLock) {
|
||||
|
||||
// set initial state
|
||||
isSyncingWithProgress = true;
|
||||
syncProgressError = null;
|
||||
updateSyncProgress(walletHeight.get());
|
||||
long targetHeightAtStart = xmrConnectionService.getTargetHeight();
|
||||
|
||||
// test connection changing on startup before wallet synced
|
||||
if (testReconnectOnStartup) {
|
||||
|
@ -106,7 +112,7 @@ public class XmrWalletBase {
|
|||
return;
|
||||
}
|
||||
updateSyncProgress(height);
|
||||
if (height >= xmrConnectionService.getTargetHeight()) {
|
||||
if (height >= (repeatSyncToLatestHeight ? xmrConnectionService.getTargetHeight() : targetHeightAtStart)) {
|
||||
setWalletSyncedWithProgress();
|
||||
syncProgressLatch.countDown();
|
||||
}
|
||||
|
|
|
@ -1358,7 +1358,7 @@ public class XmrWalletService extends XmrWalletBase {
|
|||
long time = System.currentTimeMillis();
|
||||
MoneroRpcConnection sourceConnection = xmrConnectionService.getConnection();
|
||||
try {
|
||||
syncWithProgress(); // blocking
|
||||
syncWithProgress(true); // repeat sync to latest target height
|
||||
} catch (Exception e) {
|
||||
log.warn("Error syncing wallet with progress on startup: " + e.getMessage());
|
||||
forceCloseMainWallet();
|
||||
|
@ -1768,7 +1768,13 @@ public class XmrWalletService extends XmrWalletBase {
|
|||
// sync wallet if behind daemon
|
||||
if (walletHeight.get() < xmrConnectionService.getTargetHeight()) {
|
||||
synchronized (walletLock) { // avoid long sync from blocking other operations
|
||||
syncWithProgress();
|
||||
|
||||
// TODO: local tests have timing failures unless sync called directly
|
||||
if (xmrConnectionService.getTargetHeight() - walletHeight.get() < XmrWalletBase.DIRECT_SYNC_WITHIN_BLOCKS) {
|
||||
syncMainWallet();
|
||||
} else {
|
||||
syncWithProgress();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue