This is an automated email from the ASF dual-hosted git repository.
timoninmaxim pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 70b0e3687d4 IGNITE-26349 Refactoring setting socket timeout for
TcpDiscoverySpi#writeToSocket (#12305)
70b0e3687d4 is described below
commit 70b0e3687d450b271cad6eb7d9f76c4c7ff0b5c3
Author: Maksim Timonin <[email protected]>
AuthorDate: Wed Sep 3 02:18:15 2025 +0500
IGNITE-26349 Refactoring setting socket timeout for
TcpDiscoverySpi#writeToSocket (#12305)
---
.../ignite/spi/discovery/tcp/TcpDiscoverySpi.java | 94 ++++++----------------
1 file changed, 25 insertions(+), 69 deletions(-)
diff --git
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index e017f4c0ff7..6df10d88a0f 100644
---
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -1674,18 +1674,11 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter
implements IgniteDiscovery
* @param timeout Socket write timeout.
* @throws IOException If IO failed or write timed out.
*/
- @SuppressWarnings("ThrowFromFinallyBlock")
protected void writeToSocket(Socket sock, TcpDiscoveryAbstractMessage msg,
byte[] data, long timeout) throws IOException {
assert sock != null;
assert data != null;
- SocketTimeoutObject obj = new SocketTimeoutObject(sock,
U.currentTimeMillis() + timeout);
-
- addTimeoutObject(obj);
-
- IOException err = null;
-
- try {
+ try (SocketTimeoutObject ignored = startTimer(sock, timeout)) {
OutputStream out = sock.getOutputStream();
out.write(data);
@@ -1695,20 +1688,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter
implements IgniteDiscovery
catch (IOException e) {
SSLException sslEx = checkSslException(sock, e);
- err = sslEx == null ? e : sslEx;
- }
- finally {
- boolean cancelled = obj.cancel();
-
- if (cancelled)
- removeTimeoutObject(obj);
-
- // Throw original exception.
- if (err != null)
- throw err;
-
- if (!cancelled)
- throw new SocketTimeoutException("Write timed out (socket was
concurrently closed).");
+ throw sslEx == null ? e : sslEx;
}
}
@@ -1744,41 +1724,20 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter
implements IgniteDiscovery
* @throws IOException If IO failed or write timed out.
* @throws IgniteCheckedException If marshalling failed.
*/
- @SuppressWarnings("ThrowFromFinallyBlock")
protected void writeToSocket(Socket sock,
OutputStream out,
TcpDiscoveryAbstractMessage msg,
long timeout) throws IOException, IgniteCheckedException {
assert sock != null;
assert msg != null;
- assert out != null;
- SocketTimeoutObject obj = new SocketTimeoutObject(sock,
U.currentTimeMillis() + timeout);
-
- addTimeoutObject(obj);
-
- IgniteCheckedException err = null;
-
- try {
+ try (SocketTimeoutObject ignored = startTimer(sock, timeout)) {
U.marshal(marshaller(), msg, out);
}
catch (IgniteCheckedException e) {
SSLException sslEx = checkSslException(sock, e);
- err = sslEx == null ? e : new IgniteCheckedException(sslEx);
- }
- finally {
- boolean cancelled = obj.cancel();
-
- if (cancelled)
- removeTimeoutObject(obj);
-
- // Throw original exception.
- if (err != null)
- throw err;
-
- if (!cancelled)
- throw new SocketTimeoutException("Write timed out (socket was
concurrently closed).");
+ throw sslEx == null ? e : new IgniteCheckedException(sslEx);
}
}
@@ -1791,20 +1750,13 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter
implements IgniteDiscovery
* @param timeout Socket timeout.
* @throws IOException If IO failed or write timed out.
*/
- @SuppressWarnings("ThrowFromFinallyBlock")
protected void writeToSocket(TcpDiscoveryAbstractMessage msg, Socket sock,
int res, long timeout)
throws IOException {
assert sock != null;
- SocketTimeoutObject obj = new SocketTimeoutObject(sock,
U.currentTimeMillis() + timeout);
-
- addTimeoutObject(obj);
-
- OutputStream out = sock.getOutputStream();
-
- IOException err = null;
+ try (SocketTimeoutObject ignored = startTimer(sock, timeout)) {
+ OutputStream out = sock.getOutputStream();
- try {
out.write(res);
out.flush();
@@ -1812,20 +1764,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter
implements IgniteDiscovery
catch (IOException e) {
SSLException sslEx = checkSslException(sock, e);
- err = sslEx == null ? e : sslEx;
- }
- finally {
- boolean cancelled = obj.cancel();
-
- if (cancelled)
- removeTimeoutObject(obj);
-
- // Throw original exception.
- if (err != null)
- throw err;
-
- if (!cancelled)
- throw new SocketTimeoutException("Write timed out (socket was
concurrently closed).");
+ throw (sslEx == null) ? e : sslEx;
}
}
@@ -2489,10 +2428,19 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter
implements IgniteDiscovery
return S.toString(TcpDiscoverySpi.class, this);
}
+ /** Starts a timer for a socket operation. */
+ private SocketTimeoutObject startTimer(Socket sock, long timeout) {
+ SocketTimeoutObject obj = new SocketTimeoutObject(sock,
U.currentTimeMillis() + timeout);
+
+ addTimeoutObject(obj);
+
+ return obj;
+ }
+
/**
* Socket timeout object.
*/
- private class SocketTimeoutObject implements IgniteSpiTimeoutObject {
+ private class SocketTimeoutObject implements IgniteSpiTimeoutObject,
AutoCloseable {
/** */
private final IgniteUuid id = IgniteUuid.randomUuid();
@@ -2550,6 +2498,14 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter
implements IgniteDiscovery
return id;
}
+ /** */
+ @Override public void close() throws SocketTimeoutException {
+ if (cancel())
+ removeTimeoutObject(this);
+ else
+ throw new SocketTimeoutException("Write timed out (socket was
concurrently closed).");
+ }
+
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(SocketTimeoutObject.class, this);