You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2016/03/04 10:17:23 UTC
ignite git commit: IGNITE-2760: Implemented.
Repository: ignite
Updated Branches:
refs/heads/ignite-2760 [created] 9fe4e158f
IGNITE-2760: Implemented.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9fe4e158
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9fe4e158
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9fe4e158
Branch: refs/heads/ignite-2760
Commit: 9fe4e158f01475187c3932872fb3b3935855defb
Parents: c13339f
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Fri Mar 4 12:17:01 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Fri Mar 4 12:17:01 2016 +0300
----------------------------------------------------------------------
.../nio/GridAbstractCommunicationClient.java | 60 +++++++++++---------
.../util/nio/GridCommunicationClient.java | 7 +--
.../util/nio/GridShmemCommunicationClient.java | 4 +-
.../util/nio/GridTcpNioCommunicationClient.java | 4 +-
.../communication/tcp/TcpCommunicationSpi.java | 2 +-
5 files changed, 40 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fe4e158/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridAbstractCommunicationClient.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridAbstractCommunicationClient.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridAbstractCommunicationClient.java
index 9b014ec..9ac2ce6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridAbstractCommunicationClient.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridAbstractCommunicationClient.java
@@ -26,6 +26,9 @@ import org.jetbrains.annotations.Nullable;
* Implements basic lifecycle for communication clients.
*/
public abstract class GridAbstractCommunicationClient implements GridCommunicationClient {
+ /** Close mask. */
+ private static int CLOSE_MASK = 1 << 30;
+
/** Time when this client was last used. */
private volatile long lastUsed = U.currentTimeMillis();
@@ -43,54 +46,54 @@ public abstract class GridAbstractCommunicationClient implements GridCommunicati
}
/** {@inheritDoc} */
- @Override public boolean close() {
- return reserves.compareAndSet(0, -1);
+ @Override public boolean tryClose() {
+ return reserves.compareAndSet(0, CLOSE_MASK);
}
/** {@inheritDoc} */
@Override public void forceClose() {
- reserves.set(-1);
+ while (true) {
+ int cur = reserves.get();
+
+ if (closed0(cur))
+ return;
+
+ if (reserves.compareAndSet(cur, cur | CLOSE_MASK))
+ return;
+ }
}
/** {@inheritDoc} */
@Override public boolean closed() {
- return reserves.get() == -1;
+ return closed0(reserves.get());
}
/** {@inheritDoc} */
@Override public boolean reserve() {
- while (true) {
- int r = reserves.get();
+ int cur = reserves.incrementAndGet();
- if (r == -1)
- return false;
+ if (closed0(cur)) {
+ release();
- if (reserves.compareAndSet(r, r + 1))
- return true;
+ return false;
}
+
+ return true;
}
/** {@inheritDoc} */
@Override public void release() {
- while (true) {
- int r = reserves.get();
-
- if (r == -1)
- return;
-
- if (reserves.compareAndSet(r, r - 1))
- return;
- }
+ reserves.decrementAndGet();
}
/** {@inheritDoc} */
- @Override public boolean reserved() {
- return reserves.get() > 0;
+ @Override public long getIdleTime() {
+ return U.currentTimeMillis() - lastUsed;
}
/** {@inheritDoc} */
- @Override public long getIdleTime() {
- return U.currentTimeMillis() - lastUsed;
+ @Override public boolean async() {
+ return false;
}
/**
@@ -100,9 +103,14 @@ public abstract class GridAbstractCommunicationClient implements GridCommunicati
lastUsed = U.currentTimeMillis();
}
- /** {@inheritDoc} */
- @Override public boolean async() {
- return false;
+ /**
+ * Check if value represents closed client.
+ *
+ * @param val Value.
+ * @return {@code True} if closed.
+ */
+ private static boolean closed0(int val) {
+ return (val & CLOSE_MASK) == CLOSE_MASK;
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fe4e158/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridCommunicationClient.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridCommunicationClient.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridCommunicationClient.java
index 0de54e9..74feb44 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridCommunicationClient.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridCommunicationClient.java
@@ -46,7 +46,7 @@ public interface GridCommunicationClient {
* @return {@code True} if client has been closed by this call,
* {@code false} if failed to close client (due to concurrent reservation or concurrent close).
*/
- public boolean close();
+ public boolean tryClose();
/**
* Forces client close.
@@ -69,11 +69,6 @@ public interface GridCommunicationClient {
public void release();
/**
- * @return {@code True} if client was reserved.
- */
- public boolean reserved();
-
- /**
* Gets idle time of this client.
*
* @return Idle time of this client.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fe4e158/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridShmemCommunicationClient.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridShmemCommunicationClient.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridShmemCommunicationClient.java
index ebe86fb..2b6df5d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridShmemCommunicationClient.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridShmemCommunicationClient.java
@@ -84,8 +84,8 @@ public class GridShmemCommunicationClient extends GridAbstractCommunicationClien
}
/** {@inheritDoc} */
- @Override public boolean close() {
- boolean res = super.close();
+ @Override public boolean tryClose() {
+ boolean res = super.tryClose();
if (res)
shmem.close();
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fe4e158/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridTcpNioCommunicationClient.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridTcpNioCommunicationClient.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridTcpNioCommunicationClient.java
index 4022bc5..e8dabca 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridTcpNioCommunicationClient.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridTcpNioCommunicationClient.java
@@ -71,8 +71,8 @@ public class GridTcpNioCommunicationClient extends GridAbstractCommunicationClie
}
/** {@inheritDoc} */
- @Override public boolean close() {
- boolean res = super.close();
+ @Override public boolean tryClose() {
+ boolean res = super.tryClose();
if (res)
ses.close();
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fe4e158/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
index 2a078ee..0d6b930 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
@@ -3110,7 +3110,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
if (log.isDebugEnabled())
log.debug("Closing idle node connection: " + nodeId);
- if (client.close() || client.closed())
+ if (client.tryClose() || client.closed())
clients.remove(nodeId, client);
}
}