diff options
Diffstat (limited to 'cpp/src/tests/declare_queues.cpp')
| -rw-r--r-- | cpp/src/tests/declare_queues.cpp | 73 |
1 files changed, 50 insertions, 23 deletions
diff --git a/cpp/src/tests/declare_queues.cpp b/cpp/src/tests/declare_queues.cpp index d17a72b940..df2718a970 100644 --- a/cpp/src/tests/declare_queues.cpp +++ b/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; + } } - } |
