Hi All,
The Java Broker has recently (QPID-5555) added some changes to Lifetime/Exclusivity policies based on the comments:

"AMQP 0-8/9/9-1 and AMQP 0-10 both have notions of "autodelete" and "exclusive" for Queues. However while they use the same names, they are in fact subtly different. The Java Broker Queue implementation should better abstract these notions into the lifetime and exclusivity policies."


I was updating a few things as a result of this and it got me thinking that another discussion on the future of Qpid Management was somewhat overdue.


At face value there's no great issue with these changes when viewed only in the context of the Java Broker, but when viewed more widely we note that in QMF for the C++ broker autoDelete and exclusive are both boolean values.


Obviously the Management Models of the C++ and Java Brokers have diverged somewhat over time as indeed have the capabilities of the two brokers - particularly with respect to Queue capabilities/types but also recently with the addition of things like Incoming/Outgoing/Domain/Topic/QueuePolicy/TopicPolicy to the C++ Broker and I guess QPID-5504 (Allow other routing/storage node types than Queues and Exchanges) is likely somewhat related.

So the real question is what's the best approach on this going forward? Hopefully the aim for both Brokers will be to converge on using AMQP 1.0 Management as the Management *protocol*, but that's ultimately just a mechanism for retrieving the management information with a consistent *syntax*, the problem is that the divergent Management Models means that there is different *semantics* between the two Brokers, which is a little less easy to address.

The good news is that there is a significant amount of overlap and the QMF plugin for the Java Broker that I put together covers a decent number of the core use cases, but each Broker does offer some additional capabilities. Probably the most *awkward" from the point of view of a "converged" approach is the Java Broker Virtual Host capability, but even fairly small things like the Lifetime/Exclusivity stuff here and say the ability of the Java Broker to support multiple different Ports (the C++ Broker Port is just the bound AMQP Port on a TCP transport) make things a little fiddly. No standard way in AMQP to specify things like queue max-size, max-messages etc. doesn't help either I guess :-(


Perhaps the *right* answer is that convergence is a futile exercise?? I guess that with AMQP 1.0 Management different vendors can implement whatever semantics they like, so why should the Qpid C++ and Java Brokers have any real need to be consistent other than because they are both badged "Qpid"? I guess the main reason is that being different could easily confuse users. I know it confuses me and I'm fairly familiar with this stuff, I usually wind up looking through code - so best of luck to any n00bies.....


It would be really nice to be able to put together some tooling that is reasonably agnostic of some of the differences. I think that's possible to an extent but there are some really awkward areas such as how one represents relationships between Management Objects - in QMF we have references e.g queueRef and exchangeRef in Binding but AMQP 1.0 Management is pretty quiet on how (or indeed whether) this stuff should be represented. There now seems to be some introspection mechanism in AMQP 1.0 Management which is good, but as I say the relationship stuff is important semantically. Similarly neither QMF nor AMQP 1.0 Management provide a way to introspect Method formal parameters. So you can get hold of the available Method names for sure, but arguments/parameters?? This is a real pain - the number of times I've had to work my way through Broker code to work out how on earth I actually call a method!!! Having a mechanism to introspect arguments and their types means that it becomes feasible to create tooling that can be useful across different vendors' products without it everything needs to be a bit bespoke.


Even if convergence does end up being somewhat futile there are non-trivial issues to consider when moving to AMQP 1.0 Management, for example how does one migrate existing QMF based tooling (do we have parallel tool sets or parallel back ends - the latter might be a better migration approach as it doesn't pull the rug from users, but I don't know). For the Java Broker it might be even harder with a fairly comprehensive, but embedded GUI. Is the intention to retain that and only expose a limited set of information via AMQP 1.0 Management?


I realise that this isn't the first time I've got on my soap-box a bit with respect to Management, but given that the AMQP 1.0 Management specification is starting to become a bit more "kickable" I think that it's probably a good time for the community to have a decent discussion on this. I think that we *really* need to have a good community discussion before AMQP 1.0 Management becomes completely set in stone, unfortunately so far I've not seen an awful lot of discussion about it.



Another more specific question relates to the LifetimePolicy which is:

public enum LifetimePolicy
{
    PERMANENT,
    DELETE_ON_CONNECTION_CLOSE,
    DELETE_ON_SESSION_END,
    DELETE_ON_NO_OUTBOUND_LINKS,
    DELETE_ON_NO_LINKS,
    IN_USE
}

Whereas in the AMQP 1.0 specification  I note:

The following standard lifetime-policies are defined below:
delete-on-close,
delete-on-no-links,
delete-on-no-messages
delete-on-no-links-or-messages

Is there a reason for the enumeration to be quite so different, is that to do with the AMQP 0-8/9/9-1 stuff?

Regards,
Frase


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to