Hi Igniters,

Within context of connection timeout [
https://issues.apache.org/jira/browse/IGNITE-5234] it's not obvious whether
it's required to use setNetworkTimeout's executor or not.

According to the javadoc of java.sql.Connection#setNetworkTimeout(Executor
executor, int milliseconds), executor is "The <code>Executor</code>
implementation which will be used by <code>setNetworkTimeout</code>."
Seems that executor supposed to take care of connection closing/aborting in
case of timeout, based on submitted Runnable implementation. On the other
hand it's possible to ignore executor and implement
timeout-detection/cancellation logic with Timer. Something like following
(pseudo-code):

ConnectionTimeoutTimerTask connectionTimeoutTimerTask = new
ConnectionTimeoutTimerTask(timeout);
timer.schedule(connectionTimeoutTimerTask, 0, REQUEST_TIMEOUT_PERIOD);
...
JdbcResponse res = cliIo.sendRequest(req);
...

private class ConnectionTimeoutTimerTask extends TimerTask {
...
    @Override public void run() {
        if (remainingConnectionTimeout <= 0)
            close(); //connection.close();

        remainingConnectionTimeout -= REQUEST_TIMEOUT_PERIOD;
    }
...
}

It worth to mention that MSSQL Jdbc driver doesn't use executor and
PostgreSQL doesn't implement setNetworkTimeout() at all.

>From my point of view it might be better to ignore executor, is it suitable?

Any ideas?

Reply via email to