diff options
author | Phil Mesnier <mesnier_p@ociweb.com> | 2006-06-09 14:43:06 +0000 |
---|---|---|
committer | Phil Mesnier <mesnier_p@ociweb.com> | 2006-06-09 14:43:06 +0000 |
commit | 7f4a673fc88567f8622dd84b9844faa61f20a58b (patch) | |
tree | a9c6fe93651bf62a06f6f5e15f6d1c4bf8705729 /TAO | |
parent | a9b68a3c160f1b701ff08f180f5b09298f03d9bf (diff) | |
download | ATCD-7f4a673fc88567f8622dd84b9844faa61f20a58b.tar.gz |
ChangeLog tag: Fri Jun 9 14:35:56 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
Diffstat (limited to 'TAO')
-rw-r--r-- | TAO/ChangeLog | 21 | ||||
-rw-r--r-- | TAO/tests/Big_Request_Muxing/Client_Task.cpp | 47 | ||||
-rw-r--r-- | TAO/tests/Big_Request_Muxing/Client_Task.h | 9 | ||||
-rw-r--r-- | TAO/tests/Big_Request_Muxing/Payload_Receiver.cpp | 24 | ||||
-rw-r--r-- | TAO/tests/Big_Request_Muxing/Payload_Receiver.h | 11 | ||||
-rw-r--r-- | TAO/tests/Big_Request_Muxing/Test.idl | 5 | ||||
-rw-r--r-- | TAO/tests/Big_Request_Muxing/client.cpp | 13 | ||||
-rwxr-xr-x | TAO/tests/Big_Request_Muxing/run_test.pl | 5 | ||||
-rw-r--r-- | TAO/tests/Big_Request_Muxing/server.cpp | 68 |
9 files changed, 154 insertions, 49 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index 50d3b034fb6..c2eba51447a 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,24 @@ +Fri Jun 9 14:35:56 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com> + + * tests/Big_Request_Muxing/Client_Task.h: + * tests/Big_Request_Muxing/Client_Task.cpp: + * tests/Big_Request_Muxing/Payload_Receiver.h: + * tests/Big_Request_Muxing/Payload_Receiver.cpp: + * tests/Big_Request_Muxing/Test.idl: + * tests/Big_Request_Muxing/client.cpp: + * tests/Big_Request_Muxing/run_test.pl: + * tests/Big_Request_Muxing/server.cpp: + + This test frequently shows false errors due dropped SYNC_NONE + messages. These errors are false because dropping such messages + is not an error. The test now separately accounts for SYNC_NONE + invocations separately by using a different operation. + + I also modified the timeout loop in an earlier attempt to + resolve the periodic dropped messages, thinking the timeout + occured due to heavy loads. Now the timeout less about the whole + event and more about the duration of individual requests. + Thu Jun 8 02:16:30 UTC 2006 Douglas C. Schmidt <schmidt@dre.vanderbilt.edu> * orbsvcs/Event_Service/Event_Service.cpp (parse_args): Added a diff --git a/TAO/tests/Big_Request_Muxing/Client_Task.cpp b/TAO/tests/Big_Request_Muxing/Client_Task.cpp index a73c1afbc1c..385bf7f0bc5 100644 --- a/TAO/tests/Big_Request_Muxing/Client_Task.cpp +++ b/TAO/tests/Big_Request_Muxing/Client_Task.cpp @@ -12,7 +12,8 @@ Client_Task::Client_Task (ACE_Thread_Manager *thr_mgr, CORBA::Long event_count, CORBA::ULong event_size, CORBA::ORB_ptr orb, - Messaging::SyncScope sync_scope) + Messaging::SyncScope sync_scope, + const ACE_CString & ident) : ACE_Task_Base (thr_mgr) , payload_receiver_ (Test::Payload_Receiver::_duplicate (payload_receiver)) , event_count_ (event_count) @@ -20,6 +21,7 @@ Client_Task::Client_Task (ACE_Thread_Manager *thr_mgr, , orb_ (CORBA::ORB::_duplicate (orb)) , sync_scope_ (sync_scope) , done_(false) + , id_ (ident) { } @@ -29,9 +31,36 @@ Client_Task::done(void) const return done_; } +void +Client_Task::do_invocations(Test::Payload& payload ACE_ENV_SINGLE_ARG_DECL) +{ + ACE_DEBUG((LM_DEBUG, "(%P|%t)Client_Task %s sending %d payloads.\n", + this->id_.c_str(), this->event_count_)); + + for (int i = 0; i != this->event_count_; ++i) + { + this->payload_receiver_->more_data (payload ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } +} + +void +Client_Task::do_sync_none_invocations(Test::Payload& payload ACE_ENV_SINGLE_ARG_DECL) +{ + ACE_DEBUG((LM_DEBUG, "(%P|%t)Client_Task %s sending %d SYNC_NONE payloads.\n", + this->id_.c_str(), this->event_count_)); + + for (int i = 0; i != this->event_count_; ++i) + { + this->payload_receiver_->sync_none_more_data (payload ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } +} + int Client_Task::svc (void) { + ACE_DEBUG ((LM_DEBUG,"(%P|%t) Client_Task %s started\n",this->id_.c_str())); Test::Payload payload (this->event_size_); payload.length (this->event_size_); @@ -69,20 +98,22 @@ Client_Task::svc (void) ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; - for (int i = 0; i != this->event_count_; ++i) - { - this->payload_receiver_->more_data (payload ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - } + if (this->sync_scope_ == Messaging::SYNC_NONE) + this->do_sync_none_invocations(payload ACE_ENV_SINGLE_ARG_PARAMETER); + else + this->do_invocations(payload ACE_ENV_SINGLE_ARG_PARAMETER); + } ACE_CATCHANY { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Client_Task: "); + ACE_DEBUG((LM_DEBUG, "(%P|%t)Client_Task %s: ", + this->id_.c_str())); + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, ""); done_ = true; return -1; } ACE_ENDTRY; - ACE_DEBUG((LM_DEBUG, "Client_Task finished.\n")); + ACE_DEBUG((LM_DEBUG, "(%P|%t)Client_Task %s finished.\n", this->id_.c_str())); done_ = true; return 0; } diff --git a/TAO/tests/Big_Request_Muxing/Client_Task.h b/TAO/tests/Big_Request_Muxing/Client_Task.h index 70c9d634da5..81c8358c4a2 100644 --- a/TAO/tests/Big_Request_Muxing/Client_Task.h +++ b/TAO/tests/Big_Request_Muxing/Client_Task.h @@ -9,6 +9,7 @@ #include "TestC.h" #include "tao/Messaging/Messaging.h" #include "ace/Task.h" +#include "ace/SString.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once @@ -24,7 +25,8 @@ public: CORBA::Long event_count, CORBA::ULong event_size, CORBA::ORB_ptr orb, - Messaging::SyncScope sync_scope); + Messaging::SyncScope sync_scope, + const ACE_CString& ident); /// Thread entry point int svc (void); @@ -36,6 +38,9 @@ private: /// workaround bug 189 void validate_connection (ACE_ENV_SINGLE_ARG_DECL); + void do_invocations(Test::Payload& payload ACE_ENV_SINGLE_ARG_DECL); + void do_sync_none_invocations(Test::Payload& payload ACE_ENV_SINGLE_ARG_DECL); + private: /// Reference to the test interface Test::Payload_Receiver_var payload_receiver_; @@ -54,6 +59,8 @@ private: Messaging::SyncScope sync_scope_; bool done_; + + ACE_CString id_; }; #include /**/ "ace/post.h" diff --git a/TAO/tests/Big_Request_Muxing/Payload_Receiver.cpp b/TAO/tests/Big_Request_Muxing/Payload_Receiver.cpp index 754038d2d2e..e3203f20359 100644 --- a/TAO/tests/Big_Request_Muxing/Payload_Receiver.cpp +++ b/TAO/tests/Big_Request_Muxing/Payload_Receiver.cpp @@ -5,9 +5,9 @@ ACE_RCSID(Big_Request_Muxing, Payload_Receiver, "$Id$") -Payload_Receiver::Payload_Receiver (int expected) - : message_count_ (0) - , expected_(expected) +Payload_Receiver::Payload_Receiver () + : message_count_ (0), + sync_none_message_count_ (0) { } @@ -22,8 +22,22 @@ Payload_Receiver::more_data (const Test::Payload& payload } } +void +Payload_Receiver::sync_none_more_data (const Test::Payload& payload + ACE_ENV_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + if (payload.length() > 0) + { + ++this->sync_none_message_count_; + } +} + int -Payload_Receiver::count() const +Payload_Receiver::count(bool sync_none) const { - return message_count_.value (); + if (sync_none) + return sync_none_message_count_.value (); + else + return message_count_.value (); } diff --git a/TAO/tests/Big_Request_Muxing/Payload_Receiver.h b/TAO/tests/Big_Request_Muxing/Payload_Receiver.h index d913da2a58f..130ebba266e 100644 --- a/TAO/tests/Big_Request_Muxing/Payload_Receiver.h +++ b/TAO/tests/Big_Request_Muxing/Payload_Receiver.h @@ -16,17 +16,22 @@ class Payload_Receiver : public virtual POA_Test::Payload_Receiver { public: - Payload_Receiver (int expected); + Payload_Receiver (); // = The skeleton methods virtual void more_data (const Test::Payload &payload ACE_ENV_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)); - int count() const; + virtual void sync_none_more_data (const Test::Payload &payload + ACE_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)); + + int count(bool sync_none = false) const; + private: ACE_Atomic_Op<TAO_SYNCH_MUTEX, int> message_count_; - int expected_; + ACE_Atomic_Op<TAO_SYNCH_MUTEX, int> sync_none_message_count_; }; #include /**/ "ace/post.h" diff --git a/TAO/tests/Big_Request_Muxing/Test.idl b/TAO/tests/Big_Request_Muxing/Test.idl index 090ce7c54ce..21068d3d9e4 100644 --- a/TAO/tests/Big_Request_Muxing/Test.idl +++ b/TAO/tests/Big_Request_Muxing/Test.idl @@ -10,5 +10,10 @@ module Test { /// Send the data using a twoway operat oneway void more_data (in Payload the_payload); + + /// operation used with SYNC_NONE clients. This is separated to avoid + /// error reporting due to dropped messages. Drops are allowed in the + /// sync_none case. + oneway void sync_none_more_data (in Payload the_payload); }; }; diff --git a/TAO/tests/Big_Request_Muxing/client.cpp b/TAO/tests/Big_Request_Muxing/client.cpp index eea6aab06f8..321eed0bd4a 100644 --- a/TAO/tests/Big_Request_Muxing/client.cpp +++ b/TAO/tests/Big_Request_Muxing/client.cpp @@ -43,7 +43,7 @@ parse_args (int argc, char *argv[]) int main (int argc, char *argv[]) { - ACE_DEBUG ((LM_DEBUG, "Starting client\n")); + ACE_DEBUG ((LM_DEBUG, "(%P) Starting client\n")); ACE_TRY_NEW_ENV { @@ -75,19 +75,22 @@ main (int argc, char *argv[]) NUM_MSGS, MSG_SIZE, orb.in (), - Messaging::SYNC_WITH_TARGET); + Messaging::SYNC_WITH_TARGET, + ACE_CString("Sync_With_Target")); Client_Task task1 (ACE_Thread_Manager::instance (), payload_receiver.in (), NUM_MSGS, MSG_SIZE, orb.in (), - Messaging::SYNC_WITH_TRANSPORT); + Messaging::SYNC_WITH_TRANSPORT, + ACE_CString("Sync_With_Transport")); Client_Task task2 (ACE_Thread_Manager::instance (), payload_receiver.in (), NUM_MSGS, MSG_SIZE, orb.in (), - Messaging::SYNC_NONE); + Messaging::SYNC_NONE, + ACE_CString("Sync_None")); ACE_DEBUG ((LM_DEBUG, "(%P) Activating threads in client\n")); if (task0.activate (THR_NEW_LWP | THR_JOINABLE, NUM_THRDS, 1) == -1) @@ -134,7 +137,7 @@ main (int argc, char *argv[]) } ACE_ENDTRY; - ACE_DEBUG ((LM_DEBUG, "Ending client\n")); + ACE_DEBUG ((LM_DEBUG, "(%P) Ending client\n")); return 0; } diff --git a/TAO/tests/Big_Request_Muxing/run_test.pl b/TAO/tests/Big_Request_Muxing/run_test.pl index b46b5ef428e..f0985f7c959 100755 --- a/TAO/tests/Big_Request_Muxing/run_test.pl +++ b/TAO/tests/Big_Request_Muxing/run_test.pl @@ -11,16 +11,17 @@ use PerlACE::Run_Test; $iorfile = PerlACE::LocalFile ("server.ior"); if (PerlACE::is_vxworks_test()) { - $SV = new PerlACE::ProcessVX ("server", "-o server.ior -e 1200"); + $SV = new PerlACE::ProcessVX ("server", "-o server.ior -e 800 -n 400"); } else { - $SV = new PerlACE::Process ("server", "-o $iorfile -e 1200"); + $SV = new PerlACE::Process ("server", "-o $iorfile -e 800 -n 400"); } $CL1 = new PerlACE::Process ("client", " -k file://$iorfile"); $CL2 = new PerlACE::Process ("client", " -k file://$iorfile"); for ($n = 0; $n < 10; ++$n) { print "=================================================================\n"; + print "test run $n\n"; unlink $iorfile; $SV->Spawn (); diff --git a/TAO/tests/Big_Request_Muxing/server.cpp b/TAO/tests/Big_Request_Muxing/server.cpp index 49e88b06fa6..6b134f43f55 100644 --- a/TAO/tests/Big_Request_Muxing/server.cpp +++ b/TAO/tests/Big_Request_Muxing/server.cpp @@ -8,12 +8,13 @@ ACE_RCSID(Big_Request_Muxing, server, "$Id$") const char *ior_output_file = "test.ior"; -static int expected = 600; +static int expected = 400; +static int sn_expected = 200; int parse_args (int argc, char *argv[]) { - ACE_Get_Opt get_opts (argc, argv, "o:e:"); + ACE_Get_Opt get_opts (argc, argv, "o:e:n:"); int c; while ((c = get_opts ()) != -1) @@ -25,11 +26,14 @@ parse_args (int argc, char *argv[]) case 'e': expected = ACE_OS::atoi(get_opts.opt_arg()); break; + case 'n': + sn_expected = ACE_OS::atoi(get_opts.opt_arg()); + break; case '?': default: ACE_ERROR_RETURN ((LM_ERROR, "usage: %s " - "-o <iorfile> [-e <expected>]" + "-o <iorfile> [-e <expected>] [-n <expected_sync_none>]" "\n", argv [0]), -1); @@ -71,7 +75,7 @@ main (int argc, char *argv[]) Payload_Receiver *payload_receiver_impl; ACE_NEW_RETURN (payload_receiver_impl, - Payload_Receiver(expected), + Payload_Receiver(), 1); PortableServer::ServantBase_var receiver_owner_transfer(payload_receiver_impl); @@ -98,30 +102,41 @@ main (int argc, char *argv[]) ACE_DEBUG((LM_DEBUG, "Server waiting for messages...\n")); - ACE_Time_Value end_time = ACE_OS::gettimeofday() + ACE_Time_Value(25); - - while (payload_receiver_impl->count() < expected) + ACE_Time_Value start_time = ACE_OS::gettimeofday(); + ACE_Time_Value end_time = start_time + ACE_Time_Value(10); + int count = payload_receiver_impl->count(); + int sn_count = payload_receiver_impl->count(true); + bool stalled = false; + while (payload_receiver_impl->count() < expected || + payload_receiver_impl->count(true) < sn_expected) { + int prev_count = count; + int sn_prev_count = sn_count; ACE_Time_Value tv(0, 100 * 1000); orb->run (tv ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; - if (ACE_OS::gettimeofday() > end_time) - break; + count = payload_receiver_impl->count(); + sn_count = payload_receiver_impl->count(true); + if ((count < expected && count == prev_count) || + (sn_count < sn_expected && sn_count == sn_prev_count)) + { + if (!stalled) + { + stalled = true; + end_time = ACE_OS::gettimeofday() + ACE_Time_Value(5); + } + else if (ACE_OS::gettimeofday() > end_time) + { + if (count < expected) + ACE_DEBUG ((LM_DEBUG,"Clients stalled out after %d messages\n", + count)); + break; + } + } + else stalled = false; } - int count = payload_receiver_impl->count(); - - if (count != expected) - { - ACE_DEBUG((LM_DEBUG, "Server waiting for extra messages, " - "have now %d messages already...\n", count)); - - ACE_Time_Value tv(5); - orb->run(tv ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - count = payload_receiver_impl->count(); - } + ACE_Time_Value runtime = ACE_OS::gettimeofday() - start_time; int result = 0; @@ -133,10 +148,13 @@ main (int argc, char *argv[]) result = 1; } + + ACE_DEBUG ((LM_DEBUG, - "(%P) - Server got %d messages, expected %d\n", - count, - expected)); + "(%P) - Server got %d of %d sync messages plus %d sync_none" + " in %d sec, %d usec\n", + count, expected, payload_receiver_impl->count(true), + runtime.sec(), runtime.usec())); root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; |