|
|
@ -21,7 +21,7 @@ public class TcpTransport implements Transport, Closeable { |
|
|
|
private static final Logger log = LoggerFactory.getLogger(TcpTransport.class); |
|
|
|
|
|
|
|
public static final int DEFAULT_PORT = 50001; |
|
|
|
private static final int READ_TIMEOUT_SECS = 15; |
|
|
|
private static final int[] READ_TIMEOUT_SECS = {3, 8, 16, 34}; |
|
|
|
|
|
|
|
protected final HostAndPort server; |
|
|
|
protected final SocketFactory socketFactory; |
|
|
@ -37,6 +37,7 @@ public class TcpTransport implements Transport, Closeable { |
|
|
|
private boolean running = false; |
|
|
|
private volatile boolean reading = true; |
|
|
|
private boolean firstRead = true; |
|
|
|
private int readTimeoutIndex; |
|
|
|
|
|
|
|
private final JsonRpcServer jsonRpcServer = new JsonRpcServer(); |
|
|
|
private final SubscriptionService subscriptionService = new SubscriptionService(); |
|
|
@ -77,14 +78,19 @@ public class TcpTransport implements Transport, Closeable { |
|
|
|
|
|
|
|
private String readResponse() throws IOException { |
|
|
|
try { |
|
|
|
if(!readLock.tryLock(READ_TIMEOUT_SECS, TimeUnit.SECONDS)) { |
|
|
|
log.debug("No response from server"); |
|
|
|
if(!readLock.tryLock(READ_TIMEOUT_SECS[readTimeoutIndex], TimeUnit.SECONDS)) { |
|
|
|
readTimeoutIndex = Math.min(readTimeoutIndex + 1, READ_TIMEOUT_SECS.length - 1); |
|
|
|
log.debug("No response from server, setting read timeout to " + READ_TIMEOUT_SECS[readTimeoutIndex] + " secs"); |
|
|
|
throw new IOException("No response from server"); |
|
|
|
} |
|
|
|
} catch(InterruptedException e) { |
|
|
|
throw new IOException("Read thread interrupted"); |
|
|
|
} |
|
|
|
|
|
|
|
if(readTimeoutIndex == READ_TIMEOUT_SECS.length - 1) { |
|
|
|
readTimeoutIndex--; |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
if(firstRead) { |
|
|
|
readingCondition.signal(); |
|
|
|