On 13 Dec 2017 12:30, "Jiri Danek" <[email protected]> wrote:

On Wed, Dec 13, 2017 at 10:25 AM, Jiri Danek <[email protected]> wrote:

> On Mon, Dec 11, 2017 at 7:21 PM, Robbie Gemmell <[email protected]>
> wrote:
>
>> P.S. If you want to test it out using maven (e.g with the examples src,
or
>> your own things), you can temporarily add this to your poms to access the
>> staging repo:
>>
>>   <repositories>
>>     <repository>
>>       <id>staging</id>
>>       <url>https://repository.apache.org/content/repositories/
>> orgapacheqpid-1126</url>
>>     </repository>
>>   </repositories>
>>
>> The dependency for the client itself would then be:
>>
>>   <dependency>
>>     <groupId>org.apache.qpid</groupId>
>>     <artifactId>qpid-jms-client</artifactId>
>>     <version>0.28.0</version>
>>   </dependency>
>>
>
> +1 (nonbinding)
>
> - On Linux x64, Oracle Java 9.0.1, I've used the Maven repo, pasted it
> into https://github.com/rh-messaging/cli-java 's pom.xml and executed the
> tests there against apache-artemis-2.5.0-20171201.193741-38-bin snapshot
> of ActiveMQ Artemis. All passed.
> --
> Jiri Daněk
>

I think I may actually have experienced a problem with 0.28 that does not
happen with 0.27 for me. I would like to investigate this further, but it
would be probably more productive to get your opinion on what you think
could be going on.

# Steps to reproduce (to get to the broker exception at the end of the
steps)

1. Download artemis 2.4.0 (same result with snapshot
apache-artemis-2.5.0-20171201.193741-38-bin, but not with
apache-artemis-2.5.0-20171212.154553-51-bin)

2. Create instance that accepts anonymous connections (no auth). Change the
configuration of the broker like this

{code}
diff --git a/artemis.profile b/artemis.profile
index 162b269..cb9bdab 100644
--- a/artemis.profile
+++ b/artemis.profile
@@ -28,7 +28,7 @@
ARTEMIS_INSTANCE_URI='file:/home/jdanek/Downloads/AMQ7/
apache-artemis-2.5.0/apac


 # Java Opts
-JAVA_ARGS=" -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+AggressiveOpts
-XX:+UseFastAccessorMethods -Xms512M -Xmx2G -Dhawtio.realm=activemq
-Dhawtio.offline="true" -Dhawtio.role=amq
-Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.
spi.core.security.jaas.RolePrincipal
-Djolokia.policyLocation=${ARTEMIS_INSTANCE_URI}/etc/jolokia-access.xml"
+JAVA_ARGS=" --add-modules java.xml.bind -XX:+PrintClassHistogram
-XX:+UseG1GC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M
-Xmx2G -Dhawtio.realm=activemq  -Dhawtio.offline="true" -Dhawtio.role=amq
-Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.
spi.core.security.jaas.RolePrincipal
-Djolokia.policyLocation=${ARTEMIS_INSTANCE_URI}/etc/jolokia-access.xml"

 #
 # There might be options that you only want to enable on specifc commands,
like setting a JMX port
diff --git a/broker.xml b/broker.xml
index 36037ce..8faa2df 100644
--- a/broker.xml
+++ b/broker.xml
@@ -180,6 +180,7 @@ under the License.
          </address-setting>
          <!--default for catch all-->
          <address-setting match="#">
+            <last-value-queue>true</last-value-queue>
             <dead-letter-address>DLQ</dead-letter-address>
             <expiry-address>ExpiryQueue</expiry-address>
             <redelivery-delay>0</redelivery-delay>
{code}

3. Execute the following

