qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Edlira Nano <edlira.n...@gmail.com>
Subject getObjects() doesn't always work
Date Tue, 19 Jan 2010 16:46:28 GMT
Hi everyone,

I am using C++ Broker along with C++ Clients built from trunk on RedHat CentOS.

First I noticed that the ./console program from the qmf-console example wasn't
getting any object from the broker (while ping and queuestats work fine)

Then, I did a little program that uses getObjects() from the console
SessionManager
and noticed that it is not getting any queue object every time I call it.

Here is what I'm doing :
- A broker is running on localhost:5672
- A queue named "message_queue" has been created on it (using
declare_queues from the direct example)
- I wrote the following program which uses getObjects() to get a list
of queue objects from the broker,
  looks for the queue named "message_queue" in the list and prints
some information about it. The program
is not even implementing its own ConsoleListener like ./console, but
it'using the default one  :

#include "qpid/console/SessionManager.h"
using namespace std;
using namespace qpid::console;

int main_int(int /*argc*/, char** /*argv*/)
{
  qpid::client::ConnectionSettings connSettings;

  SessionManager sm;
  Broker* broker = sm.addBroker(connSettings);

  Object::Vector list;
  int counter = 0;

  do {
    counter++;
    cout << "Getting queue objects list, attempt no " << counter << endl;
    sm.getObjects(list, "queue");
    cout << "   returned " << list.size() << " elements" << endl;
  }
  while(list.empty());

  for (Object::Vector::iterator i = list.begin(); i != list.end();
       i++) {
    cout << "queue: " << *i << endl;
    if ((i->attrString("name")) == "message_queue") {
      cout << "nbMessages: " << i->attrUint64("msgDepth") << endl;
      cout << "size: " << i->attrUint64("byteDepth") << endl;
      break;
    }
  }
  sm.delBroker(broker);
  return 0;
}

int main(int argc, char** argv)
{
    try {
        return main_int(argc, argv);
    } catch(std::exception& e) {
        cout << "Top Level Exception: " << e.what() << endl;
    }
}

Here are the last lines of the output I get from the above program :

Getting queue objects list, attempt no 705
   returned 0 elements
Getting queue objects list, attempt no 706
   returned 4 elements
queue: org.apache.qpid.broker:queue[0-217-1-0-3]
0-0-1-0-1152921504606846979:message_queue
nbMessages: 11
size: 108

So, i have to do getObjects() 706 times to get a non empty list of
queue objects.
The number of attempts varies from one call to another, the max I get
is around 1200 times, the minimum
120 times.

Does anyone have any idea about this?

Thanks,
Edlira

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message