You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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");
}
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);
Implemented fix as suggested in Bug #3973
The MapiSocket object now supports getting and setting the socket timeout, even before the TCP socket is created.
Also improved the close() method to continue closing all opened resources, even if one of them failed to close.
To set the socket timeout specify it in the JDBC URL, for example:
jdbc:monetdb://localhost:50000/demo?so_timeout=8000
This enables the timeout and sets it to 8000 milliseconds (= 8 seconds).
By default the timeout is not set, so wait infinitely.
The text was updated successfully, but these errors were encountered:
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: