On Tue, Mar 12, 2024 at 7:13 PM Timothy Bish <tabish...@gmail.com> wrote:

> On 3/12/24 04:08, Ciaran wrote:
> > On Mon, Mar 11, 2024 at 9:33 PM Timothy Bish <tabish...@gmail.com>
> wrote:
> >
> >>
> >> The client re-connection logic treats a SASL authentication error as a
> >> terminal state and will not continue reconnect attempts if it receives a
> >> SASL outcome that indicates anything other than a temporary failure
> >> state so it should be stopping the reconnect if it was actually failing
> >> to authenticate.  This is true on the first attempt as well as on
> >> subsequent attempts to other hosts if you add more than one and it has
> >> failed to reach any of the preceding hosts while attempt to recover the
> >> connection.
> >>
> >>   From the error logs attached it doesn't appear as though SASL
> >> authentication is your issue though, at least in so much as it isn't
> >> logging anything indicating SASL authentication as the error. Instead
> >> the connection appears to be failing because the remote has sent a
> >> response to the Receiver attach that does not include the initial
> >> delivery count value as required by the specification.
> >>
> >> You can capture more information about the AMQP frames being sent and
> >> received by enabling frame tracing, see the docs for how to do that.
> >>
> >>
> >>
> https://github.com/apache/qpid-protonj2/blob/main/protonj2-client-docs/Configuration.md#logging
> >>
> >>
> > Thanks for getting back to me so quickly Tim, please find below the
> frames
> > for a successful
> > connection and an unsuccessful connection. My test has actually been to
> > specify an invalid user if
> > that's relevant.
> >
> > I can see in both cases that the SASL challenge completes successfully,
> > which I appreciate is
> > strange, but I would imagine Azure Service Bus is a common enough broker
> > target for the library?
>
> So looking at the frame trace it is clear the connection is being
> established as the SASL outcome is returned as 'OK' and then a normal
> Open exchange occurs so from the client point of view a connection was
> successfully made so any initial reconnect attempts option won't apply
> here as the connection "succeeded".  For the connection to fail with bad
> credentials the SASL outcome would need to indicate a failure.
>
> The connection breaks at the point the attach response arrives and is
> lacking the mandatory initial-delivery-count field as per the AMQP 1.0
> specification.
>
>
> http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-transport-v1.0-os.html#type-attach
>
> It could be that the user you logged in as does not have read permission
> and the server is trying to tell the client that the link will be closed
> with an error condition in the Detach indicating that as the returned
> response does not carry a source or target value (both are null) whereas
> the sent Attach has an appropriate source and target value.  If that is
> what it is doing it gets it wrong as it omits the
> 'initial-delivery-count' which is required for an Attach with the Role
> of Sender (as per referenced spec above) regardless of the outcome of
> the attach.
>
> Sorry, I think  perhaps I've not explained myself well here, the user is
correctly configured on Azure Service Bus.
However, the fail case is where I provide an *invalid* (non-existant) user
or an *invalid* password.

I can see that the SaSL challenges succeeds, and agree from a client
perspective that this success is
problematic when the credentials provided are invalid! I guess I'm flagging
that my configuration is not
exotic, and Azure Service Bus is a fairly popular AMQP broker.

If this is the desired behaviour of the client library when interacting
with Azure, I'll stick with my work around, which is to create a
connection & receiver with no reconnect semantics configured, check that
connection succeeds, close it and then
re-open with a retryable connection.

P.S. Spotted a minor issue in the ReconnectOptions.java file and have
submitted a pull request over on Github,
confused the hell out of me for a while!
- Cj.

Reply via email to