From bd1e6c7e4c9aeb504e2d105652eaad00ac1a41b5 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 13 Nov 2017 09:30:49 -0400 Subject: [PATCH 1/3] Fixed bug in reporting app data 'hash' on commit We allocate 4 bytes not 32. `rewind()` is required because `copyFrom` copies from current position in ByteBuffer to end of ByteBuffer. Current position points to the end of the last 'put' so we rewind to point to the beginning. --- src/main/java/com/github/jtendermint/jabci/JavaCounter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/jtendermint/jabci/JavaCounter.java b/src/main/java/com/github/jtendermint/jabci/JavaCounter.java index 44855ea..2acf870 100644 --- a/src/main/java/com/github/jtendermint/jabci/JavaCounter.java +++ b/src/main/java/com/github/jtendermint/jabci/JavaCounter.java @@ -132,8 +132,9 @@ public final class JavaCounter implements IDeliverTx, ICheckTx, ICommit, IQuery if (txCount == 0) { return ResponseCommit.newBuilder().setCode(CodeType.OK).build(); } else { - ByteBuffer buf = ByteBuffer.allocate(Integer.SIZE); + ByteBuffer buf = ByteBuffer.allocate(Integer.BYTES); buf.putInt(txCount); + buf.rewind(); return ResponseCommit.newBuilder().setCode(CodeType.OK).setData(ByteString.copyFrom(buf)).build(); } } From daf8f0b6dfbd0d688f78d912c4edb8d087299687 Mon Sep 17 00:00:00 2001 From: posdorfer Date: Thu, 23 Nov 2017 16:20:24 +0100 Subject: [PATCH 2/3] #27 socket.accept() block indefinately, preventing while loop from exiting, preventing serversocket from ever reaching finally --- .../jtendermint/jabci/socket/TSocket.java | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/jtendermint/jabci/socket/TSocket.java b/src/main/java/com/github/jtendermint/jabci/socket/TSocket.java index 4ae52e8..99c0c62 100644 --- a/src/main/java/com/github/jtendermint/jabci/socket/TSocket.java +++ b/src/main/java/com/github/jtendermint/jabci/socket/TSocket.java @@ -28,6 +28,7 @@ import java.io.IOException; import java.math.BigInteger; import java.net.ServerSocket; import java.net.Socket; +import java.net.SocketTimeoutException; import java.util.HashSet; import org.slf4j.Logger; @@ -56,7 +57,7 @@ public class TSocket extends ASocket { public static final String CONSENSUS_SOCKET = "-Consensus"; private final HashSet runningThreads = new HashSet<>(); - + private long lastConnectedSocketTime = -1; private boolean continueRunning = true; @@ -78,20 +79,26 @@ public class TSocket extends ASocket { continueRunning = true; int socketcount = 0; try (ServerSocket serverSocket = new ServerSocket(portNumber)) { + serverSocket.setSoTimeout(1000); while (continueRunning) { - Socket clientSocket = serverSocket.accept(); - lastConnectedSocketTime = System.currentTimeMillis(); - String socketName = socketNameForCount(++socketcount); - TSOCKET_LOG.debug("starting socket with: {}", socketName); - SocketHandler t = (socketName != null) ? new SocketHandler(clientSocket, socketName) : new SocketHandler(clientSocket); - t.start(); - runningThreads.add(t); - TSOCKET_LOG.debug("Started thread for sockethandling..."); + try { + Socket clientSocket = serverSocket.accept(); + lastConnectedSocketTime = System.currentTimeMillis(); + String socketName = socketNameForCount(++socketcount); + TSOCKET_LOG.debug("starting socket with: {}", socketName); + SocketHandler t = (socketName != null) ? new SocketHandler(clientSocket, socketName) : new SocketHandler(clientSocket); + t.start(); + runningThreads.add(t); + TSOCKET_LOG.debug("Started thread for sockethandling..."); + } catch (SocketTimeoutException ste) { + // this is triggered by accept() + } } TSOCKET_LOG.debug("TSocket Stopped Running"); } catch (IOException e) { TSOCKET_LOG.error("Exception caught when trying to listen on port " + portNumber + " or listening for a connection", e); } + TSOCKET_LOG.debug("Exited main-run-while loop"); } private String socketNameForCount(int c) { @@ -124,6 +131,7 @@ public class TSocket extends ASocket { runningThreads.clear(); Thread.currentThread().interrupt(); + TSOCKET_LOG.debug("Finished calling stop on members."); } /** * @return the amount of connected sockets, this should usually be 3: info,mempool and consensus @@ -131,11 +139,11 @@ public class TSocket extends ASocket { public int sizeOfConnectedABCISockets() { return runningThreads.size(); } - + public long getLastConnectedTime() { return lastConnectedSocketTime; } - + class SocketHandler extends Thread { private final Socket socket; From da9b638b0102de8325989a73476a028d1bd0e819 Mon Sep 17 00:00:00 2001 From: posdorfer Date: Thu, 23 Nov 2017 16:26:40 +0100 Subject: [PATCH 3/3] #27 make sockettimeout configurable --- .../jtendermint/jabci/socket/TSocket.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/jtendermint/jabci/socket/TSocket.java b/src/main/java/com/github/jtendermint/jabci/socket/TSocket.java index 99c0c62..f270d2a 100644 --- a/src/main/java/com/github/jtendermint/jabci/socket/TSocket.java +++ b/src/main/java/com/github/jtendermint/jabci/socket/TSocket.java @@ -49,6 +49,7 @@ import com.google.protobuf.GeneratedMessageV3; public class TSocket extends ASocket { public static final int DEFAULT_LISTEN_SOCKET_PORT = 46658; + private static final int DEFAULT_LISTEN_SOCKET_TIMEOUT = 1000; private static final Logger TSOCKET_LOG = LoggerFactory.getLogger(TSocket.class); private static final Logger HANDLER_LOG = LoggerFactory.getLogger(SocketHandler.class); @@ -66,7 +67,7 @@ public class TSocket extends ASocket { * Start listening on the default ABCI port 46658 */ public void start() { - this.start(DEFAULT_LISTEN_SOCKET_PORT); + this.start(DEFAULT_LISTEN_SOCKET_PORT, DEFAULT_LISTEN_SOCKET_TIMEOUT); } /** @@ -74,12 +75,22 @@ public class TSocket extends ASocket { * * @param portNumber */ - public void start(int portNumber) { + public void start(final int portNumber) { + this.start(portNumber, DEFAULT_LISTEN_SOCKET_TIMEOUT); + } + + /** + * Start listening on the specified port + * + * @param portNumber + * @param socketTimeout + */ + public void start(final int portNumber,final int socketTimeout) { TSOCKET_LOG.debug("starting serversocket"); continueRunning = true; int socketcount = 0; try (ServerSocket serverSocket = new ServerSocket(portNumber)) { - serverSocket.setSoTimeout(1000); + serverSocket.setSoTimeout(socketTimeout); while (continueRunning) { try { Socket clientSocket = serverSocket.accept();