summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/tests/declare_queues.cpp
diff options
context:
space:
mode:
authorMichael Goulish <mgoulish@apache.org>2009-11-13 05:37:54 +0000
committerMichael Goulish <mgoulish@apache.org>2009-11-13 05:37:54 +0000
commit26d38cabbbee08fc1adf66284dbbd403b8e46b76 (patch)
treea9bbb91f4b8333a621851547240c73781135cd67 /qpid/cpp/src/tests/declare_queues.cpp
parent1b679a2b9ba0e6e6c9bb78a877e45983bf3cb75f (diff)
downloadqpid-python-26d38cabbbee08fc1adf66284dbbd403b8e46b76.tar.gz
Make failover_soak and its children adjustable as to
the number of brokers in the cluster, and the number of queues talking through the cluster during the test. resuming_receiver.cpp and replaying_sender.cpp now take command line args to control the queue name. If more than 1 queue is desired, failover_soak.cpp will start up N queue, each with its own sender and receiver. Queue names are now made unique with the failover_soak PID as part of their name. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@835746 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src/tests/declare_queues.cpp')
-rw-r--r--qpid/cpp/src/tests/declare_queues.cpp73
1 files changed, 50 insertions, 23 deletions
diff --git a/qpid/cpp/src/tests/declare_queues.cpp b/qpid/cpp/src/tests/declare_queues.cpp
index d17a72b940..df2718a970 100644
--- a/qpid/cpp/src/tests/declare_queues.cpp
+++ b/qpid/cpp/src/tests/declare_queues.cpp
@@ -25,46 +25,73 @@
#include <cstdlib>
#include <iostream>
+#include <sstream>
using namespace qpid::client;
using namespace std;
-int main(int argc, char ** argv)
+int
+main(int argc, char ** argv)
{
ConnectionSettings settings;
- if ( argc != 4 )
+ if ( argc != 6 )
{
- cerr << "Usage: declare_queues host port durability\n";
+ cerr << "Usage: declare_queues host port durability queue_name_prefix n_queues\n";
return 1;
}
settings.host = argv[1];
settings.port = atoi(argv[2]);
int durability = atoi(argv[3]);
+ char const * queue_name_prefix = argv[4];
+ int n_queues = atoi(argv[5]);
FailoverManager connection(settings);
- try {
- bool complete = false;
- while (!complete) {
- Session session = connection.connect().newSession();
- try {
- if ( durability )
- session.queueDeclare(arg::queue="message_queue", arg::durable=true);
- else
- session.queueDeclare(arg::queue="message_queue");
- complete = true;
- } catch (const qpid::TransportFailure&) {}
- }
- connection.close();
- return 0;
- } catch (const exception& error) {
- cerr << "declare_queues failed:" << error.what() << endl;
- cerr << " host: " << settings.host
- << " port: " << settings.port << endl;
- return 1;
+
+ int max_fail = 13;
+ for ( int i = 0; i < n_queues; ++ i ) {
+ stringstream queue_name;
+ queue_name << queue_name_prefix << '_' << i;
+
+ bool queue_created = false;
+ int failure_count;
+
+ // Any non-transport failure is Bad.
+ try
+ {
+ while ( ! queue_created ) {
+ Session session = connection.connect().newSession();
+ // TransportFailures aren't too bad -- they might happen because
+ // we are doing a cluster failover test. But if we get too many,
+ // we will still bug out.
+ failure_count = 0;
+ try {
+ if ( durability )
+ session.queueDeclare(arg::queue=queue_name.str(), arg::durable=true);
+ else
+ session.queueDeclare(arg::queue=queue_name.str());
+ queue_created = true;
+ cout << "declare_queues: Created queue " << queue_name.str() << endl;
+ }
+ catch ( const qpid::TransportFailure& ) {
+ if ( ++ failure_count >= max_fail ) {
+ cerr << "declare_queues failed: too many transport errors.\n";
+ cerr << " host: " << settings.host
+ << " port: " << settings.port << endl;
+ return 1;
+ }
+ sleep ( 1 );
+ }
+ }
+ }
+ catch ( const exception & error) {
+ cerr << "declare_queues failed:" << error.what() << endl;
+ cerr << " host: " << settings.host
+ << " port: " << settings.port << endl;
+ return 1;
+ }
}
-
}