summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Mesnier <mesnier_p@ociweb.com>2006-06-09 14:43:06 +0000
committerPhil Mesnier <mesnier_p@ociweb.com>2006-06-09 14:43:06 +0000
commit7f4a673fc88567f8622dd84b9844faa61f20a58b (patch)
treea9c6fe93651bf62a06f6f5e15f6d1c4bf8705729
parenta9b68a3c160f1b701ff08f180f5b09298f03d9bf (diff)
downloadATCD-7f4a673fc88567f8622dd84b9844faa61f20a58b.tar.gz
ChangeLog tag: Fri Jun 9 14:35:56 UTC 2006 Phil Mesnier <mesnier_p@ociweb.com>
-rw-r--r--TAO/ChangeLog21
-rw-r--r--TAO/tests/Big_Request_Muxing/Client_Task.cpp47
-rw-r--r--TAO/tests/Big_Request_Muxing/Client_Task.h9
-rw-r--r--TAO/tests/Big_Request_Muxing/Payload_Receiver.cpp24
-rw-r--r--TAO/tests/Big_Request_Muxing/Payload_Receiver.h11
-rw-r--r--TAO/tests/Big_Request_Muxing/Test.idl5
-rw-r--r--TAO/tests/Big_Request_Muxing/client.cpp13
-rwxr-xr-xTAO/tests/Big_Request_Muxing/run_test.pl5
-rw-r--r--TAO/tests/Big_Request_Muxing/server.cpp68
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;