You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by jc...@apache.org on 2015/10/16 02:59:16 UTC
incubator-geode git commit: [GEODE-77] TCP check for health monitor
Repository: incubator-geode
Updated Branches:
refs/heads/feature/GEODE-77 5ca7c37cc -> e267c88b1
[GEODE-77] TCP check for health monitor
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/e267c88b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/e267c88b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/e267c88b
Branch: refs/heads/feature/GEODE-77
Commit: e267c88b134155eea6dab935a7a549c041e3e77e
Parents: 5ca7c37
Author: Jianxia Chen <jc...@pivotal.io>
Authored: Thu Oct 15 17:56:37 2015 -0700
Committer: Jianxia Chen <jc...@pivotal.io>
Committed: Thu Oct 15 17:56:37 2015 -0700
----------------------------------------------------------------------
.../membership/gms/fd/GMSHealthMonitor.java | 215 ++++++++++++++++++-
.../gms/interfaces/HealthMonitor.java | 17 ++
.../membership/gms/membership/GMSJoinLeave.java | 103 +++++++--
.../gms/messages/InstallViewMessage.java | 31 ++-
.../gms/messages/JoinRequestMessage.java | 14 +-
.../gms/messages/JoinResponseMessage.java | 31 ++-
.../membership/GMSHealthMonitorJUnitTest.java | 14 +-
.../sanctionedDataSerializables.txt | 38 ++--
.../codeAnalysis/sanctionedSerializables.txt | 5 +-
9 files changed, 418 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
index ae79fc5..8eb4dbb 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
@@ -4,6 +4,13 @@ import static com.gemstone.gemfire.internal.DataSerializableFixedID.CHECK_REQUES
import static com.gemstone.gemfire.internal.DataSerializableFixedID.CHECK_RESPONSE;
import static com.gemstone.gemfire.internal.DataSerializableFixedID.SUSPECT_MEMBERS_MESSAGE;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -24,6 +31,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.logging.log4j.Logger;
+import com.gemstone.gemfire.SystemConnectException;
import com.gemstone.gemfire.distributed.DistributedMember;
import com.gemstone.gemfire.distributed.DistributedSystemDisconnectedException;
import com.gemstone.gemfire.distributed.internal.DistributionMessage;
@@ -36,6 +44,7 @@ import com.gemstone.gemfire.distributed.internal.membership.gms.messages.CheckRe
import com.gemstone.gemfire.distributed.internal.membership.gms.messages.CheckResponseMessage;
import com.gemstone.gemfire.distributed.internal.membership.gms.messages.SuspectMembersMessage;
import com.gemstone.gemfire.distributed.internal.membership.gms.messages.SuspectRequest;
+import com.gemstone.gemfire.internal.AvailablePort;
import com.gemstone.gemfire.internal.concurrent.ConcurrentHashSet;
/**
@@ -118,6 +127,15 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
/** test hook */
boolean beingSick = false;
+
+ // For TCP check
+ private ExecutorService serverSocketExecutor;
+ private static final int PING = 0x01;
+ private static final int PONG = 0x02;
+ private InetAddress ip;
+ private int socketPort;
+ private ServerSocket serverSocket;
+ private Map<InternalDistributedMember, InetSocketAddress> socketInfo = new ConcurrentHashMap<InternalDistributedMember, InetSocketAddress>();
public GMSHealthMonitor() {
@@ -327,6 +345,61 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
return false;
}
+ /**
+ * During final check, establish TCP connection between current member and suspect member.
+ * And exchange PING/PONG message to see if the suspect member is still alive.
+ *
+ * @param suspectMember member that does not respond to CheckRequestMessage
+ * @return true if successfully exchanged PING/PONG with TCP connection, otherwise false.
+ */
+ private boolean doTCPCheckMember(InternalDistributedMember suspectMember) {
+ logger.trace("Checking member {} with TCP socket connection.", suspectMember);
+ Socket clientSocket = new Socket();
+ try {
+ // establish TCP connection
+ InetSocketAddress addr = socketInfo.get(suspectMember);
+ if (addr != null) {
+ logger.trace("Checking member {} with TCP socket connection {}:{}.", suspectMember, addr.getAddress(), addr.getPort());
+ clientSocket.connect(addr, (int) services.getConfig().getMemberTimeout());
+ }
+ if (clientSocket.isConnected()) {
+ clientSocket.setSoTimeout((int) services.getConfig().getMemberTimeout());
+ InputStream in = clientSocket.getInputStream();
+ OutputStream out = clientSocket.getOutputStream();
+ out.write(PING);
+ out.flush();
+ clientSocket.shutdownOutput();
+ logger.trace("Send {} to member {} with TCP socket connection.", PING, suspectMember);
+ int b = in.read();
+ logger.trace("Received {} from member {} with TCP socket connection.", b, suspectMember);
+ if (b == PONG) {
+ CustomTimeStamp ts = memberVsLastMsgTS.get(suspectMember);
+ if (ts != null) {
+ ts.setTimeStamp(System.currentTimeMillis());
+ }
+ return true;
+ } else {
+ // TODO: Received something other than PONG. Is it possible?
+ return false;
+ }
+ } else {// cannot establish TCP connection with suspect member
+ return false;
+ }
+ } catch (IOException e) {
+ logger.trace("Unexpected exception", e);
+ } finally {
+ try {
+ if (clientSocket != null) {
+ clientSocket.close();
+ }
+ } catch (IOException e) {
+ logger.trace("Unexpected exception", e);
+ }
+ }
+
+ return false;
+ }
+
/*
* (non-Javadoc)
*
@@ -355,7 +428,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
}
public void start() {
- {
+ {
scheduler = Executors.newScheduledThreadPool(1, new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
@@ -396,6 +469,108 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
suspectRequestCollectorThread.setDaemon(true);
suspectRequestCollectorThread.start();
}
+
+ {
+ serverSocketExecutor = Executors.newCachedThreadPool(new ThreadFactory() {
+ AtomicInteger threadIdx = new AtomicInteger();
+
+ @Override
+ public Thread newThread(Runnable r) {
+ int id = threadIdx.getAndIncrement();
+ Thread th = new Thread(Services.getThreadGroup(), r, "TCP Check ServerSocket Thread " + id);
+ th.setDaemon(true);
+ return th;
+ }
+ });
+
+ serverSocketExecutor.execute(new Runnable() {
+ @Override
+ public void run() {
+ Socket socket = null;
+ try {
+ // start server socket for TCP check
+ localAddress = services.getMessenger().getMemberID();
+ ip = localAddress.getInetAddress();
+ int[] portRange = services.getConfig().getMembershipPortRange();
+ socketPort = AvailablePort.getAvailablePortInRange(portRange[0], portRange[1], AvailablePort.SOCKET);
+ if (socketPort == -1) {
+ throw new SystemConnectException("Unable to find a free port in the membership port range");
+ }
+ serverSocket = new ServerSocket(socketPort);
+ logger.debug("GMSHealthMonitor started server socket on {}:{}.", ip, socketPort);
+ socketInfo.put(localAddress, new InetSocketAddress(ip, socketPort));
+ while (!services.getCancelCriterion().isCancelInProgress()
+ && !GMSHealthMonitor.this.isStopping && !GMSHealthMonitor.this.playingDead) {
+ try {
+ socket = serverSocket.accept();
+ if (GMSHealthMonitor.this.playingDead) {
+ continue;
+ }
+ socket.setSoTimeout((int) services.getConfig().getMemberTimeout());
+ new ClientSocketHandler(socket).start();
+ } catch (IOException e) {
+ logger.trace("Unexpected exception", e);
+ try {
+ if (socket != null) {
+ socket.close();
+ }
+ } catch (IOException ioe) {
+ logger.trace("Unexpected exception", ioe);
+ }
+ }
+ }
+ } catch (IOException e) {
+ logger.trace("Unexpected exception", e);
+ } finally {
+ // close the server socket
+ if (serverSocket != null) {
+ try {
+ serverSocket.close();
+ logger.debug("GMSHealthMonitor server socket closed.");
+ } catch (IOException e) {
+ logger.debug("Unexpected exception", e);
+ }
+ }
+ }
+ }
+ });
+ }
+ }
+
+ class ClientSocketHandler extends Thread {
+
+ private Socket socket;
+
+ public ClientSocketHandler(Socket socket) {
+ super(services.getThreadGroup(), "ClientSocketHandler");
+ this.socket = socket;
+ setDaemon(true);
+ }
+
+ public void run() {
+ try {
+ InputStream in = socket.getInputStream();
+ OutputStream out = socket.getOutputStream();
+ int b = in.read();
+ logger.debug("GMSHealthMonitor server socket received {}.", b);
+ if (b == PING) {
+ out.write(PONG);
+ out.flush();
+ socket.shutdownOutput();
+ logger.debug("GMSHealthMonitor server socket replied {}.", PONG);
+ }
+ } catch (IOException e) {
+ logger.trace("Unexpected exception", e);
+ } finally {
+ if (socket != null) {
+ try {
+ socket.close();
+ } catch (IOException e) {
+ logger.info("Unexpected exception", e);
+ }
+ }
+ }
+ }
}
public synchronized void installView(NetView newView) {
@@ -519,6 +694,18 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
checkExecutor.shutdown();
}
+ if (serverSocketExecutor != null) {
+ if (serverSocket != null) {
+ try {
+ serverSocket.close();
+ }
+ catch (IOException e) {
+ logger.trace("Unexpected exception", e);
+ }
+ }
+ serverSocketExecutor.shutdownNow();
+ }
+
if (suspectRequestCollectorThread != null) {
suspectRequestCollectorThread.shutdown();
}
@@ -528,7 +715,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
* test method
*/
public boolean isShutdown() {
- return scheduler.isShutdown() && checkExecutor.isShutdown() && !suspectRequestCollectorThread.isAlive();
+ return scheduler.isShutdown() && checkExecutor.isShutdown() && serverSocketExecutor.isShutdown() && !suspectRequestCollectorThread.isAlive();
}
@Override
@@ -748,7 +935,12 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
memberVsLastMsgTS.put(mbr, ts);
logger.info("Performing final check for suspect member {} reason={}", mbr, reason);
- boolean pinged = GMSHealthMonitor.this.doCheckMember(mbr);
+ boolean pinged;
+ if (socketInfo.get(mbr) == null || socketInfo.get(mbr).getPort() < 0) {
+ pinged = GMSHealthMonitor.this.doCheckMember(mbr);
+ } else {
+ pinged = GMSHealthMonitor.this.doTCPCheckMember(mbr);
+ }
if (!pinged && !isStopping) {
ts = memberVsLastMsgTS.get(mbr);
if (ts == null || ts.getTimeStamp() <= startTime) {
@@ -913,4 +1105,21 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
// TODO Auto-generated method stub
}
+
+ public Map<InternalDistributedMember, InetSocketAddress> getSocketInfo() {
+ return this.socketInfo;
+ }
+
+ public void installSocketInfo(List<InternalDistributedMember> members, List<Integer> portsForMembers) {
+ logger.info("members=" + members + " portsForMembers=" + portsForMembers);
+ logger.info("members.size()=" + members.size() + " portsForMembers.size()=" + portsForMembers.size());
+ for (int i = 0; i < members.size(); i++) {
+ if (portsForMembers.get(i) == -1) {
+ continue;
+ }
+ InetSocketAddress addr = new InetSocketAddress(members.get(i).getInetAddress(), portsForMembers.get(i));
+ socketInfo.put(members.get(i), addr);
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/interfaces/HealthMonitor.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/interfaces/HealthMonitor.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/interfaces/HealthMonitor.java
index 9ace2be..05e2d91 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/interfaces/HealthMonitor.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/interfaces/HealthMonitor.java
@@ -1,5 +1,9 @@
package com.gemstone.gemfire.distributed.internal.membership.gms.interfaces;
+import java.net.InetSocketAddress;
+import java.util.List;
+import java.util.Map;
+
import com.gemstone.gemfire.distributed.DistributedMember;
import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
@@ -34,4 +38,17 @@ public interface HealthMonitor extends Service {
* ShutdownMessage has been received from the given member
*/
public void memberShutdown(DistributedMember mbr, String reason);
+
+ /**
+ * Returns a map that describes the members and their server sockets
+ */
+ public Map<InternalDistributedMember, InetSocketAddress> getSocketInfo();
+
+ /**
+ * Update the information of the members and their server sockets
+ *
+ * @param members
+ * @param portsForMembers List of socket ports for each member
+ */
+ public void installSocketInfo(List<InternalDistributedMember> members, List<Integer> portsForMembers);
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeave.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeave.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeave.java
index 4ebc20c..abe6b03 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeave.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeave.java
@@ -19,6 +19,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
@@ -280,7 +281,10 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
logger.info("Attempting to join the distributed system through coordinator " + coord + " using address " + this.localAddress);
JoinRequestMessage req = new JoinRequestMessage(coord, this.localAddress,
services.getAuthenticator().getCredentials(coord));
-
+ //add server socket port in the join request
+ if (services.getHealthMonitor().getSocketInfo().get(localAddress) != null) {
+ req.setSocketPort(services.getHealthMonitor().getSocketInfo().get(localAddress).getPort());
+ }
services.getMessenger().send(req);
JoinResponseMessage response = null;
@@ -322,6 +326,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
this.localAddress.setVmViewId(this.birthViewId);
GMSMember me = (GMSMember)this.localAddress.getNetMember();
me.setBirthViewId(birthViewId);
+ services.getHealthMonitor().installSocketInfo(response.getCurrentView().getMembers(), response.getPortsForMembers());
installView(response.getCurrentView());
}
@@ -374,6 +379,23 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
if (!this.localAddress.getNetMember().preferredForCoordinator() &&
incomingRequest.getMemberID().getNetMember().preferredForCoordinator()) {
JoinResponseMessage m = new JoinResponseMessage(incomingRequest.getMemberID(), currentView, true);
+ // add socket ports of all members to join response
+ List<Integer> portsForMembers = new ArrayList<Integer>(currentView.size());
+ Map<InternalDistributedMember, InetSocketAddress> socketInfo = services.getHealthMonitor().getSocketInfo();
+ for (InternalDistributedMember mbr : currentView.getMembers()) {
+ InetSocketAddress addr = socketInfo.get(mbr);
+ if (addr != null) {
+ portsForMembers.add(addr.getPort());
+ } else {
+ if (incomingRequest.getMemberID().compareTo(mbr, true) == 0) {
+ portsForMembers.add(incomingRequest.getSocketPort());
+ }
+ else {
+ portsForMembers.add(-1);
+ }
+ }
+ }
+ m.setPortsForMembers(portsForMembers);
services.getMessenger().send(m);
return;
}
@@ -577,9 +599,10 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
}
}
- private void sendJoinResponses(List<InternalDistributedMember> newMbrs, NetView newView) {
+ private void sendJoinResponses(List<InternalDistributedMember> newMbrs, NetView newView, List<Integer> portsForMembers) {
for (InternalDistributedMember mbr: newMbrs) {
JoinResponseMessage response = new JoinResponseMessage(mbr, newView);
+ response.setPortsForMembers(portsForMembers);
services.getMessenger().send(response);
}
}
@@ -594,19 +617,44 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
}
- boolean prepareView(NetView view, Collection<InternalDistributedMember> newMembers) {
- return sendView(view, newMembers, true, this.prepareProcessor);
+ boolean prepareView(NetView view, Collection<InternalDistributedMember> newMembers, List<DistributionMessage> requests) {
+ return sendView(view, newMembers, true, this.prepareProcessor, requests);
}
- void sendView(NetView view, Collection<InternalDistributedMember> newMembers) {
- sendView(view, newMembers, false, this.viewProcessor);
+ void sendView(NetView view, Collection<InternalDistributedMember> newMembers, List<DistributionMessage> requests) {
+ sendView(view, newMembers, false, this.viewProcessor, requests);
}
- boolean sendView(NetView view, Collection<InternalDistributedMember> newMembers, boolean preparing, ViewReplyProcessor rp) {
+ boolean sendView(NetView view, Collection<InternalDistributedMember> newMembers, boolean preparing, ViewReplyProcessor rp, List<DistributionMessage> requests) {
int id = view.getViewId();
InstallViewMessage msg = new InstallViewMessage(view, services.getAuthenticator().getCredentials(this.localAddress), preparing);
Set<InternalDistributedMember> recips = new HashSet<>(view.getMembers());
+ // add socket ports of all members to InstallViewMessage
+ List<Integer> portsForMembers = new ArrayList<Integer>(view.size());
+ if (requests != null) {
+ Map<InternalDistributedMember, InetSocketAddress> socketInfo = services.getHealthMonitor().getSocketInfo();
+ for (InternalDistributedMember mbr : view.getMembers()) {
+ InetSocketAddress addr = socketInfo.get(mbr);
+ if (addr != null) {
+ portsForMembers.add(addr.getPort());
+ } else {
+ boolean found = false;
+ for (DistributionMessage req : requests) {
+ if (req instanceof JoinRequestMessage) {
+ if (((JoinRequestMessage) req).getMemberID().compareTo(mbr, false) == 0) {
+ portsForMembers.add(((JoinRequestMessage) req).getSocketPort());
+ found = true;
+ }
+ }
+ }
+ if (!found) {
+ portsForMembers.add(-1);
+ }
+ }
+ }
+ msg.setPortsForMembers(portsForMembers);
+ }
// a recent member was seen not to receive a new view - I think this is why
// recips.removeAll(newMembers); // new members get the view in a JoinResponseMessage
@@ -620,6 +668,9 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
if (preparing) {
this.preparedView = view;
+ if (requests != null) {
+ services.getHealthMonitor().installSocketInfo(view.getMembers(), portsForMembers);
+ }
} else {
installView(view);
}
@@ -686,6 +737,9 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
}
else {
this.preparedView = view;
+ if (!m.getPortsForMembers().isEmpty()) {
+ services.getHealthMonitor().installSocketInfo(view.getMembers(), m.getPortsForMembers());
+ }
ackView(m);
}
}
@@ -1555,7 +1609,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
if (initialView != null) {
try {
prepareAndSendView(initialView, Collections.<InternalDistributedMember>emptyList(),
- initialLeaving, initialRemovals);
+ initialLeaving, initialRemovals, null);
} finally {
this.initialView = null;
this.initialLeaving = null;
@@ -1736,10 +1790,32 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
// we want to always check for quorum loss but don't act on it
// unless network-partition-detection is enabled
if ( !(isNetworkPartition(newView) && quorumRequired) ) {
- sendJoinResponses(joinReqs, newView);
+ // add socket ports of all members to join response
+ List<Integer> portsForMembers = new ArrayList<Integer>(newView.size());
+ Map<InternalDistributedMember, InetSocketAddress> socketInfo = services.getHealthMonitor().getSocketInfo();
+ for (InternalDistributedMember mbr : newView.getMembers()) {
+ InetSocketAddress addr = socketInfo.get(mbr);
+ if (addr != null) {
+ portsForMembers.add(addr.getPort());
+ } else {
+ boolean found = false;
+ for (DistributionMessage req : requests) {
+ if (req instanceof JoinRequestMessage) {
+ if (((JoinRequestMessage) req).getMemberID().compareTo(mbr, true) == 0) {
+ portsForMembers.add(((JoinRequestMessage) req).getSocketPort());
+ found = true;
+ }
+ }
+ }
+ if (!found) {
+ portsForMembers.add(-1);
+ }
+ }
+ }
+ sendJoinResponses(joinReqs, newView, portsForMembers);
}
- prepareAndSendView(newView, joinReqs, leaveReqs, newView.getCrashedMembers());
+ prepareAndSendView(newView, joinReqs, leaveReqs, newView.getCrashedMembers(), requests);
return;
}
@@ -1750,7 +1826,8 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
void prepareAndSendView(NetView newView,
List<InternalDistributedMember> joinReqs,
Set<InternalDistributedMember> leaveReqs,
- Set<InternalDistributedMember> removalReqs) {
+ Set<InternalDistributedMember> removalReqs,
+ List<DistributionMessage> requests) {
boolean prepared = false;
do {
if (this.shutdown || Thread.currentThread().isInterrupted()) {
@@ -1773,7 +1850,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
return;
}
- prepared = prepareView(newView, joinReqs);
+ prepared = prepareView(newView, joinReqs, requests);
logger.debug("view preparation phase completed. prepared={}", prepared);
if (prepared) {
@@ -1825,7 +1902,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
lastConflictingView = null;
- sendView(newView, joinReqs);
+ sendView(newView, joinReqs, requests);
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage.java
index fa9989f..5534ff8 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage.java
@@ -3,18 +3,21 @@ package com.gemstone.gemfire.distributed.internal.membership.gms.messages;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import com.gemstone.gemfire.DataSerializer;
import com.gemstone.gemfire.distributed.internal.DistributionManager;
import com.gemstone.gemfire.distributed.internal.HighPriorityDistributionMessage;
import com.gemstone.gemfire.distributed.internal.membership.NetView;
-import com.gemstone.gemfire.distributed.internal.membership.gms.mgr.GMSMembershipManager;
+import com.gemstone.gemfire.internal.InternalDataSerializer;
public class InstallViewMessage extends HighPriorityDistributionMessage {
private NetView view;
private Object credentials;
private boolean preparing;
+ private List<Integer> portsForMembers = new ArrayList<Integer>();
public InstallViewMessage(NetView view, Object credentials) {
this.view = view;
@@ -54,12 +57,29 @@ public class InstallViewMessage extends HighPriorityDistributionMessage {
throw new IllegalStateException("this message is not intended to execute in a thread pool");
}
+ /** this will deserialize as an ArrayList */
+ private void writeAsArrayList(List list, DataOutput out) throws IOException {
+ int size;
+ if (list == null) {
+ size = -1;
+ } else {
+ size = list.size();
+ }
+ InternalDataSerializer.writeArrayLength(size, out);
+ if (size > 0) {
+ for (int i = 0; i < size; i++) {
+ DataSerializer.writeObject(list.get(i), out);
+ }
+ }
+ }
+
@Override
public void toData(DataOutput out) throws IOException {
super.toData(out);
DataSerializer.writeObject(this.view, out);
DataSerializer.writeObject(this.credentials, out);
out.writeBoolean(preparing);
+ writeAsArrayList(portsForMembers, out);
}
@Override
@@ -68,13 +88,22 @@ public class InstallViewMessage extends HighPriorityDistributionMessage {
this.view = DataSerializer.readObject(in);
this.credentials = DataSerializer.readObject(in);
this.preparing = in.readBoolean();
+ this.portsForMembers = DataSerializer.readArrayList(in);
}
@Override
public String toString() {
return "InstallViewMessage(preparing="+this.preparing+"; "+this.view
+"; cred="+(credentials==null?"null": "not null")
+ + "portsForMembers: " + portsForMembers
+")";
}
+ public List<Integer> getPortsForMembers() {
+ return this.portsForMembers;
+ }
+
+ public void setPortsForMembers(List<Integer> portsForMembers) {
+ this.portsForMembers = portsForMembers;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage.java
index fc5faa6..952b20e 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage.java
@@ -13,7 +13,7 @@ import com.gemstone.gemfire.internal.Version;
public class JoinRequestMessage extends HighPriorityDistributionMessage {
private InternalDistributedMember memberID;
private Object credentials;
-
+ private int socketPort = -1;
public JoinRequestMessage(InternalDistributedMember coord,
InternalDistributedMember id, Object credentials) {
@@ -47,7 +47,7 @@ public class JoinRequestMessage extends HighPriorityDistributionMessage {
@Override
public String toString() {
- return getShortClassName() + "(" + memberID + (credentials==null? ")" : "; with credentials)");
+ return getShortClassName() + "(" + memberID + (credentials==null? ")" : "; with credentials)") + " socketPort:" + socketPort;
}
@Override
@@ -59,6 +59,7 @@ public class JoinRequestMessage extends HighPriorityDistributionMessage {
public void toData(DataOutput out) throws IOException {
DataSerializer.writeObject(memberID, out);
DataSerializer.writeObject(credentials, out);
+ DataSerializer.writePrimitiveInt(socketPort, out);
// preserve the multicast setting so the receiver can tell
// if this is a mcast join request
out.writeBoolean(getMulticast());
@@ -68,7 +69,16 @@ public class JoinRequestMessage extends HighPriorityDistributionMessage {
public void fromData(DataInput in) throws IOException, ClassNotFoundException {
memberID = DataSerializer.readObject(in);
credentials = DataSerializer.readObject(in);
+ socketPort = DataSerializer.readPrimitiveInt(in);
setMulticast(in.readBoolean());
}
+ public int getSocketPort() {
+ return socketPort;
+ }
+
+ public void setSocketPort(int socketPort) {
+ this.socketPort = socketPort;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage.java
index d85229c..c405333 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage.java
@@ -3,13 +3,15 @@ package com.gemstone.gemfire.distributed.internal.membership.gms.messages;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import com.gemstone.gemfire.DataSerializer;
import com.gemstone.gemfire.distributed.internal.DistributionManager;
import com.gemstone.gemfire.distributed.internal.HighPriorityDistributionMessage;
import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
import com.gemstone.gemfire.distributed.internal.membership.NetView;
-import com.gemstone.gemfire.internal.DataSerializableFixedID;
+import com.gemstone.gemfire.internal.InternalDataSerializer;
import com.gemstone.gemfire.internal.Version;
public class JoinResponseMessage extends HighPriorityDistributionMessage {
@@ -19,6 +21,7 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage {
private InternalDistributedMember memberID;
private Object messengerData;
private boolean becomeCoordinator;
+ private List<Integer> portsForMembers = new ArrayList<Integer>();
public JoinResponseMessage(InternalDistributedMember memberID, NetView view) {
this.currentView = view;
@@ -74,6 +77,7 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage {
public String toString() {
return getShortClassName() + "("+memberID + "; "
+ (currentView==null? "" : currentView.toString())
+ + "portsForMembers: " + portsForMembers
+ (rejectionMessage==null? "" : ("; "+rejectionMessage))
+ (becomeCoordinator? "; becomeCoordinator" : "")
+ ")";
@@ -89,10 +93,27 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage {
return JOIN_RESPONSE;
}
+ /** this will deserialize as an ArrayList */
+ private void writeAsArrayList(List list, DataOutput out) throws IOException {
+ int size;
+ if (list == null) {
+ size = -1;
+ } else {
+ size = list.size();
+ }
+ InternalDataSerializer.writeArrayLength(size, out);
+ if (size > 0) {
+ for (int i = 0; i < size; i++) {
+ DataSerializer.writeObject(list.get(i), out);
+ }
+ }
+ }
+
@Override
public void toData(DataOutput out) throws IOException {
DataSerializer.writeObject(currentView, out);
DataSerializer.writeObject(memberID, out);
+ writeAsArrayList(portsForMembers, out);
out.writeBoolean(becomeCoordinator);
DataSerializer.writeString(rejectionMessage, out);
DataSerializer.writeObject(messengerData, out);
@@ -102,9 +123,17 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage {
public void fromData(DataInput in) throws IOException, ClassNotFoundException {
currentView = DataSerializer.readObject(in);
memberID = DataSerializer.readObject(in);
+ portsForMembers = DataSerializer.readArrayList(in);
becomeCoordinator = in.readBoolean();
rejectionMessage = DataSerializer.readString(in);
messengerData = DataSerializer.readObject(in);
}
+ public void setPortsForMembers(List<Integer> portsForMembers) {
+ this.portsForMembers = portsForMembers;
+ }
+
+ public List<Integer> getPortsForMembers() {
+ return this.portsForMembers;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSHealthMonitorJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSHealthMonitorJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSHealthMonitorJUnitTest.java
index ae77b81..cf95817 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSHealthMonitorJUnitTest.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSHealthMonitorJUnitTest.java
@@ -46,9 +46,11 @@ public class GMSHealthMonitorJUnitTest {
private GMSJoinLeave joinLeave;
private GMSHealthMonitor gmsHealthMonitor;
final long memberTimeout = 1000l;
+ private int[] portRange= new int[]{0, 65535};
@Before
public void initMocks() throws UnknownHostException {
+ System.setProperty("gemfire.bind-address", "localhost");
mockDistConfig = mock(DistributionConfig.class);
mockConfig = mock(ServiceConfig.class);
messenger = mock(Messenger.class);
@@ -58,11 +60,13 @@ public class GMSHealthMonitorJUnitTest {
when(mockConfig.getDistributionConfig()).thenReturn(mockDistConfig);
when(mockConfig.getMemberTimeout()).thenReturn(memberTimeout);
+ when(mockConfig.getMembershipPortRange()).thenReturn(portRange);
when(services.getConfig()).thenReturn(mockConfig);
when(services.getMessenger()).thenReturn(messenger);
when(services.getJoinLeave()).thenReturn(joinLeave);
when(services.getCancelCriterion()).thenReturn(stopper);
when(stopper.isCancelInProgress()).thenReturn(false);
+
if (mockMembers == null) {
mockMembers = new ArrayList<InternalDistributedMember>();
@@ -76,7 +80,7 @@ public class GMSHealthMonitorJUnitTest {
mockMembers.add(mbr);
}
}
-
+ when(joinLeave.getMemberID()).thenReturn(mockMembers.get(3));
gmsHealthMonitor = new GMSHealthMonitor();
gmsHealthMonitor.init(services);
gmsHealthMonitor.start();
@@ -316,7 +320,7 @@ public class GMSHealthMonitorJUnitTest {
try {
// this happens after final check, ping timeout
- Thread.sleep(150l);
+ Thread.sleep(memberTimeout);
} catch (InterruptedException e) {
}
@@ -352,7 +356,7 @@ public class GMSHealthMonitorJUnitTest {
try {
// this happens after final check, ping timeout
- Thread.sleep(90l);
+ Thread.sleep(memberTimeout);
} catch (InterruptedException e) {
}
@@ -389,8 +393,8 @@ public class GMSHealthMonitorJUnitTest {
gmsHealthMonitor.processMessage(sm);
try {
- // this happens after final check, ping timeout = 100 ms
- Thread.sleep(110l);
+ // this happens after final check, ping timeout = 1000 ms
+ Thread.sleep(memberTimeout);
} catch (InterruptedException e) {
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt
index 7210d9e..874069d 100644
--- a/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt
+++ b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt
@@ -373,16 +373,16 @@ fromData,11,2a2bb9000e0100b50002b1
toData,11,2b2ab40002b9000d0200b1
com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage,2
-fromData,35,2a2bb7000b2a2bb8000cc0000db500022a2bb8000cb500042a2bb9000e0100b50003b1
-toData,32,2a2bb700082ab400022bb800092ab400042bb800092b2ab40003b9000a0200b1
+fromData,43,2a2bb700122a2bb80013c00014b500052a2bb80013b500072a2bb900150100b500062a2bb80016b50004b1
+toData,41,2a2bb7000f2ab400052bb8000e2ab400072bb8000e2b2ab40006b9001002002a2ab400042bb70011b1
com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage,2
-fromData,30,2a2bb80014c00015b500032a2bb80014b500042a2bb900160100b60017b1
-toData,27,2ab400032bb800112ab400042bb800112b2ab60012b900130200b1
+fromData,38,2a2bb80018c00019b500042a2bb80018b500052a2bb8001ab500022a2bb9001b0100b6001cb1
+toData,35,2ab400042bb800142ab400052bb800142ab400022bb800152b2ab60016b900170200b1
com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage,2
-fromData,49,2a2bb8001ac0001bb500022a2bb8001ac0001cb500032a2bb9001d0100b500052a2bb8001eb500062a2bb8001ab50007b1
-toData,43,2ab400022bb800172ab400032bb800172b2ab40005b9001802002ab400062bb800192ab400072bb80017b1
+fromData,57,2a2bb80022c00023b500052a2bb80022c00024b500062a2bb80025b500042a2bb900260100b500082a2bb80027b500092a2bb80022b5000ab1
+toData,52,2ab400052bb8001e2ab400062bb8001e2a2ab400042bb7001f2b2ab40008b9002002002ab400092bb800212ab4000a2bb8001eb1
com/gemstone/gemfire/distributed/internal/membership/gms/messages/LeaveRequestMessage,2
fromData,20,2a2bb8000bc0000cb500032a2bb8000db50004b1
@@ -400,10 +400,6 @@ com/gemstone/gemfire/distributed/internal/membership/gms/messages/ViewAckMessage
fromData,37,2a2bb7000d2a2bb9000e0100b500032a2bb9000f0100b500042a2bb80010c00011b50005b1
toData,34,2a2bb700092b2ab40003b9000a02002b2ab40004b9000b02002ab400052bb8000cb1
-com/gemstone/gemfire/distributed/internal/membership/gms/mgr/FakeViewMessage,2
-fromData,8,bb000759b70008bf
-toData,8,bb000759b70008bf
-
com/gemstone/gemfire/distributed/internal/membership/gms/mgr/LocalViewMessage,2
fromData,8,bb000759b70008bf
toData,8,bb000759b70008bf
@@ -899,8 +895,8 @@ fromData,1,b1
toData,1,b1
com/gemstone/gemfire/internal/cache/AbstractRegion,2
-toData,6,2a2bb80188b1
-fromData,8,bb018959b7018abf
+toData,6,2a2bb8017cb1
+fromData,8,bb017d59b7017ebf
com/gemstone/gemfire/internal/cache/AbstractUpdateOperation$AbstractUpdateMessage,2
fromData,16,2a2bb700192a2bb9001a0100b5000db1
@@ -910,14 +906,6 @@ com/gemstone/gemfire/internal/cache/AddCacheServerProfileMessage,2
fromData,16,2a2bb7002f2a2bb900300100b50007b1
toData,16,2a2bb7002d2b2ab40007b9002e0200b1
-com/gemstone/gemfire/internal/cache/ClientRegionEventImpl,2
-fromData,14,2a2bb700132a2bb80014b60003b1
-toData,14,2a2bb700112ab6000d2bb80012b1
-
-com/gemstone/gemfire/internal/cache/CacheServerAdvisor$CacheServerProfile,2
-fromData,53,2a2bb700102a2bb80011b500042a2bb900120100b500062abb001359b70014b500052ab400052bb800152a2bb900160100b60017b1
-toData,42,2a2bb7000a2ab400042bb8000b2b2ab40006b9000c02002ab400052bb8000d2b2ab6000eb9000f0300b1
-
com/gemstone/gemfire/internal/cache/BucketAdvisor$BucketProfile,2
fromData,36,2a2bb700132a2bb900140100b500042a2bb900140100b500062a2bb900140100b50012b1
toData,36,2a2bb700152b2ab40004b9001602002b2ab40006b9001602002b2ab40012b900160200b1
@@ -938,6 +926,14 @@ com/gemstone/gemfire/internal/cache/CacheDistributionAdvisor$CacheProfile,2
fromData,94,2a2bb700622bb9006301003d2a1cb6001b2a1cb700649900162abb006559b70066b500262ab400262bb800672a1cb7006899000e2a2bb80069c0006ab5000d2a1cb7006b99000e2a2bb80069c0006ab5000e2a2bb80069c0006cb50016b1
toData,81,2a2bb7005b2b2ab6001ab9005c02002ab40026c6000b2ab400262bb8005d2ab4000db9002c01009a000c2a2ab4000d2bb7005e2ab4000eb9002c01009a000c2a2ab4000e2bb7005e2ab400162bb8005fb1
+com/gemstone/gemfire/internal/cache/CacheServerAdvisor$CacheServerProfile,2
+fromData,53,2a2bb700102a2bb80011b500042a2bb900120100b500062abb001359b70014b500052ab400052bb800152a2bb900160100b60017b1
+toData,42,2a2bb7000a2ab400042bb8000b2b2ab40006b9000c02002ab400052bb8000d2b2ab6000eb9000f0300b1
+
+com/gemstone/gemfire/internal/cache/ClientRegionEventImpl,2
+fromData,14,2a2bb700132a2bb80014b60003b1
+toData,14,2a2bb700112ab6000d2bb80012b1
+
com/gemstone/gemfire/internal/cache/CloseCacheMessage,2
fromData,16,2a2bb700172a2bb900180100b50002b1
toData,16,2a2bb700192b2ab40002b9001a0200b1
@@ -1308,7 +1304,7 @@ fromData,242,2a2bb700712a2bb80072b600732bb9007401003d2a1cb200757e91b500042a2bb80
toData,252,2a03b500082a2bb700892ab6008a2bb8008b2ab400043d2ab40024c600091cb20079803d2ab4007cc600091cb2007b803d2ab4002bc600091cb20086803d2b1cb9008c02002ab6008d2bb8008b2b2ab40020b9008e03002b2ab40022b4008fb9008c02002ab40024c6000b2ab400242bb8008b2ab4007cc6000b2ab4007c2bb8008b2ab400262bb800902ab4000ec6000b2ab4000e2bb8008b2ab4000799002a2b2ab4000599000704a7000403b9008c02002ab40005b800913e1d2ab700922ab600932bb800942ab400042ab4006f2ab600952bb800942ab4000bb60096c6000e2ab4000bb600962bb800972ab4002bc6000b2ab4002b2bb8008bb1
com/gemstone/gemfire/internal/cache/RemotePutMessage$PutReplyMessage,2
-fromData,81,2a2bb700272bb9002801001100ff7e913d2a1c047e99000704a7000403b500032a2bb900280100b80029b500022a2bb8002ab500061c057e9900181c077e99000704a70004033e2a1d2bb8002bb50007b1
+fromData,81,2a2bb700252bb9002601001100ff7e913d2a1c047e99000704a7000403b500032a2bb900260100b80027b500022a2bb80028b500061c057e9900181c077e99000704a70004033e2a1d2bb80029b50007b1
toData,94,2a2bb70032033d2ab400039900081c0480913d2ab40007c600081c0580913d2ab40007c100339900081c0780913d2b1cb9003402002b2ab40002b40035b9003402002b2ab600362ab40037b800382ab40007c6000b2ab400072bb80039b1
com/gemstone/gemfire/internal/cache/RemoteRegionOperation,2
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
index 6b10ea1..3e30605 100644
--- a/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
+++ b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
@@ -218,6 +218,7 @@ com/gemstone/gemfire/cache/query/internal/utils/PDXUtils$1,false
com/gemstone/gemfire/cache/query/internal/utils/PDXUtils$2,false
com/gemstone/gemfire/cache/snapshot/SnapshotOptions$SnapshotFormat,false
com/gemstone/gemfire/cache/util/BoundedLinkedHashMap,true,-3419897166186852692,_maximumNumberOfEntries:int
+com/gemstone/gemfire/cache/util/Gateway$OrderPolicy,false
com/gemstone/gemfire/cache/wan/GatewaySender$OrderPolicy,false
com/gemstone/gemfire/compression/CompressionException,true,4118639654597191235
com/gemstone/gemfire/compression/SnappyCompressor,true,496609875302446099
@@ -830,9 +831,5 @@ com/gemstone/gemfire/security/AuthenticationFailedException,true,-82028664722790
com/gemstone/gemfire/security/AuthenticationRequiredException,true,4675976651103154919
com/gemstone/gemfire/security/GemFireSecurityException,true,3814254578203076926
com/gemstone/gemfire/security/NotAuthorizedException,true,419215768216387745,principal:java/security/Principal
-com/gemstone/java/util/concurrent/SynchronousQueueNoSpin,true,-3223113410248163686,qlock:java/util/concurrent/locks/ReentrantLock,waitingConsumers:com/gemstone/java/util/concurrent/SynchronousQueueNoSpin$WaitQueue,waitingProducers:com/gemstone/java/util/concurrent/SynchronousQueueNoSpin$WaitQueue
-com/gemstone/java/util/concurrent/SynchronousQueueNoSpin$FifoWaitQueue,true,-3623113410248163686
-com/gemstone/java/util/concurrent/SynchronousQueueNoSpin$LifoWaitQueue,true,-3633113410248163686
-com/gemstone/java/util/concurrent/SynchronousQueueNoSpin$WaitQueue,true,423369940180943459
com/gemstone/org/apache/logging/log4j/message/GemFireParameterizedMessage,true,-665975803997290697,messagePattern:java/lang/String,stringArgs:java/lang/String[]
com/gemstone/org/apache/logging/log4j/message/GemFireParameterizedMessageFactory,true,1