diff options
author | Michael Goulish <mgoulish@apache.org> | 2009-11-13 05:37:54 +0000 |
---|---|---|
committer | Michael Goulish <mgoulish@apache.org> | 2009-11-13 05:37:54 +0000 |
commit | 26d38cabbbee08fc1adf66284dbbd403b8e46b76 (patch) | |
tree | a9bbb91f4b8333a621851547240c73781135cd67 /qpid/cpp/src/tests/declare_queues.cpp | |
parent | 1b679a2b9ba0e6e6c9bb78a877e45983bf3cb75f (diff) | |
download | qpid-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.cpp | 73 |
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; + } } - } |