On 11/04/13 16:05, Ken Giusti wrote:
One thing though, I think that we discussed on the main thread (and Bill
mentioned this too) about providing an extension to specify the QMF
version to consume.
To be frank - I think any effort expended going forward to make it easier to 
have both QMFv1 and QMFv2 work well together is an effort wasted given QMFv1 
deprecation:

http://qpid.2158936.n2.nabble.com/QMF-and-Broker-Management-td7151372.html

Yes/no/maybe/possibly :-)

I think that frankly it's an awful lot more complex than that. When Ted suggested that over a year ago I was very much onside with that view, I've primarily used QMF2 and I think that there is a lot of fun things that could potentially be done making interesting QMF2 Agents.

One of the hurdles that I think exists is the lack of cohesion around QMF. So as I've mentioned before I felt a Java implementation was missing, so I took it upon myself to do a complete Java implementation of the draft QMF2 API that was documented (I, not unreasonably, assumed that this was what the future was going to be because there was nothing written nor said to the contrary). As it happens there exists a "prototype" python implementation of that API (which I suspect few, if any people are actually using) plus an entire miscellany of QMF2 "pseudo APIs" for python, C++, ruby that generally bear no relationship to each other (you see where I'm going with this :-))

Moreover from conversations that I've had with various people a lot of the QMF stuff was perhaps put out without necessarily a lot of community discussion (that all predates my involvement with the project so maybe I'm speaking out of turn there), so as a result it has become rather fragmented - QMF used in the C++ Broker and it's the only game in town there, the Java Broker has gone its own way.

All this has to be blunt frankly wound me up :-D, and I've tended to get on my soap box about cohesion and "compelling platforms".

Personally I think QMF2 for all it's failings is pretty good, but the lack of consultation and cohesion have made it very C++ broker-centric and thus not a compelling platform across even the Qpid world let alone the general AMQP world.

So actually I think a decent amount of energy should really be focussed on the broader AMQP 1.0 Management piece that is currently being thought about.

However..... given that clearly there is an awful lot of QMF1 and QMF2 tooling out there (and indeed I myself have invested an awful lot of personal energy into implementing a decent QMF2 API for Java plus web GUI and all sorts) I'd say there's a danger that the AMQP 1.0 Management piece will itself fail to become compelling if it doesn't consider the complexities of migrating the exiting tooling (the QMF1 to QMF2 aspects in the python API being discussed in this thread are really just a flavour of the pain to come).


TBH all this is the primary reason that I put together a QmfManagementPlugin for the Java Broker. It's early days yet and it's far from perfect, but it was done on a point of principal really that starting out in the direction of a cohesive management approach is going to make it a darned sight easier to evolve towards AMQP 1.0 Management.

I really think that we have to play a lot more nicely together as a community when it comes to management aspects, it's really far too fragmented. For most large Enterprises it's one of the primary factors in the decision making process for selecting messaging products. To put it bluntly Qpid is a great set of products, but we're really doing ourselves a great disservice if we don't get our act together on management and monitoring.

So in short I sort of agree that doing too much with QMF1 might be wasted effort, but not quite for the reasons you suggest - but conversely (and slightly awkwardly) I suspect most of the current tooling that exists in the real world (with the exception of my cool stuff :-)) is I suspect still most likely to be be written using QMF1 - so it's a conundrum, do we deprecate QMF1 early and risk breaking a lot of existing Qpid and 3rd party tooling, forcing people to QMF2 when our strategy should probably be towards AMQP 1.0 Management. or do we retain QMF1 (possibly "semi"-deprecating it by disabling the push by default in the broker) but encourage people to use things like qpidtoolib/my stuff/whatever with the aim of trying to keep that tracking the current thinking with AMQP 1.0 Management?

TBH I don't know the right answer. I know I quite like the stuff that I've done and I know that I'm supportive of the stuff Rob is leading on for AMQP 1.0 Management (even if there are currently bits of it that give me apoplexy :-)) but trying to build cohesion and build a good migration roadmap is going to be something of a challenge given the current level of fragmentation.

I'll step gently off my soap-box now as this has turned into more of a rant than I intended :-) at the very least it's an interesting topic of conversation and strategic thinking on Qpid management is long overdue IMHO.
Agreed - but the sooner we turn off unsolicited QMFv1 updates as planned, the 
sooner the broker stops sending the same data twice.
True, and the sooner most current Qpid 3rd party management tooling is likely to break I would suspect :-/

Hopefully my rant above makes some sense, don't get me wrong I don't much like the idea of prolonging support for QMF1, but as I say I think it's more complicated than you are suggesting largely because we as a community haven't done a terribly good job nailing our colours to the mast and setting an agreed roadmap for management. It's now reached the point of coming back to haunt us :-/


Yes, you'll see that the broker sends all statistics for a given object rather than just 
those that changed.  While the QMFv2 spec may indicate only the statistics that have 
changed should be sent - this is very impractical in practice.  That spec should be 
re-written to say "-may- send only those that have changed".

To send only those stats that have changed will require the broker to perform 
lots of extra work that will end up impacting the performance of its primary 
purpose - transferring messages.  Think about how we'd have to implement this - 
the broker would have to save a snapshot of every object's statistics between 
update intervals, then check every single counter for a difference at the next 
poll (all under a lock, btw).  Imagine the impact this would have on the 
broker's performance, especially as we scale out queues, exchanges, 
connections, etc.  Not worth trading off for mgmt application convenience, IMHO.

-K

Ta for that, I knew that there was something weird going on that affected my (emulated) query subscriptions, I couldn't remember which way round it was that was only partially being sent. In retrospect it makes sense that it's the properties, though my previous comment stands in the general sense. If you look at management-schema.xml for say Queue there are currently ~35 statistics fields and 7 properties so the saving of not sending the properties too is probably not proportionate to the cost of applications having to do a slightly irksome save of the first update in a Map keyed by ObjectId to get the properties followed by a a logical "join" of every updated QmfData where we need to look up the partial state by ObjectId. All just IMHO of course, but it's certainly one of the reasons I generally do getObjects() style calls - it's a lot less faff :-)




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

Reply via email to