activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Arthur Naseef (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AMQ-3166) client calls to createProducer() and send() successful even though BrokerFilter methods throw exceptions
Date Fri, 07 Mar 2014 14:54:43 GMT

    [ https://issues.apache.org/jira/browse/AMQ-3166?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13923932#comment-13923932
] 

Arthur Naseef commented on AMQ-3166:
------------------------------------

Doing a quick test, I found {{alwaysSyncSend}} on the connection drops performance for message
production.

In fact, the benefit of using a transaction for faster throughput appears to be eliminated.

Here's the test and results.  Note that increasing transaction sizes improves throughput in
the async-case (desirable) but not the sync case.

*Test*
{noformat}
# Transacted async send of 1000 persistent messages with 100 messages per transaction to queue
asn.test
echo "=== TRANSACTED ASYNC SEND ==="
time javarun Flood -t -m 1000 -o 250 -c 100 -u 'tcp://localhost:61616' queue asn.test

# Transacted sync send of 1000 persistent messages with 100 messages per transaction to queue
asn.test
echo
echo "=== TRANSACTED SYNC SEND ==="
time javarun Flood -t -m 1000 -o 250 -c 100 -u 'tcp://localhost:61616?jms.alwaysSyncSend=true'
queue asn.test

# Non-transacted send of 1000 persistent messages to queue asn.test
echo
echo "=== NON-TRANSACTED SEND ==="
time javarun Flood -m 1000 -o 250 -u 'tcp://localhost:61616' queue asn.test
{noformat}

*Results*
{noformat}
=== TRANSACTED ASYNC SEND ===
log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator).
log4j:WARN Please initialize the log4j system properly.
Set producer window size to 0
Running Producer
250
500
750
1000
Producer Terminating

real    0m0.927s
user    0m0.030s
sys     0m0.060s

=== TRANSACTED SYNC SEND ===
log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator).
log4j:WARN Please initialize the log4j system properly.
Set producer window size to 0
Running Producer
250
500
750
1000
Producer Terminating

real    0m2.403s
user    0m0.015s
sys     0m0.061s

=== NON-TRANSACTED SEND ===
log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator).
log4j:WARN Please initialize the log4j system properly.
Set producer window size to 0
Running Producer
250
500
750
1000
Producer Terminating

real    0m2.508s
user    0m0.015s
sys     0m0.045s
{noformat}


Based on this, I won't force all transacted sends to be synchronous.

> client calls to createProducer() and send() successful even though BrokerFilter methods
throw exceptions
> --------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-3166
>                 URL: https://issues.apache.org/jira/browse/AMQ-3166
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker, JMS client
>    Affects Versions: 5.4.2, 5.5.0
>            Reporter: Arthur Naseef
>            Assignee: Arthur Naseef
>         Attachments: AMQ3166Test.java, AMQ3166Test.java, FailedTransactionTracking.java,
FailedTransactionTrackingPlugin.java
>
>
> Client calls to createProducer() always return without an error even though a BrokerFilter's
addProducer() method throws an exception on the request. In contrast, createConsumer() throws
an exception, as expected, when BrokerFilter's addConsumer() throws an exception.
> Clients using transacted sessions always return successfully from send() when a BrokerFilter's
send() method throws an exception.
> Below is a broker configuration file using <authorizationPlugin> to illustrate
the problem.
> To reproduce the problem With this configuration, a test client only needs to connect
with user = "user" and password = "password", and then attempt to produce messages with a
transacted session to any queue other than ABC (e.g. DEF).
> Tracing the cause of the issue has lead to finding that the client code for creating
a producer uses an Async send for the producer information.  The analogous code for consumers
uses a Sync send.
> I will work on a patch.  It would be very helpful to have feedback on the operation of
the bus and the best way to resolve this problem.  Based on my research, it seems that createProducer()
should be using a Sync send in place of the Async one.  Not yet sure about send().  Another
possibility is to move the security operations to earlier in the internal broker flow.
> === SAMPLE BROKER XML ===
> <beans
>   xmlns="http://www.springframework.org/schema/beans"
>   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>   http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
>     <broker xmlns="http://activemq.apache.org/schema/core"
>             brokerName="localhost"
>             dataDirectory="${activemq.base}/data"
>             destroyApplicationContextOnStop="true" >
>         <persistenceAdapter>
>             <kahaDB directory="${activemq.base}/data/kahadb"/>
>         </persistenceAdapter>
>         
>         <plugins>
>           <simpleAuthenticationPlugin anonymousAccessAllowed="true">
>               <users>
>                   <authenticationUser username="user" password="password"
>                       groups="users"/>
>               </users>
>           </simpleAuthenticationPlugin>
>           <authorizationPlugin>
>               <map>
>                   <authorizationMap>
>                     <authorizationEntries>
>                       <authorizationEntry queue="ABC" read="users" write="users" admin="users"
/>
>                       <authorizationEntry topic="ActiveMQ.Advisory.>" read="users"
write="users" admin="users" />
>                     </authorizationEntries>
>                   </authorizationMap>
>               </map>
>           </authorizationPlugin>
>         </plugins>
>         <transportConnectors>
>             <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
>         </transportConnectors>
>     </broker>
> </beans>



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message