You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2017/10/10 16:36:15 UTC
[1/2] activemq-artemis git commit: ARTEMIS-1227 Internal properties
not removed from messages
Repository: activemq-artemis
Updated Branches:
refs/heads/master 964cbcad0 -> 7074f819c
ARTEMIS-1227 Internal properties not removed from messages
In a cluster if a node is shut down (or crashed) when a
message is being routed to a remote binding, a internal
property may be added to the message and persisted. The
name of the property is like _AMQ_ROUTE_TOsf.my-cluster*.
if the node starts back, it will load and reroute this message
and if it goes to a local consumer, this property won't
get removed and goes to the client.
The fix is to remove this internal property before it
is sent to any client.
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/312d53d5
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/312d53d5
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/312d53d5
Branch: refs/heads/master
Commit: 312d53d5abe7949f554a00bcf6e7f0dc2c44507e
Parents: 964cbca
Author: Howard Gao <ho...@gmail.com>
Authored: Tue Oct 10 09:14:32 2017 +0800
Committer: Howard Gao <ho...@gmail.com>
Committed: Tue Oct 10 09:15:45 2017 +0800
----------------------------------------------------------------------
.../activemq/artemis/reader/MessageUtil.java | 3 +-
.../jms/cluster/TopicClusterTest.java | 90 ++++++++++++++++++++
2 files changed, 92 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/312d53d5/artemis-core-client/src/main/java/org/apache/activemq/artemis/reader/MessageUtil.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/reader/MessageUtil.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/reader/MessageUtil.java
index 9d37cd3..2660f96 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/reader/MessageUtil.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/reader/MessageUtil.java
@@ -147,7 +147,8 @@ public class MessageUtil {
for (SimpleString propName : message.getPropertyNames()) {
if ((!propName.startsWith(JMS) || propName.startsWith(JMSX) ||
- propName.startsWith(JMS_)) && !propName.startsWith(CONNECTION_ID_PROPERTY_NAME) && !propName.equals(Message.HDR_ROUTING_TYPE)) {
+ propName.startsWith(JMS_)) && !propName.startsWith(CONNECTION_ID_PROPERTY_NAME) && !propName.equals(Message.HDR_ROUTING_TYPE) &&
+ !propName.startsWith(Message.HDR_ROUTE_TO_IDS)) {
set.add(propName.toString());
}
}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/312d53d5/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/TopicClusterTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/TopicClusterTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/TopicClusterTest.java
index 2b9dd6f..00533da 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/TopicClusterTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/TopicClusterTest.java
@@ -18,15 +18,22 @@ package org.apache.activemq.artemis.tests.integration.jms.cluster;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
+import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
+import org.apache.activemq.artemis.api.core.SimpleString;
+import org.apache.activemq.artemis.api.core.client.ClientMessage;
+import org.apache.activemq.artemis.jms.client.ActiveMQMessage;
import org.apache.activemq.artemis.tests.util.JMSClusteredTestBase;
import org.junit.Test;
+import java.util.Enumeration;
+import java.util.Set;
+
public class TopicClusterTest extends JMSClusteredTestBase {
// TODO: required to match cluster-connection
@@ -95,6 +102,89 @@ public class TopicClusterTest extends JMSClusteredTestBase {
}
+ @Test
+ public void testInternalPropertyNotExposed() throws Exception {
+ Connection conn1 = cf1.createConnection();
+
+ conn1.setClientID("someClient1");
+
+ Connection conn2 = cf2.createConnection();
+
+ conn2.setClientID("someClient2");
+
+ conn1.start();
+
+ conn2.start();
+
+ try {
+
+ Topic topic1 = createTopic(TOPIC, true);
+
+ Session session1 = conn1.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ Session session2 = conn2.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ MessageProducer prod1 = session1.createProducer(topic1);
+ prod1.setDeliveryMode(DeliveryMode.PERSISTENT);
+
+ MessageConsumer cons1 = session1.createDurableSubscriber(topic1, "sub1");
+ MessageConsumer cons2 = session2.createDurableSubscriber(topic1, "sub2");
+
+ waitForBindings(server1, TOPIC, true, 1, 1, 2000);
+ waitForBindings(server2, TOPIC, true, 1, 1, 2000);
+ waitForBindings(server1, TOPIC, false, 1, 1, 2000);
+ waitForBindings(server2, TOPIC, false, 1, 1, 2000);
+ final int num = 1;
+ for (int i = 0; i < num; i++) {
+ prod1.send(session1.createTextMessage("someMessage" + i));
+ }
+
+ for (int i = 0; i < num; i++) {
+ TextMessage m2 = (TextMessage)cons2.receive(5000);
+ assertNotNull(m2);
+ TextMessage m1 = (TextMessage)cons1.receive(5000);
+ assertNotNull(m1);
+ checkInternalProperty(m1, m2);
+ }
+
+ } finally {
+ conn1.close();
+ conn2.close();
+
+ jmsServer1.destroyTopic(TOPIC);
+ jmsServer2.destroyTopic(TOPIC);
+ }
+ }
+
+ //check that the internal property is in the core
+ //but didn't exposed to jms
+ private void checkInternalProperty(Message... msgs) throws Exception {
+ boolean checked = false;
+ for (Message m : msgs) {
+ ActiveMQMessage hqMessage = (ActiveMQMessage) m;
+ ClientMessage coreMessage = hqMessage.getCoreMessage();
+ Set<SimpleString> coreProps = coreMessage.getPropertyNames();
+ System.out.println("core props: " + coreProps);
+ boolean exist = false;
+ for (SimpleString prop : coreProps) {
+ if (prop.startsWith(org.apache.activemq.artemis.api.core.Message.HDR_ROUTE_TO_IDS)) {
+ exist = true;
+ break;
+ }
+ }
+
+ if (exist) {
+ Enumeration enumProps = m.getPropertyNames();
+ while (enumProps.hasMoreElements()) {
+ String propName = (String) enumProps.nextElement();
+ assertFalse("Shouldn't be in jms property: " + propName, propName.startsWith(org.apache.activemq.artemis.api.core.Message.HDR_ROUTE_TO_IDS.toString()));
+ }
+ checked = true;
+ }
+ }
+ assertTrue(checked);
+ }
+
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
[2/2] activemq-artemis git commit: This closes #1581
Posted by cl...@apache.org.
This closes #1581
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/7074f819
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/7074f819
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/7074f819
Branch: refs/heads/master
Commit: 7074f819ca089154e504507ae0bf900783972460
Parents: 964cbca 312d53d
Author: Clebert Suconic <cl...@apache.org>
Authored: Tue Oct 10 12:36:01 2017 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Tue Oct 10 12:36:01 2017 -0400
----------------------------------------------------------------------
.../activemq/artemis/reader/MessageUtil.java | 3 +-
.../jms/cluster/TopicClusterTest.java | 90 ++++++++++++++++++++
2 files changed, 92 insertions(+), 1 deletion(-)
----------------------------------------------------------------------