You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by he...@apache.org on 2019/04/08 20:46:54 UTC
[geode] branch develop updated: GEODE-6584: remove unecessary
synchronization (#3387)
This is an automated email from the ASF dual-hosted git repository.
heybales pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 6eb32e2 GEODE-6584: remove unecessary synchronization (#3387)
6eb32e2 is described below
commit 6eb32e22dbeefd63a8ea0ceb11101b9e6378ef83
Author: Helena Bales <hb...@pivotal.io>
AuthorDate: Mon Apr 8 13:46:37 2019 -0700
GEODE-6584: remove unecessary synchronization (#3387)
Remove synchronization around changing values that could be volatile and
that are atomic. Results in a performance gain.
* make processMessages in ServerConnection private and add getter and
setter
* refactor check for if the system is shutting down and stopping
processing of messages in ServerConnection
---
.../cache/tier/sockets/ServerConnection.java | 22 ++++++++++++++--------
.../tier/sockets/ServerConnectionCollection.java | 10 ++++++++++
.../tier/sockets/ProtobufServerConnectionTest.java | 4 ++--
3 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
index 4c90699..b489dbb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
@@ -743,7 +743,15 @@ public abstract class ServerConnection implements Runnable {
private boolean clientDisconnectedCleanly = false;
private Throwable clientDisconnectedException;
private int failureCount = 0;
- boolean processMessages = true;
+ private volatile boolean processMessages = true;
+
+ public boolean getProcessMessages() {
+ return processMessages;
+ }
+
+ public void setProcessMessages(boolean newValue) {
+ processMessages = newValue;
+ }
protected void doHandshake() {
// hitesh:to create new connection handshake
@@ -773,14 +781,12 @@ public abstract class ServerConnection implements Runnable {
}
Message message;
message = BaseCommand.readRequest(this);
- synchronized (serverConnectionCollection) {
- if (serverConnectionCollection.isTerminating) {
- // Client is being disconnected, don't try to process message.
- this.processMessages = false;
- return;
- }
- serverConnectionCollection.connectionsProcessing.incrementAndGet();
+ if (!serverConnectionCollection.incrementConnectionsProcessing()) {
+ // Client is being disconnected, don't try to process message.
+ this.processMessages = false;
+ return;
}
+
ThreadState threadState = null;
try {
if (message != null) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionCollection.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionCollection.java
index 670b5a1..e00b142 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionCollection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionCollection.java
@@ -41,4 +41,14 @@ public class ServerConnectionCollection {
public void removeConnection(ServerConnection connection) {
connectionSet.remove(connection);
}
+
+ public boolean incrementConnectionsProcessing() {
+ if (!isTerminating) {
+ connectionsProcessing.incrementAndGet();
+
+ return true;
+ }
+
+ return false;
+ }
}
diff --git a/geode-protobuf/src/test/java/org/apache/geode/internal/cache/tier/sockets/ProtobufServerConnectionTest.java b/geode-protobuf/src/test/java/org/apache/geode/internal/cache/tier/sockets/ProtobufServerConnectionTest.java
index cdf7a2a..3ff7138 100644
--- a/geode-protobuf/src/test/java/org/apache/geode/internal/cache/tier/sockets/ProtobufServerConnectionTest.java
+++ b/geode-protobuf/src/test/java/org/apache/geode/internal/cache/tier/sockets/ProtobufServerConnectionTest.java
@@ -50,9 +50,9 @@ public class ProtobufServerConnectionTest {
@Test
public void testProcessFlag() throws Exception {
ServerConnection serverConnection = IOExceptionThrowingServerConnection();
- Assert.assertTrue(serverConnection.processMessages);
+ Assert.assertTrue(serverConnection.getProcessMessages());
serverConnection.doOneMessage();
- Assert.assertTrue(!serverConnection.processMessages);
+ Assert.assertTrue(!serverConnection.getProcessMessages());
}
@Test