java -jar cli-qpid-jms-1.2.2-SNAPSHOT-0.27.0.jar sender --broker amqp://
127.0.0.1:5672 --address lalaLand_hvf5lgis5rkosau9ha2mbusvav
--tx-endloop-action commit --tx-action commit --sync-mode persistent
--ssn-ack-mode client --msg-id noid --log-lib aLogLibValue --duration-mode
after-send --msg-property key=value --msg-content %d --log-msgs interop
--capacity 1 --conn-async-send true --conn-auth-mechanisms anonymous
--conn-auth-sasl false --conn-clientid aClientId --conn-clientid-prefix
aClientIdPrefix --conn-close-timeout 1000 --conn-conn-timeout 1000
--conn-connid-prefix aConnIdPrefix --conn-heartbeat 1000
--conn-local-msg-priority true --conn-max-frame-size 4096 --conn-prefetch 1
--conn-prefetch-browser 1 --conn-prefetch-queue 1 --conn-prefetch-topic 1
--conn-prefetch-topic-dur 1 --conn-queue-prefix aQueuePrefix
--conn-reconnect true --conn-reconnect-backoff false
--conn-reconnect-backoff-multiplier 1 --conn-reconnect-initial-delay 1
--conn-reconnect-interval 1000 --conn-reconnect-limit 1000
--conn-reconnect-start-limit 1000 --conn-reconnect-timeout 1000
--conn-reconnect-warn-attempts 1 --conn-redeliveries-max 1
--conn-tcp-buf-size-recv 1 --conn-tcp-buf-size-send 1
--conn-tcp-conn-timeout 1000 --conn-tcp-keep-alive true --conn-tcp-no-delay
false --conn-tcp-sock-timeout 1000 --conn-tcp-traffic-class 1
--conn-topic-prefix aTopicPrefix --conn-valid-prop-names false
--msg-content-type aMsgContentType --msg-correlation-id aCorrelationId
--msg-durable false --msg-group-id aMsgGroupId --msg-group-seq -1
--msg-no-timestamp true --msg-priority 1 --timeout 2 --tx-size 1
--msg-reply-to aReplyToQueue --msg-reply-to-group-id aReplyToGroupId
--msg-subject aMsgSubject --msg-ttl 10000 --msg-user-id aMsgUserId
--property-type String

(This can surely be simplified to a single java test that will reproduce
this, did not get to creating it yet)

4. Wait for up to a minute, then observe error in the broker log

13:08:02,952 WARN  [org.apache.activemq.artemis.core.server] AMQ222238:
Unable to commit transaction: org.apache.qpid.proton.codec.DecodeException:
Unknown constructor
        at
org.apache.qpid.proton.codec.DecoderImpl.readObject(DecoderImpl.java:883)
[proton-j-0.22.0.jar:]
        at
org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage.
getApplicationProperties(AMQPMessage.java:179)
[artemis-amqp-protocol-2.4.0.jar:]
        at
org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage.
getApplicationPropertiesMap(AMQPMessage.java:157)
[artemis-amqp-protocol-2.4.0.jar:]
        at
org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage.
getSimpleStringProperty(AMQPMessage.java:979)
[artemis-amqp-protocol-2.4.0.jar:]
        at
org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage.
getLastValueProperty(AMQPMessage.java:1086)
[artemis-amqp-protocol-2.4.0.jar:]
        at
org.apache.activemq.artemis.core.server.impl.LastValueQueue.addTail(
LastValueQueue.java:80)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.core.postoffice.impl.
PostOfficeImpl$AddOperation.afterCommit(PostOfficeImpl.java:1407)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.core.transaction.impl.
TransactionImpl.afterCommit(TransactionImpl.java:546)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.core.transaction.impl.
TransactionImpl.access$100(TransactionImpl.java:38)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.core.transaction.impl.TransactionImpl$2.done(
TransactionImpl.java:304)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.core.persistence.impl.journal.
OperationContextImpl.executeOnCompletion(OperationContextImpl.java:181)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.core.persistence.impl.journal.
OperationContextImpl.executeOnCompletion(OperationContextImpl.java:130)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.core.persistence.impl.journal.
AbstractJournalStorageManager.afterCompleteOperations(
AbstractJournalStorageManager.java:319)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.core.transaction.impl.TransactionImpl.commit(
TransactionImpl.java:295)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.core.transaction.impl.TransactionImpl.commit(
TransactionImpl.java:246)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.core.server.impl.QueueImpl$
ExpiryScanner.run(QueueImpl.java:1693)
[artemis-server-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.utils.actors.OrderedExecutor.
doTask(OrderedExecutor.java:42)
[artemis-commons-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.utils.actors.OrderedExecutor.
doTask(OrderedExecutor.java:31)
[artemis-commons-2.4.0.jar:2.4.0]
        at
org.apache.activemq.artemis.utils.actors.ProcessorBase$ExecutorTask.run(
ProcessorBase.java:53)
[artemis-commons-2.4.0.jar:2.4.0]
        at
java.base/java.util.concurrent.ThreadPoolExecutor.
runWorker(ThreadPoolExecutor.java:1167)
[java.base:]
        at
java.base/java.util.concurrent.ThreadPoolExecutor$
Worker.run(ThreadPoolExecutor.java:641)
[java.base:]
        at java.base/java.lang.Thread.run(Thread.java:844) [java.base:]


--
Jiri Daněk


If you can't reproduce with a current snapshot of the broker it seems as
likely as anything that its a broker issue which has been fixed, and
perhaps the newer client is better at showing it up due to timing
differences as its a bit faster. Capturing the traffic on the wire from the
client might help show if there's an actual issue there though. I'm away
just now and won't have a chance to look into this until late tomorrow or
Friday.

Robbie

Reply via email to