JDBC hangs #3973
Closed
JDBC hangs #3973
Labels
Comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Date: 2016-04-04 14:49:43 +0200
From: Kovacs, Kalman <<kalman.kovacs>>
To: clients devs <>
Version: 11.21.19 (Jul2015-SP4)
CC: kalman.kovacs, martin.van.dinther
Last updated: 2016-12-21 13:08:19 +0100
Comment 22007
Date: 2016-04-04 14:49:43 +0200
From: Kovacs, Kalman <<kalman.kovacs>>
User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36
Build Identifier:
Sometimes JDBC does not answer for a connection request. In the code it seems that the sockTimeout is not set at the start of making a new connection.
Reproducible: Sometimes
We think that in the constructors of nl.cwi.monetdb.mcl.net.MapiSocket a new int parameter (sockTimeout) is required.
So right after a new Socket is created, its setSoTimeout method should be called with the new (sockTimeout) parameter.
So at nl.cwi.monetdb.jdbc.MonetConnection when you calls server.connect the parameter (sockTimeout) should be add to the parameters.
Comment 22008
Date: 2016-04-05 10:55:43 +0200
From: Kovacs, Kalman <<kalman.kovacs>>
We have rethought our solution for this problem, that is:
0., Do not make a new constructor of MapiSocket
1., There should be a new local variable in MapiSocket:
private int soTimeout = 0;
2., Make up the setSoTimeout method to handle the timeout setting before and after the Socket creation:
public void setSoTimeout(int s) throws SocketException {
if (s < 0) {
throw new IllegalArgumentException("timeout can't be negative");
}
// limit time to wait on blocking operations (0 = indefinite)
soTimeout = s;
//We have to check wheather the socket has been created already
if (con != null) {
con.setSoTimeout(s);
}
}
3., In MonetConnection we set socket timeout, before calling connect:
try {
// Socket timeout should set before the socket created.
server.setSoTimeout(sockTimeout);
List warnings =
server.connect(hostname, port, username, password);
for (String warning : warnings) {
addWarning(warning, "01M02");
}
Comment 22009
Date: 2016-04-05 11:00:40 +0200
From: Kovacs, Kalman <<kalman.kovacs>>
And - of course - in the MapiSocket's connect method we have to set socket timeout right after the new socket was created:
if (makeConnection) {
con = new Socket(host, port);
// Set socket timeout
con.setSoTimeout(soTimeout);
// set nodelay, as it greatly speeds up small messages (like we
// often do)
con.setTcpNoDelay(true);
Comment 24703
Date: 2016-11-17 17:42:49 +0100
From: MonetDB Mercurial Repository <>
Changeset 6cc63d6cb224, made by Martin van Dinther martin.van.dinther@monetdbsolutions.com in the monetdb-java repo, refers to this bug.
For complete details, see http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=6cc63d6cb224
Changeset description:
The text was updated successfully, but these errors were encountered: