Browse Source

tune batch page size for better performance over tor

terminal
Craig Raw 3 years ago
parent
commit
3820b9838d
  1. 6
      src/main/java/com/sparrowwallet/sparrow/io/Config.java
  2. 12
      src/main/java/com/sparrowwallet/sparrow/net/PagedBatchRequestBuilder.java
  3. 7
      src/main/java/com/sparrowwallet/sparrow/net/TcpTransport.java
  4. 5
      src/main/java/com/sparrowwallet/sparrow/net/TimeoutCounter.java

6
src/main/java/com/sparrowwallet/sparrow/io/Config.java

@ -60,7 +60,7 @@ public class Config {
private boolean useProxy; private boolean useProxy;
private String proxyServer; private String proxyServer;
private int maxServerTimeout = DEFAULT_MAX_TIMEOUT; private int maxServerTimeout = DEFAULT_MAX_TIMEOUT;
private int batchPageSize = DEFAULT_PAGE_SIZE; private int maxPageSize = DEFAULT_PAGE_SIZE;
private boolean usePayNym; private boolean usePayNym;
private boolean sameAppMixing; private boolean sameAppMixing;
private Double appWidth; private Double appWidth;
@ -503,8 +503,8 @@ public class Config {
return maxServerTimeout; return maxServerTimeout;
} }
public int getBatchPageSize() { public int getMaxPageSize() {
return batchPageSize; return maxPageSize;
} }
public boolean isUsePayNym() { public boolean isUsePayNym() {

12
src/main/java/com/sparrowwallet/sparrow/net/PagedBatchRequestBuilder.java

@ -17,7 +17,7 @@ import static com.sparrowwallet.sparrow.net.BatchedElectrumServerRpc.DEFAULT_MAX
import static com.sparrowwallet.sparrow.net.BatchedElectrumServerRpc.RETRY_DELAY_SECS; import static com.sparrowwallet.sparrow.net.BatchedElectrumServerRpc.RETRY_DELAY_SECS;
public class PagedBatchRequestBuilder<K, V> extends AbstractBuilder { public class PagedBatchRequestBuilder<K, V> extends AbstractBuilder {
public static final int DEFAULT_PAGE_SIZE = 500; public static final int DEFAULT_PAGE_SIZE = 100;
private final AtomicLong counter; private final AtomicLong counter;
@ -147,11 +147,19 @@ public class PagedBatchRequestBuilder<K, V> extends AbstractBuilder {
} }
private int getPageSize() { private int getPageSize() {
int pageSize = Config.get().getBatchPageSize(); int pageSize = Config.get().getMaxPageSize();
if(pageSize < 1) { if(pageSize < 1) {
pageSize = DEFAULT_PAGE_SIZE; pageSize = DEFAULT_PAGE_SIZE;
} }
//Halve the page size if there have been timeouts
if(transport instanceof TimeoutCounter timeoutCounter) {
int timeouts = timeoutCounter.getTimeoutCount();
if(timeouts > 0) {
return pageSize / 2;
}
}
return pageSize; return pageSize;
} }

7
src/main/java/com/sparrowwallet/sparrow/net/TcpTransport.java

@ -22,7 +22,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
public class TcpTransport implements Transport, Closeable { public class TcpTransport implements Transport, Closeable, TimeoutCounter {
private static final Logger log = LoggerFactory.getLogger(TcpTransport.class); private static final Logger log = LoggerFactory.getLogger(TcpTransport.class);
public static final int DEFAULT_PORT = 50001; public static final int DEFAULT_PORT = 50001;
@ -251,6 +251,11 @@ public class TcpTransport implements Transport, Closeable {
} }
} }
@Override
public int getTimeoutCount() {
return readTimeoutIndex;
}
private static class Rpc { private static class Rpc {
public String id; public String id;

5
src/main/java/com/sparrowwallet/sparrow/net/TimeoutCounter.java

@ -0,0 +1,5 @@
package com.sparrowwallet.sparrow.net;
public interface TimeoutCounter {
int getTimeoutCount();
}
Loading…
Cancel
Save