You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2014/07/21 17:41:27 UTC
svn commit: r1612321 - in /qpid/trunk/qpid/java/bdbstore/src:
main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/
test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/
Author: orudyy
Date: Mon Jul 21 15:41:27 2014
New Revision: 1612321
URL: http://svn.apache.org/r1612321
Log:
QPID-5891: Add operational logging for the cases when remote node becomes detached or attached
Modified:
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeOperationalLoggingTest.java
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java
Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java?rev=1612321&r1=1612320&r2=1612321&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHARemoteReplicationNodeImpl.java Mon Jul 21 15:41:27 2014
@@ -59,6 +59,7 @@ public class BDBHARemoteReplicationNodeI
private final AtomicReference<State> _state;
private final boolean _isMonitor;
+ private boolean _detached;
public BDBHARemoteReplicationNodeImpl(BDBHAVirtualHostNode<?> virtualHostNode, Map<String, Object> attributes, ReplicatedEnvironmentFacade replicatedEnvironmentFacade)
{
@@ -255,4 +256,14 @@ public class BDBHARemoteReplicationNodeI
boolean isActive = MASTER.name().equals(role) || REPLICA.name().equals(role);
_state.compareAndSet(currentState, isActive ? State.ACTIVE : State.UNAVAILABLE);
}
+
+ public boolean isDetached()
+ {
+ return _detached;
+ }
+
+ public void setDetached(boolean detached)
+ {
+ this._detached = detached;
+ }
}
Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java?rev=1612321&r1=1612320&r2=1612321&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java Mon Jul 21 15:41:27 2014
@@ -757,12 +757,22 @@ public class BDBHAVirtualHostNodeImpl ex
if (nodeState == null)
{
remoteNode.setRole(ReplicatedEnvironment.State.UNKNOWN.name());
+ if (!remoteNode.isDetached())
+ {
+ getEventLogger().message(getVirtualHostNodeLogSubject(), HighAvailabilityMessages.DETACHED(remoteNode.getName(), getGroupName()));
+ remoteNode.setDetached(true);
+ }
}
else
{
remoteNode.setJoinTime(nodeState.getJoinTime());
remoteNode.setLastTransactionId(nodeState.getCurrentTxnEndVLSN());
remoteNode.setRole(nodeState.getNodeState().name());
+ if (remoteNode.isDetached())
+ {
+ getEventLogger().message(getVirtualHostNodeLogSubject(), HighAvailabilityMessages.ATTACHED(remoteNode.getName(), getGroupName(), remoteNode.getRole() ));
+ remoteNode.setDetached(false);
+ }
}
String newRole = remoteNode.getRole();
Modified: qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeOperationalLoggingTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeOperationalLoggingTest.java?rev=1612321&r1=1612320&r2=1612321&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeOperationalLoggingTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeOperationalLoggingTest.java Mon Jul 21 15:41:27 2014
@@ -284,6 +284,86 @@ public class BDBHAVirtualHostNodeOperati
argThat(new LogMessageMatcher(expectedMessage, HighAvailabilityMessages.DELETED_LOG_HIERARCHY)));
}
+ public void testRemoteNodeDetached() throws Exception
+ {
+ int node1PortNumber = findFreePort();
+ String helperAddress = "localhost:" + node1PortNumber;
+ String groupName = "group";
+ String nodeName = "node1";
+
+ Map<String, Object> node1Attributes = _helper.createNodeAttributes(nodeName, groupName, helperAddress, helperAddress);
+ node1Attributes.put(BDBHAVirtualHostNode.DESIGNATED_PRIMARY, true);
+ BDBHAVirtualHostNodeImpl node1 = (BDBHAVirtualHostNodeImpl)_helper.createHaVHN(node1Attributes);
+ _helper.assertNodeRole(node1, "MASTER");
+
+ int node2PortNumber = getNextAvailable(node1PortNumber + 1);
+ Map<String, Object> node2Attributes = _helper.createNodeAttributes("node2", groupName, "localhost:" + node2PortNumber, helperAddress);
+ BDBHAVirtualHostNodeImpl node2 = (BDBHAVirtualHostNodeImpl)_helper.createHaVHN(node2Attributes);
+ _helper.awaitRemoteNodes(node1, 1);
+
+ reset(_eventLogger);
+
+ BDBHARemoteReplicationNodeImpl remoteNode = (BDBHARemoteReplicationNodeImpl)node1.getRemoteReplicationNodes().iterator().next();
+
+ // close remote node
+ node2.close();
+
+ waitForNodeDetachedField(remoteNode, true);
+
+ // verify that remaining node issues the DETACHED operational logging for remote node
+ String expectedMessage = HighAvailabilityMessages.DETACHED(node2.getName(), groupName).toString();
+ verify(_eventLogger).message(argThat(new LogSubjectMatcher(node1.getVirtualHostNodeLogSubject())),
+ argThat(new LogMessageMatcher(expectedMessage, HighAvailabilityMessages.DETACHED_LOG_HIERARCHY)));
+ }
+
+
+ public void testRemoteNodeReAttached() throws Exception
+ {
+ int node1PortNumber = findFreePort();
+ String helperAddress = "localhost:" + node1PortNumber;
+ String groupName = "group";
+ String nodeName = "node1";
+
+ Map<String, Object> node1Attributes = _helper.createNodeAttributes(nodeName, groupName, helperAddress, helperAddress);
+ node1Attributes.put(BDBHAVirtualHostNode.DESIGNATED_PRIMARY, true);
+ BDBHAVirtualHostNodeImpl node1 = (BDBHAVirtualHostNodeImpl)_helper.createHaVHN(node1Attributes);
+ _helper.assertNodeRole(node1, "MASTER");
+
+ int node2PortNumber = getNextAvailable(node1PortNumber + 1);
+ Map<String, Object> node2Attributes = _helper.createNodeAttributes("node2", groupName, "localhost:" + node2PortNumber, helperAddress);
+ BDBHAVirtualHostNodeImpl node2 = (BDBHAVirtualHostNodeImpl)_helper.createHaVHN(node2Attributes);
+ _helper.awaitRemoteNodes(node1, 1);
+
+ BDBHARemoteReplicationNodeImpl remoteNode = (BDBHARemoteReplicationNodeImpl)node1.getRemoteReplicationNodes().iterator().next();
+
+ // stop remote node
+ node2.stop();
+
+ waitForNodeDetachedField(remoteNode, true);
+
+ reset(_eventLogger);
+ resetEventLogger();
+
+ node2 = (BDBHAVirtualHostNodeImpl)_helper.recoverHaVHN(node2.getId(), node2Attributes);
+ _helper.assertNodeRole(node2, "REPLICA");
+
+ waitForNodeDetachedField(remoteNode, false);
+
+ // verify that remaining node issues the ATTACHED operational logging for remote node
+ String expectedMessage = HighAvailabilityMessages.ATTACHED(node2.getName(), groupName, "REPLICA").toString();
+ verify(_eventLogger).message(argThat(new LogSubjectMatcher(node1.getVirtualHostNodeLogSubject())),
+ argThat(new LogMessageMatcher(expectedMessage, HighAvailabilityMessages.ATTACHED_LOG_HIERARCHY)));
+ }
+
+ private void waitForNodeDetachedField(BDBHARemoteReplicationNodeImpl remoteNode, boolean expectedDetached) throws InterruptedException {
+ int counter = 0;
+ while (expectedDetached != remoteNode.isDetached() && counter<50)
+ {
+ Thread.sleep(100);
+ counter++;
+ }
+ }
+
private EventLogger resetEventLogger()
{
EventLogger eventLogger = mock(EventLogger.class);
Modified: qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java?rev=1612321&r1=1612320&r2=1612321&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeTestHelper.java Mon Jul 21 15:41:27 2014
@@ -45,6 +45,9 @@ import org.apache.qpid.server.model.Conf
import org.apache.qpid.server.model.RemoteReplicationNode;
import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.store.ConfiguredObjectRecord;
+import org.apache.qpid.server.store.ConfiguredObjectRecordImpl;
+import org.apache.qpid.server.store.UnresolvedConfiguredObject;
import org.apache.qpid.server.util.BrokerTestHelper;
import org.apache.qpid.test.utils.QpidTestCase;
import org.apache.qpid.util.FileUtils;
@@ -194,6 +197,20 @@ public class BDBHAVirtualHostNodeTestHel
return node;
}
+ public BDBHAVirtualHostNode<?> recoverHaVHN(UUID id, Map<String, Object> attributes)
+ {
+ Map<String,ConfiguredObjectRecord> parents = new HashMap<>();
+ parents.put(Broker.class.getSimpleName(),new ConfiguredObjectRecordImpl(_broker.getId(), Broker.class.getSimpleName(), Collections.<String, Object>singletonMap(Broker.NAME, _broker.getName()) ));
+ ConfiguredObjectRecordImpl record = new ConfiguredObjectRecordImpl(id, VirtualHostNode.class.getSimpleName(), attributes, parents );
+
+ @SuppressWarnings("unchecked")
+ UnresolvedConfiguredObject<BDBHAVirtualHostNodeImpl> unresolved = _objectFactory.recover(record, _broker);
+ BDBHAVirtualHostNode<?> node = unresolved.resolve();
+ node.open();
+ _nodes.add(node);
+ return node;
+ }
+
public void assertNodeRole(BDBHAVirtualHostNode<?> node, String... roleName) throws InterruptedException
{
int iterationCounter = 0;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org