On 03/04/13 14:45, Bill Freeman wrote:

And, in fact, my broker has those exchanges,
For info I think that every qpid version from at least 0.8 has supported QMF2 ()in the C++ broker) so these exchanges are almost certain to be present unless you have really old brokers around (and if you do I'd recommend you suggest to whoever owns them to upgrade)

  and console.py finds them and
sets the Broker instance's brokerSupportsV2 attribute to True.  And the
brokerAgent it gets has isV2 True.  And it creates its v2 queues,
binds/subscribes them, etc.

So I'm guessing that the rcvOjbects flag to the Session constructor only
gets me V1 updates, and I would have to subscribe explicitly to the queues
that I care about in order to get v2 updates.  Does that sound right?
My guess is that if the initial Broker object set up has successfully queried for the presence of QMF2 exchanges then you'd get V2 updates. Actually I've looked at "class Session:" and the following code in _bindingKeys suggests to me that for the case of asynchronous receipt of broker data pushes the class is setting up subscriptions to both QMF1 and QMF2 topics

  def _bindingKeys(self):
    v1KeyList = []
    v2KeyList = []
    v1KeyList.append("schema.#")
    # note well: any binding that starts with 'agent.ind.heartbeat' will be
    # bound to the heartbeat queue, otherwise it will be bound to the
    # unsolicited indication queue.  See _decOutstanding() for the binding.
    if not self.userBindings:
      if self.rcvObjects and self.rcvEvents and self.rcvHeartbeats:
        v1KeyList.append("console.#")
        v2KeyList.append("agent.ind.data.#")
        v2KeyList.append("agent.ind.event.#")
        v2KeyList.append("agent.ind.heartbeat.#")
      else:
        # need heartbeats for V2 newAgent()/delAgent()
        v2KeyList.append("agent.ind.heartbeat.#")
        if self.rcvObjects:
          v1KeyList.append("console.obj.#")
          v2KeyList.append("agent.ind.data.#")
        else:
v1KeyList.append("console.obj.*.*.org.apache.qpid.broker.agent")
        if self.rcvEvents:
          v1KeyList.append("console.event.#")
          v2KeyList.append("agent.ind.event.#")
        else:
v1KeyList.append("console.event.*.*.org.apache.qpid.broker.agent")
        if self.rcvHeartbeats:
          v1KeyList.append("console.heartbeat.#")
    else:
      # mandatory bindings
v1KeyList.append("console.obj.*.*.org.apache.qpid.broker.agent")
v1KeyList.append("console.event.*.*.org.apache.qpid.broker.agent")
v1KeyList.append("console.heartbeat.#") # no way to turn this on later
      v2KeyList.append("agent.ind.heartbeat.org_apache.qpidd.#")

    return (v1KeyList, v2KeyList)

and later in bindClass() I see:

    for broker in self.brokers:
      if broker.isConnected():
broker.amqpSession.exchange_bind(exchange="qpid.management", queue=broker.topicName, binding_key=v1key)
        if broker.brokerSupportsV2:
# data indications should arrive on the unsolicited indication queue broker.amqpSession.exchange_bind(exchange="qmf.default.topic", queue=broker.v2_topic_queue_ui, binding_key=v2key)

Which looks like it first binds from the QMF1 qpid.management topic exchange to some queue with the v1key then if brokerSupportsV2 is set binds from the QMF2 qmf.default.topic exchange to some other queue with the v2key


I couldn't say for sure without looking at the code in more detail but my guess is that data is being pushed from the broker in both QMF1 and QMF2 format and is probably being placed on both of the queues above, in your case the data is being read off the QMF2 queue and I'd bet that the QMF1 queue just fills up and circulates (it's a ring queue) you could probably check this by monitoring the depth of the queue whose name starts "topic-", the QMF2 topic queue starts "qmfc-v2-ui-".

I'm no expert on this code, so it's just a guess on my part, I'm kind of curious myself now :-)

Frase




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
For additional commands, e-mail: users-h...@qpid.apache.org

Reply via email to