Gordon Sim wrote:
Currently in a clustered broker, the object ids used for management objects are not uniform across all nodes. This means that execution of management methods does not reliably occur on all nodes (if the id on which the method is invoked is for another object than intended on other nodes).

The root cause of this is the fact that the state dump process creates some management objects and as the traffic for that connection is not replicated these only exist on the joining node. The id allocation uses a sequential id, so these extra objects that only consume ids on a joining member skews the allocation.

Attached is a patch that fixes this. Its a bit of a hack, just to show the concept. I now plan to try and clean it up a little (essentially avoiding the special 'qpid-dump' strings everywhere). However I thought it would be worth sharing in case there are other issues or better ideas. (Alan, Ted I'm particularly keen on your viewpoints).

Gordon,

It looks from the patch that you have added special logic to suppress the creation of the management objects related to "qpid-dump". I think there's a cleaner way to do this without removing management visibility into the qpid-dump objects.

If you grep for uses of "addObject" in the cpp/src/qpid/broker directory, you will see that there is an optional second argument to this method. It is used for persistent objects. Persistent IDs include those held in the store and also IDs of default objects (i.e. the amq.* exchanges).

You can use a "persistent" number space (like 0x400000000000XXXXLL) for the qpid-dump objects. This will allow them to be managed but will prevent them from skewing the allocation of non-persistent IDs.

-Ted


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to