Skip to content

Commit 7a7e594

Browse files
committed
auto-reconnect mechinism
1 parent 7b35598 commit 7a7e594

File tree

1 file changed

+37
-6
lines changed

1 file changed

+37
-6
lines changed

src/main/java/com/cisco/trex/stateless/TRexTransport.java

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.zeromq.SocketType;
1414
import org.zeromq.ZMQ;
1515
import org.zeromq.ZMQException;
16+
import zmq.ZError;
1617

1718
/** TRex Transport class to create zmq socket for connection to trex server */
1819
public class TRexTransport {
@@ -133,17 +134,47 @@ public synchronized String sendJson(String json) {
133134
try {
134135
zmqSocket.send(compressed);
135136
} catch (ZMQException e) {
136-
throw new IllegalStateException(
137-
"Did not get any response from server "
138-
+ getHost()
139-
+ " within timeout "
140-
+ zmqSocket.getReceiveTimeOut(),
141-
e);
137+
throwTimeoutException(e);
142138
}
143139
byte[] msg = zmqSocket.recv();
140+
// add this if-block to deal with the connect lost error which is caused
141+
// after a long time the client-server don't interactive
142+
if (msg == null && zmqSocket.errno() == ZError.ENOTCONN) {
143+
zmqSocket.connect(this.connectionString);
144+
try {
145+
zmqSocket.send(compressed);
146+
} catch (ZMQException e) {
147+
throwTimeoutException(e);
148+
}
149+
msg = zmqSocket.recv();
150+
}
151+
152+
if (msg == null) {
153+
zmqSocket.connect(this.connectionString);
154+
try {
155+
zmqSocket.send(compressed);
156+
} catch (ZMQException e) {
157+
throw new IllegalStateException(
158+
"Did not get any response from server "
159+
+ getHost()
160+
+ " within timeout "
161+
+ zmqSocket.getReceiveTimeOut(),
162+
e);
163+
}
164+
msg = zmqSocket.recv();
165+
}
144166

145167
String response = this.dataCompressor.decompressBytesToString(msg);
146168
LOGGER.debug("JSON Resp: {}", response);
147169
return response;
148170
}
171+
172+
private void throwTimeoutException(Exception e) {
173+
throw new IllegalStateException(
174+
"Did not get any response from server "
175+
+ getHost()
176+
+ " within timeout "
177+
+ zmqSocket.getReceiveTimeOut(),
178+
e);
179+
}
149180
}

0 commit comments

Comments
 (0)