[ 
https://issues.apache.org/jira/browse/QPID-3220?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Keith Wall updated QPID-3220:
-----------------------------

    Description: 
If the user specifies the option failover='singlebroker' in the connection URL, 
a coding error in FailoverPolicy.java means that the client actually elects to 
use FailoverRoundRobinServers policy rather than FailoverSingleServer.

For example, the following URL will cause the client to use the round-robin 
policy. 

{code}
amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672?retries='50'&connectdelay='5000''&failover='singlebroker'
{code}

Furthermore, as the logic FailoverRoundRobinServers.getNextBrokerDetails means 
that if the roundrobin policy is used with a brokerlist containing *one 
broker*, connectdelay is never applied, this defect also means that if a user 
passes failover='singlebroker' with a broker list containing one entry, 
connectdelay is ignored.   This can give the appearance that server 
reconnection is broken as the client can spin through thousands of retries 
before then broker has chance to restart.

To workaround this issue, the user can omit the failover option from the URL 
and let the defaulting within FailoverPolicy class choose FailoverSingleServer 
if the brokerlist contains one entry, or FailoverRoundRobinServers if the list 
contains more than one.


Client will default to singlebroker policy:

{code}
amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'
{code}

Client will default to roundrobin policy:

{code}
amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672;tcp://localhost:5672'
{code}




  was:
If the user specifies the option failover='singlebroker' in the connection URL, 
an coding error in FailoverPolicy.java means that the client actually elects to 
use FailoverRoundRobinServers policy rather than FailoverSingleServer.

For example, the following URL will cause the client to use the round-robin 
policy. 

{code}
amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672?retries='50'&connectdelay='5000''&failover='singlebroker'
{code}

Furthermore, as the logic FailoverRoundRobinServers.getNextBrokerDetails means 
that if the roundrobin policy is used with a brokerlist containing *one 
broker*, connectdelay is never applied, this defect also means that if a user 
passes failover='singlebroker' with a broker list containing one entry, 
connectdelay is ignored.   This can give the appearance that server 
reconnection is broken as the client can spin through thousands of retries 
before then broker has chance to restart.

To workaround this issue, the user can omit the failover option from the URL 
and let the defaulting within FailoverPolicy class choose FailoverSingleServer 
if the brokerlist contains one entry, or FailoverRoundRobinServers if the list 
contains more than one.


Client will default to singlebroker policy:

{code}
amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'
{code}

Client will default to roundrobin policy:

{code}
amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672;tcp://localhost:5672'
{code}





> Specifying connection url option failover='singlebroker' causes the wrong 
> failover policy to be used
> ----------------------------------------------------------------------------------------------------
>
>                 Key: QPID-3220
>                 URL: https://issues.apache.org/jira/browse/QPID-3220
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>    Affects Versions: 0.5, 0.10
>            Reporter: Keith Wall
>            Priority: Minor
>
> If the user specifies the option failover='singlebroker' in the connection 
> URL, a coding error in FailoverPolicy.java means that the client actually 
> elects to use FailoverRoundRobinServers policy rather than 
> FailoverSingleServer.
> For example, the following URL will cause the client to use the round-robin 
> policy. 
> {code}
> amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672?retries='50'&connectdelay='5000''&failover='singlebroker'
> {code}
> Furthermore, as the logic FailoverRoundRobinServers.getNextBrokerDetails 
> means that if the roundrobin policy is used with a brokerlist containing *one 
> broker*, connectdelay is never applied, this defect also means that if a user 
> passes failover='singlebroker' with a broker list containing one entry, 
> connectdelay is ignored.   This can give the appearance that server 
> reconnection is broken as the client can spin through thousands of retries 
> before then broker has chance to restart.
> To workaround this issue, the user can omit the failover option from the URL 
> and let the defaulting within FailoverPolicy class choose 
> FailoverSingleServer if the brokerlist contains one entry, or 
> FailoverRoundRobinServers if the list contains more than one.
> Client will default to singlebroker policy:
> {code}
> amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'
> {code}
> Client will default to roundrobin policy:
> {code}
> amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672;tcp://localhost:5672'
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org

Reply via email to