summaryrefslogtreecommitdiff
path: root/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed
diff options
context:
space:
mode:
Diffstat (limited to 'modules/CIAO/connectors/dds4ccm/performance-tests/Keyed')
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Base/Perf_Keyed_Test_Base.idl31
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Base/Perf_Keyed_Test_Base.mpc26
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Connector/Perf_Keyed_Test_Connector.idl31
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Connector/Perf_Keyed_Test_Connector.mpc145
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver.idl22
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver.mpc151
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver_exec.cpp198
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver_exec.h103
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender.idl33
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender.mpc149
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender_exec.cpp571
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender_exec.h181
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan.cdp492
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub.cdp344
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub3.cdp344
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub_BE.cdp344
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_sub.cdp246
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_sub_BE.cdp247
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/README24
-rw-r--r--modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/USER_QOS_PROFILES.xml125
-rwxr-xr-xmodules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub.pl219
-rwxr-xr-xmodules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub3.pl219
-rwxr-xr-xmodules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub_BE.pl219
-rwxr-xr-xmodules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub.pl219
-rwxr-xr-xmodules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub2.pl219
-rwxr-xr-xmodules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub3.pl219
-rwxr-xr-xmodules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub_BE.pl219
-rwxr-xr-xmodules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_test.pl221
28 files changed, 5561 insertions, 0 deletions
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Base/Perf_Keyed_Test_Base.idl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Base/Perf_Keyed_Test_Base.idl
new file mode 100644
index 00000000000..25f17bbb88b
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Base/Perf_Keyed_Test_Base.idl
@@ -0,0 +1,31 @@
+// $Id$
+
+/**
+ * @file Perf_Keyed_Test_Base.idl
+ * @author Marijke Hengstmengel <mhengstmengel@remedy.nl>
+ */
+
+#ifndef PERF_KEYED_TEST_BASE_IDL
+#define PERF_KEYED_TEST_BASE_IDL
+
+#pragma ndds typesupport "Base/Perf_Keyed_Test_BaseSupport.h"
+
+// Flag used to indicate message is used for initialization only
+const unsigned long INITIALIZE_SIZE = 1234;
+// Flag used to indicate end of test
+const unsigned long FINISHED_SIZE = 1235;
+const unsigned long OVERHEAD_BYTES = 31;
+
+struct PerfKeyedTest {
+ string key; //@key
+ long entity_id; //id of subscriber/publisher
+ unsigned long seq_num;
+ long latency_ping;
+ string bin_data;
+ unsigned long data_len;
+ unsigned long long nanotime;
+};
+
+typedef sequence<PerfKeyedTest> PerfKeyedTestSeq;
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Base/Perf_Keyed_Test_Base.mpc b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Base/Perf_Keyed_Test_Base.mpc
new file mode 100644
index 00000000000..a219c04cc49
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Base/Perf_Keyed_Test_Base.mpc
@@ -0,0 +1,26 @@
+// $Id$
+
+project (DDS_Perf_Keyed_Test_Base_stub) : taoidldefaults, anytypecode, dds4ccm_ts_default {
+ sharedname = DDS_Perf_Keyed_Test_Base_stub
+ dynamicflags += PERF_KEYED_TEST_BASE_STUB_BUILD_DLL
+ libout = ../lib
+
+ idlflags += -SS -Sci \
+ -Wb,stub_export_macro=PERF_KEYED_TEST_BASE_STUB_Export \
+ -Wb,stub_export_include=Perf_Keyed_Test_Base_stub_export.h
+
+ IDL_Files {
+ idlflags += -Gxhst
+ Perf_Keyed_Test_Base.idl
+ }
+
+ opendds_ts_flags += --export=PERF_KEYED_TEST_BASE_STUB_Export
+
+ DDSGenerator_Files {
+ Perf_Keyed_Test_Base.idl
+ }
+
+ Source_Files {
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Connector/Perf_Keyed_Test_Connector.idl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Connector/Perf_Keyed_Test_Connector.idl
new file mode 100644
index 00000000000..bf3106d96af
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Connector/Perf_Keyed_Test_Connector.idl
@@ -0,0 +1,31 @@
+// $Id$
+
+/**
+ * @file Perf_Keyed_Test_Connector.idl
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * by-hand translation of the idl3p.
+ */
+
+#ifndef PERF_KEYED_TEST_CONNECTOR_IDL_
+#define PERF_KEYED_TEST_CONNECTOR_IDL_
+
+#include <Components.idl>
+#include "Base/Perf_Keyed_Test_Base.idl"
+#include "connectors/dds4ccm/idl/ccm_dds.idl"
+
+#pragma ciao lem "Connector/Perf_Keyed_Test_ConnectorE.idl"
+
+module CCM_DDS
+{
+ module ::CCM_DDS::Typed < ::PerfKeyedTest, ::PerfKeyedTestSeq> PerfKeyedTest;
+};
+
+module Perf_Keyed_Test
+{
+ connector Perf_Keyed_Test_Connector : ::CCM_DDS::PerfKeyedTest::DDS_Event
+ {
+ };
+};
+
+#endif /* Perf_Keyed_Test_CONNECTOR_IDL_ */
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Connector/Perf_Keyed_Test_Connector.mpc b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Connector/Perf_Keyed_Test_Connector.mpc
new file mode 100644
index 00000000000..db7eb1cc6e5
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Connector/Perf_Keyed_Test_Connector.mpc
@@ -0,0 +1,145 @@
+// $Id$
+// This file is generated with "generate_component_mpc.pl -p DDS_Perf_Keyed_Test_Base -l .. -o ../lib -u DDS Perf_Keyed_Test_Connector"
+
+project(DDS_Perf_Keyed_Test_Connector_idl_gen) : connectoridldefaults, dds4ccm {
+ after += DDS4CCM_idl_gen
+ custom_only = 1
+ idlflags += -Wb,stub_export_macro=PERF_KEYED_TEST_CONNECTOR_STUB_Export \
+ -Wb,stub_export_include=Perf_Keyed_Test_Connector_stub_export.h \
+ -Wb,skel_export_macro=PERF_KEYED_TEST_CONNECTOR_SVNT_Export \
+ -Wb,skel_export_include=Perf_Keyed_Test_Connector_svnt_export.h \
+ -Wb,svnt_export_macro=PERF_KEYED_TEST_CONNECTOR_SVNT_Export \
+ -Wb,svnt_export_include=Perf_Keyed_Test_Connector_svnt_export.h \
+ -Wb,conn_export_macro=PERF_KEYED_TEST_CONNECTOR_CONN_Export \
+ -Wb,conn_export_include=Perf_Keyed_Test_Connector_conn_export.h \
+ -I ..
+
+ IDL_Files {
+ Perf_Keyed_Test_Connector.idl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Connector_lem_gen) : ciaoidldefaults, dds4ccm {
+ custom_only = 1
+ after += DDS_Perf_Keyed_Test_Connector_idl_gen
+ idlflags += -Wb,stub_export_macro=PERF_KEYED_TEST_CONNECTOR_LEM_STUB_Export \
+ -Wb,stub_export_include=Perf_Keyed_Test_Connector_lem_stub_export.h \
+ -SS -Gxhst \
+ -I ..
+
+ IDL_Files {
+ Perf_Keyed_Test_ConnectorE.idl
+ }
+}
+
+project(DDS_PK_Test_Connector_lem_stub) : ccm_svnt, dds4ccm_base {
+ after += DDS_Perf_Keyed_Test_Connector_lem_gen DDS_Perf_Keyed_Test_Connector_stub DDS_Perf_Keyed_Test_Base_stub DDS4CCM_lem_stub
+ libs += DDS_Perf_Keyed_Test_Base_stub DDS_Perf_Keyed_Test_Connector_stub DDS4CCM_lem_stub
+ libpaths += ../lib
+ libout = ../lib
+ includes += ..
+ sharedname = DDS_PK_Test_Connector_lem_stub
+ dynamicflags = PERF_KEYED_TEST_CONNECTOR_LEM_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_ConnectorEC.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_ConnectorEC.h
+ Perf_Keyed_Test_Connector_lem_stub_export.h
+ }
+
+ Inline_Files {
+ Perf_Keyed_Test_ConnectorEC.inl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Connector_stub) : ccm_stub, dds4ccm_base {
+ after += DDS_Perf_Keyed_Test_Connector_idl_gen DDS_Perf_Keyed_Test_Base_stub
+ libs += DDS_Perf_Keyed_Test_Base_stub
+ libpaths += ../lib
+ libout = ../lib
+ includes += ..
+ sharedname = DDS_Perf_Keyed_Test_Connector_stub
+ dynamicflags = PERF_KEYED_TEST_CONNECTOR_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_ConnectorC.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_ConnectorC.h
+ Perf_Keyed_Test_Connector_stub_export.h
+ }
+
+ Inline_Files {
+ Perf_Keyed_Test_ConnectorC.inl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Connector_exec) : ciao_executor, dds4ccm_impl {
+ after += DDS_PK_Test_Connector_lem_stub DDS_Perf_Keyed_Test_Connector_stub DDS4CCM_lem_stub
+ sharedname = DDS_Perf_Keyed_Test_Connector_exec
+ libs += DDS_Perf_Keyed_Test_Connector_stub DDS_PK_Test_Connector_lem_stub DDS_Perf_Keyed_Test_Base_stub DDS4CCM_lem_stub
+ libpaths += ../lib
+ libout = ../lib
+ includes += ..
+ dynamicflags = PERF_KEYED_TEST_CONNECTOR_CONN_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_Connector_conn.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_Connector_conn.h
+ Perf_Keyed_Test_Connector_conn_export.h
+ }
+
+ Inline_Files {
+ }
+}
+
+
+project(DDS_Perf_Keyed_Test_Connector_svnt) : ciao_servant, dds4ccm_skel {
+ after += DDS_PK_Test_Connector_lem_stub DDS_Perf_Keyed_Test_Connector_exec DDS_Perf_Keyed_Test_Connector_stub DDS4CCM_lem_stub
+ sharedname = DDS_Perf_Keyed_Test_Connector_svnt
+ libs += DDS_Perf_Keyed_Test_Connector_stub \
+ DDS_PK_Test_Connector_lem_stub \
+ DDS_Perf_Keyed_Test_Base_stub \
+ DDS_Perf_Keyed_Test_Connector_exec \
+ DDS4CCM_lem_stub
+ libpaths += ../lib
+ libout = ../lib
+ includes += ..
+ dynamicflags = PERF_KEYED_TEST_CONNECTOR_SVNT_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_ConnectorS.cpp
+ Perf_Keyed_Test_Connector_svnt.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_ConnectorS.h
+ Perf_Keyed_Test_Connector_svnt.h
+ Perf_Keyed_Test_Connector_svnt_export.h
+ }
+
+ Inline_Files {
+ Perf_Keyed_Test_ConnectorS.inl
+ }
+}
+
+
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver.idl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver.idl
new file mode 100644
index 00000000000..6a5617dd958
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver.idl
@@ -0,0 +1,22 @@
+// $Id$
+
+/**
+ * @file
+ * @author Marcel Smit <msmit@remedy.nl>
+ */
+
+#ifndef RECEIVER_IDL
+#define RECEIVER_IDL
+
+#include "Connector/Perf_Keyed_Test_Connector.idl"
+
+module Perf_Keyed_Test
+{
+ component Receiver
+ {
+ port CCM_DDS::PerfKeyedTest::DDS_Listen info_listen;
+ port CCM_DDS::PerfKeyedTest::DDS_Write write_ping;
+ };
+};
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver.mpc b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver.mpc
new file mode 100644
index 00000000000..e5b0379d8da
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver.mpc
@@ -0,0 +1,151 @@
+// $Id$
+
+project(DDS_Perf_Keyed_Test_Receiver_idl_gen) : componentidldefaults, dds4ccm {
+ custom_only = 1
+ after += DDS_Perf_Keyed_Test_Connector_idl_gen
+ idlflags += -Wb,stub_export_macro=RECEIVER_STUB_Export \
+ -Wb,stub_export_include=Receiver_stub_export.h \
+ -Wb,skel_export_macro=RECEIVER_SVNT_Export \
+ -Wb,skel_export_include=Receiver_svnt_export.h \
+ -Wb,svnt_export_macro=RECEIVER_SVNT_Export \
+ -Wb,svnt_export_include=Receiver_svnt_export.h \
+ -Wb,exec_export_macro=RECEIVER_EXEC_Export \
+ -Wb,exec_export_include=Receiver_exec_export.h -I..
+
+ IDL_Files {
+ Perf_Keyed_Test_Receiver.idl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Receiver_lem_gen) : ciaoidldefaults, dds4ccm {
+ after += DDS_Perf_Keyed_Test_Receiver_idl_gen
+ custom_only = 1
+ idlflags += -Wb,stub_export_macro=RECEIVER_LEM_STUB_Export \
+ -Wb,stub_export_include=Receiver_lem_stub_export.h \
+ -SS -Gxhst -I..
+
+ IDL_Files {
+ Perf_Keyed_Test_ReceiverE.idl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Receiver_lem_stub) : ccm_svnt, dds4ccm_base {
+ after += DDS_Perf_Keyed_Test_Receiver_lem_gen DDS_Perf_Keyed_Test_Receiver_stub \
+ DDS_Perf_Keyed_Test_Connector_stub DDS_Perf_Keyed_Test_Base_stub
+ libs += Receiver_stub DDS_Perf_Keyed_Test_Connector_stub \
+ DDS_Perf_Keyed_Test_Base_stub
+ libpaths += ../lib
+ libout = ../lib
+ includes += ..
+ sharedname = Receiver_lem_stub
+ dynamicflags = RECEIVER_LEM_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_ReceiverEC.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_ReceiverEC.h
+ Receiver_lem_stub_export.h
+ }
+
+ Inline_Files {
+ Perf_Keyed_Test_ReceiverEC.inl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Receiver_stub) : ccm_stub, dds4ccm_base {
+ after += DDS_Perf_Keyed_Test_Receiver_idl_gen DDS_Perf_Keyed_Test_Connector_stub \
+ DDS_Perf_Keyed_Test_Base_stub DDS_Perf_Keyed_Test_Connector_lem_gen
+ libs += DDS_Perf_Keyed_Test_Connector_stub DDS_Perf_Keyed_Test_Base_stub
+ libpaths += ../lib
+ libout = ../lib
+ includes += ..
+ sharedname = Receiver_stub
+ dynamicflags = RECEIVER_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_ReceiverC.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_ReceiverC.h
+ Receiver_stub_export.h
+ }
+
+ Inline_Files {
+ Perf_Keyed_Test_ReceiverC.inl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Receiver_exec) : ciao_executor, dds4ccm_base {
+ after += DDS_Perf_Keyed_Test_Receiver_lem_stub DDS_Perf_Keyed_Test_Receiver_stub \
+ DDS_Perf_Keyed_Test_Base_stub DDS_Perf_Keyed_Test_Connector_stub \
+ DDS_PK_Test_Connector_lem_stub DDS4CCM_lem_stub
+ sharedname = Receiver_exec
+ libs += Receiver_stub Receiver_lem_stub DDS_Perf_Keyed_Test_Base_stub \
+ DDS_Perf_Keyed_Test_Connector_stub DDS_PK_Test_Connector_lem_stub \
+ DDS4CCM_lem_stub
+ libpaths += ../lib
+ libout = ../lib
+ includes += ..
+ dynamicflags = RECEIVER_EXEC_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_Receiver_exec.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_Receiver_exec.h
+ Receiver_exec_export.h
+ }
+
+ Inline_Files {
+ }
+}
+
+
+project(DDS_Perf_Keyed_Test_Receiver_svnt) : ciao_servant, dds4ccm_base {
+ after += DDS_Perf_Keyed_Test_Receiver_lem_stub DDS_Perf_Keyed_Test_Base_stub \
+ DDS_Perf_Keyed_Test_Connector_stub DDS_Perf_Keyed_Test_Connector_svnt \
+ DDS_Perf_Keyed_Test_Receiver_exec DDS_PK_Test_Connector_lem_stub \
+ DDS4CCM_lem_stub DDS4CCM_skel
+ sharedname = Receiver_svnt
+ libs += Receiver_stub Receiver_lem_stub DDS_Perf_Keyed_Test_Base_stub \
+ DDS_Perf_Keyed_Test_Connector_stub DDS_Perf_Keyed_Test_Connector_svnt \
+ Receiver_exec DDS_PK_Test_Connector_lem_stub DDS4CCM_lem_stub \
+ DDS4CCM_skel
+ libpaths += ../lib
+ libout = ../lib
+ includes += ..
+ dynamicflags = RECEIVER_SVNT_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_ReceiverS.cpp
+ Perf_Keyed_Test_Receiver_svnt.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_ReceiverS.h
+ Perf_Keyed_Test_Receiver_svnt.h
+ Receiver_svnt_export.h
+ }
+
+ Inline_Files {
+ Perf_Keyed_Test_ReceiverS.inl
+ }
+}
+
+
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver_exec.cpp b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver_exec.cpp
new file mode 100644
index 00000000000..988740477eb
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver_exec.cpp
@@ -0,0 +1,198 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#include "Perf_Keyed_Test_Receiver_exec.h"
+#include "ciao/Logger/Log_Macros.h"
+#include "ace/High_Res_Timer.h"
+
+namespace CIAO_Perf_Keyed_Test_Receiver_Impl
+{
+ //============================================================
+ // PerfKeyedTest_Listener_exec_i
+ //============================================================
+ PerfKeyedTest_Listener_exec_i::PerfKeyedTest_Listener_exec_i (
+ Receiver_exec_i &callback)
+ : callback_ (callback)
+ {
+ }
+
+ PerfKeyedTest_Listener_exec_i::~PerfKeyedTest_Listener_exec_i (void)
+ {
+ }
+
+ void
+ PerfKeyedTest_Listener_exec_i::on_one_data (
+ const PerfKeyedTest & an_instance,
+ const ::CCM_DDS::ReadInfo & /*info*/)
+ {
+
+ // Record time, not for ping messages , already pinged back.
+ if (an_instance.latency_ping != -1L)
+ {
+ this->callback_.record_time (an_instance.data_len);
+ }
+
+ // Send back a packet if this is a ping
+ if (an_instance.latency_ping == 1L)
+ {
+ this->callback_.write_one(const_cast<PerfKeyedTest&> (an_instance));
+ }
+ }
+
+ void
+ PerfKeyedTest_Listener_exec_i::on_many_data (
+ const PerfKeyedTestSeq & /*an_instance*/,
+ const ::CCM_DDS::ReadInfoSeq & /*info*/)
+ {
+ }
+
+ //============================================================
+ // Receiver_exec_i
+ //============================================================
+ Receiver_exec_i::Receiver_exec_i (void)
+ : count_ (0L),
+ interval_time_(0L),
+ interval_messages_received_(0L),
+ messages_received_(0L),
+ interval_bytes_received_(0L),
+ bytes_received_(0L),
+ interval_data_length_(0L),
+ first_time_ (0L),
+ finished_(false)
+ {
+ }
+
+ Receiver_exec_i::~Receiver_exec_i (void)
+ {
+ }
+
+ void
+ Receiver_exec_i::write_one ( PerfKeyedTest & an_instance)
+ {
+ an_instance.latency_ping = -1L;
+ this->writer_->write_one (an_instance, ::DDS::HANDLE_NIL);
+ }
+
+ void
+ Receiver_exec_i::start ()
+ {
+ ::CCM_DDS::DataListenerControl_var dlc =
+ this->context_->get_connection_info_listen_data_control ();
+ dlc->mode (::CCM_DDS::ONE_BY_ONE);
+ }
+
+ void
+ Receiver_exec_i::record_time (unsigned long datalen)
+ {
+ ++this->count_;
+ if( datalen == INITIALIZE_SIZE)
+ {
+ // store the info for this interval
+ ACE_High_Res_Timer::gettimeofday_hr ().to_usec (this->first_time_);
+ this->messages_received_=1;
+ }
+ else if ( datalen == FINISHED_SIZE)
+ { // store the info for this interval
+ ACE_UINT64 last_time;
+ ACE_High_Res_Timer::gettimeofday_hr ().to_usec (last_time);
+ this->interval_time_ = (last_time - this->first_time_);
+ this->interval_messages_received_ = ++this->messages_received_;
+ this->interval_bytes_received_ = this->bytes_received_;
+ this->finished_ = true;
+ }
+ else
+ {
+ ++this->messages_received_;
+ this->interval_data_length_ = datalen + OVERHEAD_BYTES;
+ this->bytes_received_ += datalen + OVERHEAD_BYTES;
+ }
+ }
+
+ ::CCM_DDS::PerfKeyedTest::CCM_Listener_ptr
+ Receiver_exec_i::get_info_listen_data_listener (void)
+ {
+ return new PerfKeyedTest_Listener_exec_i (*this);
+ }
+
+ ::CCM_DDS::CCM_PortStatusListener_ptr
+ Receiver_exec_i::get_info_listen_status (void)
+ {
+ return ::CCM_DDS::CCM_PortStatusListener::_nil ();
+ }
+
+ void
+ Receiver_exec_i::set_session_context (
+ ::Components::SessionContext_ptr ctx)
+ {
+ this->context_ =
+ ::Perf_Keyed_Test::CCM_Receiver_Context::_narrow (ctx);
+ if ( ::CORBA::is_nil (this->context_.in ()))
+ {
+ throw ::CORBA::INTERNAL ();
+ }
+ }
+
+ void
+ Receiver_exec_i::configuration_complete (void)
+ {
+ (void) ACE_High_Res_Timer::global_scale_factor ();
+ // enable the datalistener
+ this->start();
+ }
+
+ void
+ Receiver_exec_i::ccm_activate (void)
+ {
+ this->writer_ = this->context_->get_connection_write_ping_data ();
+ }
+
+ void
+ Receiver_exec_i::ccm_passivate (void)
+ {
+ if(!this->finished_.value()) // proces ended before received last message
+ {
+ ACE_UINT64 last_time;
+ ACE_High_Res_Timer::gettimeofday_hr ().to_usec (last_time);
+ this->interval_time_ = (last_time - this->first_time_);
+ this->interval_messages_received_ = ++this->messages_received_;
+ this->interval_bytes_received_ = this->bytes_received_;
+ }
+ if ((this->count_.value () > 0) && (this->interval_time_ > 0))
+ {
+ double per_sec = (double)1000000/ this->interval_time_;
+ double mbps =
+ (this->interval_bytes_received_.value()* per_sec)* (8.0/1000.0/1000.0);
+ ACE_DEBUG((LM_DEBUG, "SUMMARY RECEIVER:\n "
+ "Data Length: %u Messages: %u Messages/s(ave): "
+ "%6.01f, Mbps(ave): %7.01f \n",
+ this->interval_data_length_.value(),
+ this->interval_messages_received_.value(),
+ this->interval_messages_received_.value()* per_sec,
+ mbps));
+ }
+ else
+ {
+ ACE_DEBUG((LM_DEBUG, "SUMMARY RECEIVER:\n "
+ "No samples received\n "));
+ }
+ }
+
+ void
+ Receiver_exec_i::ccm_remove (void)
+ {
+ }
+
+ extern "C" RECEIVER_EXEC_Export ::Components::EnterpriseComponent_ptr
+ create_Perf_Keyed_Test_Receiver_Impl (void)
+ {
+ ::Components::EnterpriseComponent_ptr retval =
+ ::Components::EnterpriseComponent::_nil ();
+
+ ACE_NEW_NORETURN (
+ retval,
+ Receiver_exec_i);
+
+ return retval;
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver_exec.h b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver_exec.h
new file mode 100644
index 00000000000..9a290f7a311
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Receiver/Perf_Keyed_Test_Receiver_exec.h
@@ -0,0 +1,103 @@
+// -*- C++ -*-
+// $Id$
+
+#ifndef CIAO_RECEIVER_EXEC_H_
+#define CIAO_RECEIVER_EXEC_H_
+
+#include "Perf_Keyed_Test_ReceiverEC.h"
+
+#include /**/ "Receiver_exec_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/LocalObject.h"
+#include "ace/Reactor.h"
+#include "ace/Task.h"
+
+#include <map>
+
+namespace CIAO_Perf_Keyed_Test_Receiver_Impl
+{
+ class Receiver_exec_i;
+ typedef ACE_Atomic_Op <TAO_SYNCH_MUTEX, CORBA::ULong> Atomic_ULong;
+ typedef ACE_Atomic_Op <TAO_SYNCH_MUTEX, bool> Atomic_Bool;
+ typedef ACE_Atomic_Op <TAO_SYNCH_MUTEX, CORBA::Long> Atomic_Long;
+
+
+ //============================================================
+ // PerfKeyedTest_Listener_exec_i
+ //============================================================
+ class RECEIVER_EXEC_Export PerfKeyedTest_Listener_exec_i
+ : public virtual ::CCM_DDS::PerfKeyedTest::CCM_Listener,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ PerfKeyedTest_Listener_exec_i (Receiver_exec_i &callback);
+ virtual ~PerfKeyedTest_Listener_exec_i (void);
+
+ virtual void
+ on_one_data (
+ const PerfKeyedTest & an_instance,
+ const ::CCM_DDS::ReadInfo & info);
+ virtual void
+ on_many_data (
+ const PerfKeyedTestSeq & an_instance,
+ const ::CCM_DDS::ReadInfoSeq & info);
+ private:
+ Receiver_exec_i &callback_;
+ };
+
+ //============================================================
+ // Receiver_exec_i
+ //============================================================
+ class RECEIVER_EXEC_Export Receiver_exec_i
+ : public virtual Receiver_Exec,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ Receiver_exec_i (void);
+ virtual ~Receiver_exec_i (void);
+
+ void start ();
+ void record_time (unsigned long datalen);
+
+ virtual ::CCM_DDS::PerfKeyedTest::CCM_Listener_ptr
+ get_info_listen_data_listener (void);
+
+ virtual ::CCM_DDS::CCM_PortStatusListener_ptr
+ get_info_listen_status (void);
+
+ virtual void
+ set_session_context (
+ ::Components::SessionContext_ptr ctx);
+
+ virtual void configuration_complete (void);
+ virtual void ccm_activate (void);
+ virtual void ccm_passivate (void);
+ virtual void ccm_remove (void);
+
+ void write_one (PerfKeyedTest & an_instance);
+
+ private:
+ ::Perf_Keyed_Test::CCM_Receiver_Context_var context_;
+ CCM_DDS::PerfKeyedTest::Writer_var writer_;
+
+ Atomic_ULong count_;
+ ACE_UINT64 interval_time_;
+ Atomic_Long interval_messages_received_;
+ Atomic_Long messages_received_;
+ Atomic_Long interval_bytes_received_;
+ Atomic_Long bytes_received_;
+ Atomic_Long interval_data_length_;
+ ACE_UINT64 first_time_;
+ Atomic_Bool finished_;
+
+ };
+
+ extern "C" RECEIVER_EXEC_Export ::Components::EnterpriseComponent_ptr
+ create_Perf_Keyed_Test_Receiver_Impl (void);
+}
+
+#endif /* ifndef */
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender.idl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender.idl
new file mode 100644
index 00000000000..b5ac3c307cb
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender.idl
@@ -0,0 +1,33 @@
+// $Id$
+
+/**
+ * @file
+ * @author Marijke Hengstmengel <mhengstmengel@remedy.nl>
+ *
+ * by-hand idl3 translation of sender components.
+ */
+
+#ifndef DDS_PERF_KEYED_TEST_SENDER_IDL
+#define DDS_PERF_KEYED_TEST_SENDER_IDL
+
+#include "Connector/Perf_Keyed_Test_Connector.idl"
+
+
+module Perf_Keyed_Test
+{
+ component Sender
+ {
+ port CCM_DDS::PerfKeyedTest::DDS_Write info_write;
+ attribute unsigned short keys;
+ attribute unsigned long iterations;
+ attribute unsigned short latency_count; //number of samples sent before a latency ping packet is sent. default 100000, < sample_count
+ attribute unsigned short sleep; //time in ms to sleep between each send
+ attribute unsigned short spin;
+ attribute unsigned short datalen; //minimal 32
+ attribute unsigned short number_of_sub; //number of subscribers
+ provides CCM_DDS::ConnectorStatusListener connector_status;
+ port CCM_DDS::PerfKeyedTest::DDS_Listen ping_listen;
+ };
+};
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender.mpc b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender.mpc
new file mode 100644
index 00000000000..ef148c28cd1
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender.mpc
@@ -0,0 +1,149 @@
+// $Id$
+// This file is generated with "generate_component_mpc.pl -p DDS_Perf_Keyed_Test_Base -l ../lib -o ../lib -c controller -u DDS Sender"
+
+project(DDS_Perf_Keyed_Test_Sender_idl_gen) : componentidldefaults, dds4ccm {
+ after += DDS_Perf_Keyed_Test_Connector_idl_gen DDS_Starter_idl_gen
+ custom_only = 1
+ idlflags += -Wb,stub_export_macro=SENDER_STUB_Export \
+ -Wb,stub_export_include=Sender_stub_export.h \
+ -Wb,skel_export_macro=SENDER_SVNT_Export \
+ -Wb,skel_export_include=Sender_svnt_export.h \
+ -Wb,svnt_export_macro=SENDER_SVNT_Export \
+ -Wb,svnt_export_include=Sender_svnt_export.h \
+ -Wb,exec_export_macro=SENDER_EXEC_Export \
+ -Wb,exec_export_include=Sender_exec_export.h \
+ -I ..
+
+ IDL_Files {
+ Perf_Keyed_Test_Sender.idl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Sender_lem_gen) : ciaoidldefaults, dds4ccm {
+ after += DDS_Perf_Keyed_Test_Sender_idl_gen
+ custom_only = 1
+ idlflags += -Wb,stub_export_macro=SENDER_LEM_STUB_Export \
+ -Wb,stub_export_include=Sender_lem_stub_export.h \
+ -SS -Gxhst -I $CIAO_ROOT/connectors -I ..
+
+ IDL_Files {
+ Perf_Keyed_Test_SenderE.idl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Sender_lem_stub) : ccm_svnt, dds4ccm_base {
+ after += DDS_Perf_Keyed_Test_Sender_lem_gen DDS_Perf_Keyed_Test_Sender_stub \
+ DDS_Perf_Keyed_Test_Base_stub
+ libs += DDS_Perf_Keyed_Test_Base_stub Sender_stub
+ libpaths += ../lib
+ libout = ../lib
+ includes += ..
+ sharedname = Sender_lem_stub
+ dynamicflags = SENDER_LEM_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_SenderEC.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_SenderEC.h
+ Sender_lem_stub_export.h
+ }
+
+ Inline_Files {
+ Perf_Keyed_Test_SenderEC.inl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Sender_stub) : ccm_stub, dds4ccm_base {
+ after += DDS_Perf_Keyed_Test_Sender_idl_gen DDS_Perf_Keyed_Test_Base_stub \
+ DDS_Perf_Keyed_Test_Connector_stub
+ libs += DDS_Perf_Keyed_Test_Base_stub DDS_Perf_Keyed_Test_Connector_stub
+ includes += ..
+ libpaths += ../lib
+ libout = ../lib
+ sharedname = Sender_stub
+ dynamicflags = SENDER_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_SenderC.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_SenderC.h
+ Sender_stub_export.h
+ }
+
+ Inline_Files {
+ Perf_Keyed_Test_SenderC.inl
+ }
+}
+
+project(DDS_Perf_Keyed_Test_Sender_exec) : ciao_executor, dds4ccm_base {
+ after += DDS_Perf_Keyed_Test_Sender_lem_stub DDS_Perf_Keyed_Test_Sender_stub \
+ DDS_PK_Test_Connector_lem_stub DDS_Perf_Keyed_Test_Connector_stub \
+ DDS4CCM_lem_stub
+ sharedname = Sender_exec
+ libs += Sender_stub Sender_lem_stub DDS_Perf_Keyed_Test_Base_stub \
+ DDS_PK_Test_Connector_lem_stub DDS_Perf_Keyed_Test_Connector_stub \
+ DDS4CCM_lem_stub
+ libpaths += ../lib
+ includes += ..
+ libout = ../lib
+ dynamicflags = SENDER_EXEC_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_Sender_exec.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_Sender_exec.h
+ Sender_exec_export.h
+ }
+
+ Inline_Files {
+ }
+}
+
+
+project(DDS_Perf_Keyed_Test_Sender_svnt) : ciao_servant, dds4ccm_base {
+ after += DDS_Perf_Keyed_Test_Base_stub DDS_Perf_Keyed_Test_Sender_lem_stub \
+ DDS4CCM_lem_stub DDS4CCM_skel DDS_Perf_Keyed_Test_Connector_stub \
+ DDS_Perf_Keyed_Test_Connector_svnt DDS_PK_Test_Connector_lem_stub
+ sharedname = Sender_svnt
+ libs += Sender_stub Sender_lem_stub DDS_Perf_Keyed_Test_Base_stub DDS4CCM_lem_stub \
+ DDS4CCM_skel DDS_Perf_Keyed_Test_Connector_stub DDS_Perf_Keyed_Test_Connector_svnt \
+ DDS_PK_Test_Connector_lem_stub
+ libpaths += ../lib
+ libout = ../lib
+ includes += ..
+ dynamicflags = SENDER_SVNT_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Perf_Keyed_Test_SenderS.cpp
+ Perf_Keyed_Test_Sender_svnt.cpp
+ }
+
+ Header_Files {
+ Perf_Keyed_Test_SenderS.h
+ Perf_Keyed_Test_Sender_svnt.h
+ Sender_svnt_export.h
+ }
+
+ Inline_Files {
+ Perf_Keyed_Test_SenderS.inl
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender_exec.cpp b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender_exec.cpp
new file mode 100644
index 00000000000..3d0505507fb
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender_exec.cpp
@@ -0,0 +1,571 @@
+// -*- C++ -*-
+// $Id$
+
+#include "Perf_Keyed_Test_Sender_exec.h"
+#include "ciao/Logger/Log_Macros.h"
+#include "tao/ORB_Core.h"
+#include "ace/Timer_Queue.h"
+#include "ace/Reactor.h"
+#include "ace/High_Res_Timer.h"
+
+
+namespace CIAO_Perf_Keyed_Test_Sender_Impl
+{
+ //============================================================
+ // PerfKeyedTest_Listener_exec_i
+ //============================================================
+ PerfKeyedTest_Listener_exec_i::PerfKeyedTest_Listener_exec_i (
+ Sender_exec_i &callback)
+ : callback_ (callback)
+ {
+ }
+
+ PerfKeyedTest_Listener_exec_i::~PerfKeyedTest_Listener_exec_i (void)
+ {
+ }
+
+ //read messages, only 'ping'messages (ping = -1) which returned from the subscribers, to measure latency time are important.
+ void
+ PerfKeyedTest_Listener_exec_i::on_one_data (
+ const PerfKeyedTest & an_instance,
+ const ::CCM_DDS::ReadInfo & /*info*/)
+ {
+ //only interested in messages received with a latency_ping = -1 ('ping'messages)
+ if( an_instance.latency_ping == -1)
+ {
+ this->callback_.record_time (an_instance.nanotime);
+ }
+ }
+
+ void
+ PerfKeyedTest_Listener_exec_i::on_many_data (
+ const PerfKeyedTestSeq & /*an_instance*/,
+ const ::CCM_DDS::ReadInfoSeq & /*info*/)
+ {
+ }
+ //============================================================
+ // Facet Executor Implementation Class: ConnectorStatusListener_exec_i
+ //============================================================
+ ConnectorStatusListener_exec_i::ConnectorStatusListener_exec_i (Atomic_Boolean &matched, int number_of_subscribers, Sender_exec_i &callback)
+ : callback_ (callback),
+ matched_ (matched),
+ number_of_subscribers_ (number_of_subscribers)
+ {
+ }
+
+ ConnectorStatusListener_exec_i::~ConnectorStatusListener_exec_i (void)
+ {
+ }
+
+ // Operations from ::CCM_DDS::ConnectorStatusListener
+ void ConnectorStatusListener_exec_i::on_inconsistent_topic(
+ ::DDS::Topic_ptr /*the_topic*/,
+ const DDS::InconsistentTopicStatus & /*status*/)
+ {
+ }
+
+ void ConnectorStatusListener_exec_i::on_requested_incompatible_qos(
+ ::DDS::DataReader_ptr /*the_reader*/,
+ const DDS::RequestedIncompatibleQosStatus & /*status*/)
+ {
+ }
+
+ void ConnectorStatusListener_exec_i::on_sample_rejected(
+ ::DDS::DataReader_ptr /*the_reader*/,
+ const DDS::SampleRejectedStatus & /*status*/)
+ {
+ }
+
+ void ConnectorStatusListener_exec_i::on_offered_deadline_missed(
+ ::DDS::DataWriter_ptr /*the_writer*/,
+ const DDS::OfferedDeadlineMissedStatus & /*status*/)
+ {
+ }
+
+ void ConnectorStatusListener_exec_i::on_offered_incompatible_qos(
+ ::DDS::DataWriter_ptr /*the_writer*/,
+ const DDS::OfferedIncompatibleQosStatus & /*status*/)
+ {
+ }
+
+ void ConnectorStatusListener_exec_i::on_unexpected_status(
+ ::DDS::Entity_ptr the_entity,
+ ::DDS::StatusKind status_kind)
+ {
+ CORBA::ULong kind = status_kind;
+ if((! ::CORBA::is_nil(the_entity)) &&
+ (kind==DDS::PUBLICATION_MATCHED_STATUS))
+ {
+ ::DDS::PublicationMatchedStatus_var stat;
+ DDS::DataWriter_var wr = ::DDS::DataWriter::_narrow(the_entity);
+ if(::CORBA::is_nil(wr))
+ {
+ throw ::CORBA::INTERNAL ();
+ }
+ ::DDS::ReturnCode_t retval = wr->get_publication_matched_status(stat.out ());
+ if (retval == DDS::RETCODE_OK)
+ {
+
+ if((stat.in().current_count >=
+ (this->number_of_subscribers_ + 1)) &&
+ !this->matched_.value())
+ {
+ this->matched_ = true;
+ this->callback_.start();
+ }
+ }
+ }
+ }
+
+ //============================================================
+ // WriteTickerHandler
+ //============================================================
+ WriteTicker::WriteTicker (Sender_exec_i &callback)
+ : callback_ (callback)
+ {
+ }
+
+ int
+ WriteTicker::handle_timeout (const ACE_Time_Value &, const void *)
+ {
+ // Notify the subscribers
+ this->callback_.write_one ();
+ return 0;
+ }
+
+ //============================================================
+ // Component Executor Implementation Class: Sender_exec_i
+ //============================================================
+ Sender_exec_i::Sender_exec_i (void)
+ : iterations_ (1000),
+ keys_ (1),
+ latency_count_(100),
+ sleep_(10),
+ spin_(100),
+ datalen_(100),
+ matched_(false),
+ number_of_subscribers_(1),
+ tv_total_ (0L),
+ tv_max_ (0L),
+ tv_min_ (0L),
+ count_ (0), // Number of returned pings
+ number_of_msg_(0), // Number of sent messages
+ timer_(false)
+ {
+ this->ticker_ = new WriteTicker (*this);
+ }
+
+ Sender_exec_i::~Sender_exec_i (void)
+ {
+ }
+
+ void
+ Sender_exec_i::write_one (void)
+ {
+ if( this->number_of_msg_ == 0)
+ {
+ //first message
+ this->last_key_->second->data_len = INITIALIZE_SIZE;
+ this->last_key_->second->bin_data = CORBA::string_alloc(0);
+
+ }
+ else if((this->iterations_ != 0) &&
+ (this->number_of_msg_ == ((this->iterations_ * this->keys_) -1)))
+ {
+ //last message
+ this->last_key_->second->data_len = FINISHED_SIZE;
+ this->last_key_->second->bin_data = CORBA::string_alloc(0);
+
+ }
+ else
+ {
+ this->last_key_->second->data_len = this->datalen_;
+ this->last_key_->second->bin_data = CORBA::string_alloc(this->datalen_);
+ }
+
+ if((this->iterations_ != 0) && (this->number_of_msg_ >=
+ (this->iterations_ * this->keys_)))
+ {
+ this->context_->get_CCM_object()->_get_orb ()->orb_core ()->reactor ()->cancel_timer (this->ticker_);
+ this->timer_ = false;
+ }
+ else
+ {
+ try
+ {
+ this->last_key_->second->seq_num = this->number_of_msg_;
+ // Send some messages (latency_ping = 1L) with indicator that
+ // message has to be returned by the subscriber
+ // TO DO : use other selection if more then one key is used.
+ if (( this->number_of_msg_ % this->latency_count_) == 0)
+ {
+ this->last_key_->second->latency_ping = 1L;
+ ACE_High_Res_Timer::gettimeofday_hr ().to_usec (
+ this->last_key_->second->nanotime);
+ }
+ else
+ {
+ this->last_key_->second->latency_ping = 0L;
+ }
+
+ this->writer_->write_one (this->last_key_->second,
+ ::DDS::HANDLE_NIL);
+ }
+ catch (const CCM_DDS::InternalError& )
+ {
+ ACE_ERROR ((LM_ERROR, ACE_TEXT ("ERROR: Internal Error ")
+ ACE_TEXT ("while writing a sample.\n")));
+ }
+ ++this->last_key_;
+ ++this->number_of_msg_;
+
+ if (this->last_key_ == this->samples_.end ())
+ {
+ // start over again.
+ this->last_key_ = this->samples_.begin ();
+ }
+ }
+ }
+
+ void
+ Sender_exec_i::write_one_with_spin (void)
+ {
+ double ad, bd, cd;
+ volatile double * a, * b, * c;
+
+ a = &ad;
+ b = &bd;
+ c = &cd;
+
+ for (long loop=0; (this->iterations_ == 0)||(loop <this->iterations_);
+ ++loop )
+ {
+ if ( this->spin_ > 0 )
+ {
+ // spin, spin, spin
+ for (int m=0; m<this->spin_; ++m) {
+ *a = 1.1;
+ *b = 3.1415;
+ *c = *a/(*b)*m;
+ }
+ }
+ if( this->number_of_msg_ == 0)
+ {
+ // first message
+ this->last_key_->second->data_len = INITIALIZE_SIZE;
+ this->last_key_->second->bin_data = CORBA::string_alloc(0);
+
+ }
+ else if( (this->iterations_ != 0) &&
+ (this->number_of_msg_ ==
+ ((this->iterations_ * this->keys_) -1)))
+ {
+ // last message
+ this->last_key_->second->data_len = FINISHED_SIZE;
+ this->last_key_->second->bin_data = CORBA::string_alloc(0);
+
+ }
+ else
+ {
+ this->last_key_->second->data_len = this->datalen_;
+ this->last_key_->second->bin_data =
+ CORBA::string_alloc(this->datalen_);
+ }
+ try
+ {
+ this->last_key_->second->seq_num = loop;
+ this->last_key_->second->latency_ping = 0L;
+
+ // if ping required
+ if (( this->number_of_msg_ % this->latency_count_) == 0)
+ {
+ // send some messages (latency_ping = 1L) with indicator that
+ // message has to be returned by the subscriber
+ this->last_key_->second->latency_ping = 1L;
+ ACE_High_Res_Timer::gettimeofday_hr ().to_usec (
+ this->last_key_->second->nanotime);
+ }
+ this->writer_->write_one (this->last_key_->second,
+ ::DDS::HANDLE_NIL);
+ }
+ catch (const CCM_DDS::InternalError& )
+ {
+ ACE_ERROR ((LM_ERROR, ACE_TEXT ("ERROR: Internal Error ")
+ ACE_TEXT ("while updating writer info for <%C>.\n"),
+ this->last_key_->first.c_str ()));
+ }
+ ++this->last_key_;
+ if (this->last_key_ == this->samples_.end ())
+ { // onto the next iteration
+ this->last_key_ = this->samples_.begin ();
+ }
+ ++this->number_of_msg_;
+ }
+ }
+
+ ::CCM_DDS::CCM_ConnectorStatusListener_ptr
+ Sender_exec_i::get_connector_status (void)
+ {
+ return new ConnectorStatusListener_exec_i (this->matched_,
+ this->number_of_subscribers_,
+ *this);
+ }
+
+ ::CCM_DDS::PerfKeyedTest::CCM_Listener_ptr
+ Sender_exec_i::get_ping_listen_data_listener (void)
+ {
+ return new PerfKeyedTest_Listener_exec_i (*this);
+ }
+
+ ::CCM_DDS::CCM_PortStatusListener_ptr
+ Sender_exec_i::get_ping_listen_status (void)
+ {
+ return ::CCM_DDS::CCM_PortStatusListener::_nil ();
+ }
+
+ void
+ Sender_exec_i::start (void)
+ {
+ for (CORBA::UShort i = 1; i < this->keys_ + 1; ++i)
+ {
+ char key[7];
+ PerfKeyedTest *new_key = new PerfKeyedTest;
+ ACE_OS::sprintf (key, "KEY_%d", i);
+ new_key->key = CORBA::string_dup(key);
+ new_key->seq_num = 0;
+ ::CORBA::ULong length = this->datalen_;
+ new_key->data_len = length;
+ new_key->bin_data = CORBA::string_alloc(length);
+ this->samples_[key] = new_key;
+ }
+ this->last_key_ = this->samples_.begin ();
+ // this->sleep_ is in ms
+ unsigned int sec = this->sleep_/1000;
+ unsigned int usec = (this->sleep_ % 1000) * 1000;
+
+ // if sleep and spin both > 0, use sleep value and ignore spin value
+ if(this->sleep_ > 0) // use reactor timer to sleep
+ {
+ (void) ACE_High_Res_Timer::global_scale_factor ();
+ this->context_->get_CCM_object()->_get_orb ()->orb_core ()->reactor ()->timer_queue()->gettimeofday (&ACE_High_Res_Timer::gettimeofday_hr);
+ if (this->context_->get_CCM_object()->_get_orb ()->orb_core ()->reactor ()->schedule_timer(
+ this->ticker_,
+ 0,
+ ACE_Time_Value (5, 0),
+ ACE_Time_Value (sec, usec)) == -1)
+ {
+ ACE_ERROR ((LM_ERROR, ACE_TEXT ("Sender_exec_i::start : ")
+ ACE_TEXT ("Error scheduling timer")));
+ }
+ this->timer_ = true;
+ }
+ else //use spin i.o sleep
+ {
+ ACE_OS::sleep(5);
+ this->write_one_with_spin();
+ }
+ }
+
+void
+Sender_exec_i::record_time (unsigned long long nanotime)
+ {
+ ACE_UINT64 testend;
+ ACE_High_Res_Timer::gettimeofday_hr ().to_usec (testend);
+ ACE_UINT64 interval = (testend - nanotime);
+
+ ++this->count_;
+ long duration = static_cast <CORBA::Long>(interval);
+ this->tv_total_ += duration;
+ if (duration > this->tv_max_.value ()|| (this->tv_max_.value () == 0L))
+ this->tv_max_ = duration;
+ if (duration < this->tv_min_.value () || (this->tv_min_.value () == 0L))
+ this->tv_min_ = duration;
+ }
+
+ ::CORBA::ULong
+ Sender_exec_i::iterations (void)
+ {
+ return this->iterations_;
+ }
+
+ void
+ Sender_exec_i::iterations (::CORBA::ULong iterations)
+ {
+ this->iterations_ = iterations;
+ }
+
+ ::CORBA::UShort
+ Sender_exec_i::keys (void)
+ {
+ return this->keys_;
+ }
+
+ void
+ Sender_exec_i::keys (::CORBA::UShort keys)
+ {
+ this->keys_ = keys;
+ }
+
+ ::CORBA::UShort
+ Sender_exec_i::latency_count (void)
+ {
+ return this->latency_count_;
+ }
+
+ void
+ Sender_exec_i::latency_count (::CORBA::UShort latency_count)
+ {
+ this->latency_count_ = latency_count;
+ }
+
+ ::CORBA::UShort
+ Sender_exec_i::sleep (void)
+ {
+ return this->sleep_;
+ }
+
+ void
+ Sender_exec_i::sleep (::CORBA::UShort sleep)
+ {
+ this->sleep_ = sleep;
+ }
+
+ ::CORBA::UShort
+ Sender_exec_i::spin (void)
+ {
+ return this->spin_;
+ }
+
+ void
+ Sender_exec_i::spin (::CORBA::UShort spin)
+ {
+ this->spin_ = spin;
+ }
+
+ ::CORBA::UShort
+ Sender_exec_i::number_of_sub (void)
+ {
+ return this->number_of_subscribers_;
+ }
+
+ void
+ Sender_exec_i::number_of_sub (::CORBA::UShort number_of_sub)
+ {
+ if (number_of_sub > 0)
+ {
+ this->number_of_subscribers_ = number_of_sub;
+ }
+ else
+ {
+ this->number_of_subscribers_ = 1;
+ }
+ }
+
+ ::CORBA::UShort
+ Sender_exec_i::datalen (void)
+ {
+ return this->datalen_;
+ }
+
+ void
+ Sender_exec_i::datalen (::CORBA::UShort datalen)
+ {
+ if(datalen <= OVERHEAD_BYTES)
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("ERROR: datalen has to be bigger as %u\n"),
+ OVERHEAD_BYTES));
+ throw ::CORBA::BAD_PARAM ();
+ }
+ this->datalen_ = datalen - OVERHEAD_BYTES;
+ }
+
+
+ void
+ Sender_exec_i::set_session_context (::Components::SessionContext_ptr ctx)
+ {
+ this->context_ =
+ ::Perf_Keyed_Test::CCM_Sender_Context::_narrow (ctx);
+
+ if ( ::CORBA::is_nil (this->context_.in ()))
+ {
+ throw ::CORBA::INTERNAL ();
+ }
+ }
+
+ void
+ Sender_exec_i::configuration_complete (void)
+ {
+ }
+
+ void
+ Sender_exec_i::ccm_activate (void)
+ {
+ try
+ {
+ this->writer_ = this->context_->get_connection_info_write_data ();
+ ::CCM_DDS::DataListenerControl_var dlc =
+ this->context_->get_connection_ping_listen_data_control ();
+ dlc->mode (::CCM_DDS::ONE_BY_ONE);
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception ("Exception caught:");
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("ERROR: Sender_exec_i::ccm_activate: Exception caught\n")));
+ }
+ catch (...)
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("ERROR: Sender_exec_i::ccm_activate:"
+ " Unknown exception caught\n")));
+ }
+ }
+
+ void
+ Sender_exec_i::ccm_passivate (void)
+ {
+ if (this->timer_.value ())
+ this->context_->get_CCM_object()->_get_orb ()->orb_core ()->reactor ()->cancel_timer (this->ticker_);
+
+ }
+
+ void
+ Sender_exec_i::ccm_remove (void)
+ {
+
+ ACE_DEBUG ((LM_DEBUG, "SUMMARY SENDER number of messages sent: %u\n",
+ (this->number_of_msg_ + 1)));
+
+ if( this->count_.value () > 0)
+ {
+ double avg = this->tv_total_.value () / this->count_.value ();
+ ACE_DEBUG ((LM_DEBUG, "SUMMARY SENDER latency time-one way,in usec :\n"
+ "Total time<%u>,\nNumber of latency messages <%u>,"
+ "\nAvg <%6.01f>,\nMin <%u>,\nMax <%u>.\n",
+ this->tv_total_.value ()/2,
+ this->count_.value (),
+ avg/2,
+ this->tv_min_.value ()/2,
+ this->tv_max_.value ()/2));
+ }
+ else
+ {
+ ACE_ERROR ((LM_ERROR, "SUMMARY SENDER latency time:\n "
+ "No samples reveived back.\n"));
+ }
+ }
+
+ extern "C" SENDER_EXEC_Export ::Components::EnterpriseComponent_ptr
+ create_Perf_Keyed_Test_Sender_Impl (void)
+ {
+ ::Components::EnterpriseComponent_ptr retval =
+ ::Components::EnterpriseComponent::_nil ();
+
+ ACE_NEW_NORETURN (
+ retval,
+ Sender_exec_i);
+
+ return retval;
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender_exec.h b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender_exec.h
new file mode 100644
index 00000000000..d9f03ab4108
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/Sender/Perf_Keyed_Test_Sender_exec.h
@@ -0,0 +1,181 @@
+// -*- C++ -*-
+// $Id$
+
+#ifndef CIAO_SENDER_EXEC_H_
+#define CIAO_SENDER_EXEC_H_
+
+
+#include "Perf_Keyed_Test_SenderEC.h"
+
+#include /**/ "Sender_exec_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/LocalObject.h"
+#include <map>
+
+namespace CIAO_Perf_Keyed_Test_Sender_Impl
+{
+ typedef ACE_Atomic_Op <TAO_SYNCH_MUTEX, CORBA::Long > Atomic_Long;
+ typedef ACE_Atomic_Op <TAO_SYNCH_MUTEX, CORBA::Boolean > Atomic_Boolean;
+
+ class Sender_exec_i;
+ //============================================================
+ // PerfKeyedTest_Listener_exec_i
+ //============================================================
+ class SENDER_EXEC_Export PerfKeyedTest_Listener_exec_i
+ : public virtual ::CCM_DDS::PerfKeyedTest::CCM_Listener,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ PerfKeyedTest_Listener_exec_i (Sender_exec_i &callback);
+ virtual ~PerfKeyedTest_Listener_exec_i (void);
+
+ virtual void
+ on_one_data (
+ const PerfKeyedTest & an_instance,
+ const ::CCM_DDS::ReadInfo & info);
+ virtual void
+ on_many_data (
+ const PerfKeyedTestSeq & an_instance,
+ const ::CCM_DDS::ReadInfoSeq & info);
+ private:
+ Sender_exec_i &callback_;
+ };
+
+class SENDER_EXEC_Export ConnectorStatusListener_exec_i
+ : public virtual ::CCM_DDS::CCM_ConnectorStatusListener,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ ConnectorStatusListener_exec_i (Atomic_Boolean &, int,
+ Sender_exec_i &callback_);
+ virtual ~ConnectorStatusListener_exec_i (void);
+
+ virtual
+ void on_inconsistent_topic( ::DDS::Topic_ptr the_topic,
+ const DDS::InconsistentTopicStatus & status);
+ virtual
+ void on_requested_incompatible_qos( ::DDS::DataReader_ptr the_reader,
+ const DDS::RequestedIncompatibleQosStatus & status);
+ virtual
+ void on_sample_rejected( ::DDS::DataReader_ptr the_reader,
+ const DDS::SampleRejectedStatus & status);
+ virtual
+ void on_offered_deadline_missed( ::DDS::DataWriter_ptr the_writer,
+ const DDS::OfferedDeadlineMissedStatus & status);
+ virtual
+ void on_offered_incompatible_qos( ::DDS::DataWriter_ptr the_writer,
+ const DDS::OfferedIncompatibleQosStatus & status);
+ virtual
+ void on_unexpected_status( ::DDS::Entity_ptr the_entity,
+ ::DDS::StatusKind status_kind);
+
+ private:
+ Sender_exec_i &callback_;
+ Atomic_Boolean &matched_;
+ int number_of_subscribers_;
+
+ };
+ //============================================================
+ // WriteTicker
+ //============================================================
+ class WriteTicker :
+ public ACE_Event_Handler
+ {
+ public:
+ WriteTicker (Sender_exec_i &callback);
+ int handle_timeout (const ACE_Time_Value &, const void *);
+ private:
+ /// Maintains a handle that actually process the event
+ Sender_exec_i &callback_;
+ };
+
+ class Sender_exec_i
+ : public virtual Sender_Exec,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ Sender_exec_i (void);
+ virtual ~Sender_exec_i (void);
+
+ virtual ::CCM_DDS::CCM_ConnectorStatusListener_ptr
+ get_connector_status (void);
+
+ virtual ::CCM_DDS::PerfKeyedTest::CCM_Listener_ptr
+ get_ping_listen_data_listener (void);
+
+ virtual ::CCM_DDS::CCM_PortStatusListener_ptr
+ get_ping_listen_status (void);
+
+ void record_time (unsigned long long nanotime);
+
+ virtual ::CORBA::ULong iterations (void);
+ virtual void iterations (::CORBA::ULong iterations);
+
+ virtual ::CORBA::UShort keys (void);
+ virtual void keys (::CORBA::UShort keys);
+
+ virtual ::CORBA::UShort latency_count (void);
+ virtual void latency_count (::CORBA::UShort latency_count);
+
+ virtual ::CORBA::UShort sleep (void);
+ virtual void sleep (::CORBA::UShort sleep);
+
+ virtual ::CORBA::UShort spin (void);
+ virtual void spin (::CORBA::UShort spin);
+
+ virtual ::CORBA::UShort number_of_sub (void);
+ virtual void number_of_sub (::CORBA::UShort number_of_sub);
+
+ virtual ::CORBA::UShort datalen (void);
+ virtual void datalen (::CORBA::UShort datalen);
+
+ virtual void set_session_context (::Components::SessionContext_ptr ctx);
+
+ virtual void configuration_complete (void);
+
+ virtual void ccm_activate (void);
+ virtual void ccm_passivate (void);
+ virtual void ccm_remove (void);
+
+ void start (void);
+ void write_one (void);
+ void write_one_with_spin (void);
+
+ private:
+ ::Perf_Keyed_Test::CCM_Sender_Context_var context_;
+ CCM_DDS::PerfKeyedTest::Writer_var writer_;
+
+ WriteTicker *ticker_;
+
+ CORBA::UShort iterations_;
+ CORBA::UShort keys_;
+
+ CORBA::UShort latency_count_;
+ CORBA::UShort sleep_;
+ CORBA::UShort spin_;
+ CORBA::UShort datalen_;
+
+ Atomic_Boolean matched_;
+ CORBA::UShort number_of_subscribers_;
+ Atomic_Long tv_total_;
+ Atomic_Long tv_max_;
+ Atomic_Long tv_min_;
+ Atomic_Long count_;
+ CORBA::UShort number_of_msg_;
+ Atomic_Boolean timer_;
+
+ typedef std::map<ACE_CString, PerfKeyedTest_var> Writer_Table;
+ Writer_Table samples_;
+
+ Writer_Table::iterator last_key_;
+ };
+
+ extern "C" SENDER_EXEC_Export ::Components::EnterpriseComponent_ptr
+ create_Perf_Keyed_Test_Sender_Impl (void);
+}
+
+#endif /* ifndef */
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan.cdp b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan.cdp
new file mode 100644
index 00000000000..3a7b24995cc
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan.cdp
@@ -0,0 +1,492 @@
+<Deployment:DeploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+ <label>Perf_Keyed_Test_Depl_1</label>
+ <UUID>Perf_Keyed_Test_Depl_1</UUID>
+
+ <implementation xmi:id="ReceiverComponentImplementation">
+ <name>ReceiverComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Receiver_ExecArtifact" />
+ <artifact xmi:idref="Receiver_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Receiver_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Receiver_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+
+ <implementation xmi:id="Perf_Keyed_Test_ConnectorComponentImplementation">
+ <name>Perf_Keyed_Test_ConnectorComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_ExecArtifact" />
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+ <implementation xmi:id="SenderComponentImplementation">
+ <name>SenderComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Sender_ExecArtifact" />
+ <artifact xmi:idref="Sender_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Sender_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Sender_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+ <instance xmi:id="ReceiverComponentInstance">
+ <name>ReceiverComponent</name>
+ <node>ReceiverNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="ReceiverComponentImplementation" />
+ </instance>
+ <instance xmi:id="Perf_Keyed_Test_ConnectorComponentInstance">
+ <name>Perf_Keyed_Test_ConnectorComponent</name>
+ <node>SenderNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="Perf_Keyed_Test_ConnectorComponentImplementation" />
+ <configProperty>
+ <name>topic_name</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test</string>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>qos_profile</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>HelloTest_Library#LatencyQoS</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+ <instance xmi:id="Perf_Keyed_Test_ConnectorComponentInstance2">
+ <name>Perf_Keyed_Test_ConnectorComponent2</name>
+ <node>ReceiverNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="Perf_Keyed_Test_ConnectorComponentImplementation" />
+ <configProperty>
+ <name>topic_name</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test</string>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>qos_profile</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>HelloTest_Library#LatencyQoS</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+ <instance xmi:id="SenderComponentInstance">
+ <name>SenderComponent</name>
+ <node>SenderNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="SenderComponentImplementation" />
+ <configProperty>
+ <name>keys</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>1</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>iterations</name>
+ <value>
+ <type>
+ <kind>tk_ulong</kind>
+ </type>
+ <value>
+ <ulong>10000</ulong>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>latency_count</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>100</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>sleep</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>10</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>spin</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>10</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>datalen</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>999</ushort>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <connection>
+ <name>info_listen_data</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>info_listen_data_listener</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="ReceiverComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance2" />
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>info_listen_data_pub</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>ping_listen_data_listener</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+ <connection>
+ <name>ping_listen_data_control</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>ping_listen_data_control</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_control</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+ <connection>
+ <name>info_listen_data_control</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>info_listen_data_control</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="ReceiverComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_control</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance2" />
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>writer_connection</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>info_write_data</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>supplier_data</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+ <connection>
+ <name>writer_connection_sub</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>write_ping_data</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="ReceiverComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>supplier_data</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance2" />
+ </internalEndpoint>
+ </connection>
+ <connection>
+ <name>connector_status_sender</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>connector_status</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>error_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+
+ <artifact xmi:id="Sender_ExecArtifact">
+ <name>Sender_exec</name>
+ <source/>
+ <node/>
+ <location>Sender_exec</location>
+ </artifact>
+ <artifact xmi:id="Sender_SvntArtifact">
+ <name>Sender_svnt</name>
+ <source/>
+ <node/>
+ <location>Sender_svnt</location>
+ </artifact>
+ <artifact xmi:id="Sender_StubArtifact">
+ <name>Sender_stub</name>
+ <source/>
+ <node/>
+ <location>Sender_stub</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_ExecArtifact">
+ <name>Perf_Keyed_Test_Connector_exec</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_exec</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_SvntArtifact">
+ <name>Perf_Keyed_Test_Connector_svnt</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_svnt</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_StubArtifact">
+ <name>Perf_Keyed_Test_Connector_stub</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_stub</location>
+ </artifact>
+ <artifact xmi:id="Receiver_ExecArtifact">
+ <name>Receiver_exec</name>
+ <source/>
+ <node/>
+ <location>Receiver_exec</location>
+ </artifact>
+ <artifact xmi:id="Receiver_SvntArtifact">
+ <name>Receiver_svnt</name>
+ <source/>
+ <node/>
+ <location>Receiver_svnt</location>
+ </artifact>
+ <artifact xmi:id="Receiver_StubArtifact">
+ <name>Receiver_stub</name>
+ <source/>
+ <node/>
+ <location>Receiver_stub</location>
+ </artifact>
+</Deployment:DeploymentPlan>
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub.cdp b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub.cdp
new file mode 100644
index 00000000000..ed332d52d62
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub.cdp
@@ -0,0 +1,344 @@
+<Deployment:DeploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+ <label>Perf_Keyed_Test_Depl_1</label>
+ <UUID>Perf_Keyed_Test_Depl_1</UUID>
+
+
+ <implementation xmi:id="Perf_Keyed_Test_ConnectorComponentImplementation">
+ <name>Perf_Keyed_Test_ConnectorComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_ExecArtifact" />
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+ <implementation xmi:id="SenderComponentImplementation">
+ <name>SenderComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Sender_ExecArtifact" />
+ <artifact xmi:idref="Sender_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Sender_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Sender_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+ <instance xmi:id="Perf_Keyed_Test_ConnectorComponentInstance">
+ <name>Perf_Keyed_Test_ConnectorComponent</name>
+ <node>SenderNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="Perf_Keyed_Test_ConnectorComponentImplementation" />
+ <configProperty>
+ <name>topic_name</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test</string>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>qos_profile</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>HelloTest_Library#LatencyQoS</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+ <instance xmi:id="SenderComponentInstance">
+ <name>SenderComponent</name>
+ <node>SenderNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="SenderComponentImplementation" />
+ <configProperty>
+ <name>keys</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>1</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>iterations</name>
+ <value>
+ <type>
+ <kind>tk_ulong</kind>
+ </type>
+ <value>
+ <ulong>0</ulong>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>latency_count</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>100</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>sleep</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>2</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>spin</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>1000</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>number_of_sub</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>1</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>datalen</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>999</ushort>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+
+ <connection>
+ <name>info_listen_data_pub</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>ping_listen_data_listener</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+ <connection>
+ <name>ping_listen_data_control</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>ping_listen_data_control</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_control</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+
+
+ <connection>
+ <name>writer_connection</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>info_write_data</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>supplier_data</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>connector_status_sender</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>connector_status</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>error_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+
+ <artifact xmi:id="Sender_ExecArtifact">
+ <name>Sender_exec</name>
+ <source/>
+ <node/>
+ <location>Sender_exec</location>
+ </artifact>
+ <artifact xmi:id="Sender_SvntArtifact">
+ <name>Sender_svnt</name>
+ <source/>
+ <node/>
+ <location>Sender_svnt</location>
+ </artifact>
+ <artifact xmi:id="Sender_StubArtifact">
+ <name>Sender_stub</name>
+ <source/>
+ <node/>
+ <location>Sender_stub</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_ExecArtifact">
+ <name>Perf_Keyed_Test_Connector_exec</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_exec</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_SvntArtifact">
+ <name>Perf_Keyed_Test_Connector_svnt</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_svnt</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_StubArtifact">
+ <name>Perf_Keyed_Test_Connector_stub</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_stub</location>
+ </artifact>
+ </Deployment:DeploymentPlan>
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub3.cdp b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub3.cdp
new file mode 100644
index 00000000000..8c61cdb7348
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub3.cdp
@@ -0,0 +1,344 @@
+<Deployment:DeploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+ <label>Perf_Keyed_Test_Depl_1</label>
+ <UUID>Perf_Keyed_Test_Depl_1</UUID>
+
+
+ <implementation xmi:id="Perf_Keyed_Test_ConnectorComponentImplementation">
+ <name>Perf_Keyed_Test_ConnectorComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_ExecArtifact" />
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+ <implementation xmi:id="SenderComponentImplementation">
+ <name>SenderComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Sender_ExecArtifact" />
+ <artifact xmi:idref="Sender_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Sender_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Sender_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+ <instance xmi:id="Perf_Keyed_Test_ConnectorComponentInstance">
+ <name>Perf_Keyed_Test_ConnectorComponent</name>
+ <node>SenderNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="Perf_Keyed_Test_ConnectorComponentImplementation" />
+ <configProperty>
+ <name>topic_name</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test</string>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>qos_profile</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>HelloTest_Library#LatencyQoS</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+ <instance xmi:id="SenderComponentInstance">
+ <name>SenderComponent</name>
+ <node>SenderNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="SenderComponentImplementation" />
+ <configProperty>
+ <name>keys</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>1</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>iterations</name>
+ <value>
+ <type>
+ <kind>tk_ulong</kind>
+ </type>
+ <value>
+ <ulong>0</ulong>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>latency_count</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>100</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>sleep</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>10</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>spin</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>1000</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>number_of_sub</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>3</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>datalen</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>999</ushort>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+
+ <connection>
+ <name>info_listen_data_pub</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>ping_listen_data_listener</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+ <connection>
+ <name>ping_listen_data_control</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>ping_listen_data_control</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_control</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+
+
+ <connection>
+ <name>writer_connection</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>info_write_data</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>supplier_data</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>connector_status_sender</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>connector_status</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>error_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+
+ <artifact xmi:id="Sender_ExecArtifact">
+ <name>Sender_exec</name>
+ <source/>
+ <node/>
+ <location>Sender_exec</location>
+ </artifact>
+ <artifact xmi:id="Sender_SvntArtifact">
+ <name>Sender_svnt</name>
+ <source/>
+ <node/>
+ <location>Sender_svnt</location>
+ </artifact>
+ <artifact xmi:id="Sender_StubArtifact">
+ <name>Sender_stub</name>
+ <source/>
+ <node/>
+ <location>Sender_stub</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_ExecArtifact">
+ <name>Perf_Keyed_Test_Connector_exec</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_exec</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_SvntArtifact">
+ <name>Perf_Keyed_Test_Connector_svnt</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_svnt</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_StubArtifact">
+ <name>Perf_Keyed_Test_Connector_stub</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_stub</location>
+ </artifact>
+ </Deployment:DeploymentPlan>
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub_BE.cdp b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub_BE.cdp
new file mode 100644
index 00000000000..ddc3cd9a87f
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_pub_BE.cdp
@@ -0,0 +1,344 @@
+<Deployment:DeploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+ <label>Perf_Keyed_Test_Depl_1</label>
+ <UUID>Perf_Keyed_Test_Depl_1</UUID>
+
+
+ <implementation xmi:id="Perf_Keyed_Test_ConnectorComponentImplementation">
+ <name>Perf_Keyed_Test_ConnectorComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_ExecArtifact" />
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+ <implementation xmi:id="SenderComponentImplementation">
+ <name>SenderComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Sender_ExecArtifact" />
+ <artifact xmi:idref="Sender_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Sender_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Sender_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Sender_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+ <instance xmi:id="Perf_Keyed_Test_ConnectorComponentInstance">
+ <name>Perf_Keyed_Test_ConnectorComponent</name>
+ <node>SenderNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="Perf_Keyed_Test_ConnectorComponentImplementation" />
+ <configProperty>
+ <name>topic_name</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test</string>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>qos_profile</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>HelloTest_Library#BestEffortQoS</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+ <instance xmi:id="SenderComponentInstance">
+ <name>SenderComponent</name>
+ <node>SenderNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="SenderComponentImplementation" />
+ <configProperty>
+ <name>keys</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>1</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>iterations</name>
+ <value>
+ <type>
+ <kind>tk_ulong</kind>
+ </type>
+ <value>
+ <ulong>10000</ulong>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>latency_count</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>100</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>sleep</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>2</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>spin</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>1000</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>number_of_sub</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>3</ushort>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>datalen</name>
+ <value>
+ <type>
+ <kind>tk_ushort</kind>
+ </type>
+ <value>
+ <ushort>999</ushort>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+
+
+ <connection>
+ <name>info_listen_data_pub</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>ping_listen_data_listener</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+ <connection>
+ <name>ping_listen_data_control</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>ping_listen_data_control</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_control</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+
+
+ <connection>
+ <name>writer_connection</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>info_write_data</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>supplier_data</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>connector_status_sender</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>connector_status</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="SenderComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>error_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance" />
+ </internalEndpoint>
+ </connection>
+
+ <artifact xmi:id="Sender_ExecArtifact">
+ <name>Sender_exec</name>
+ <source/>
+ <node/>
+ <location>Sender_exec</location>
+ </artifact>
+ <artifact xmi:id="Sender_SvntArtifact">
+ <name>Sender_svnt</name>
+ <source/>
+ <node/>
+ <location>Sender_svnt</location>
+ </artifact>
+ <artifact xmi:id="Sender_StubArtifact">
+ <name>Sender_stub</name>
+ <source/>
+ <node/>
+ <location>Sender_stub</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_ExecArtifact">
+ <name>Perf_Keyed_Test_Connector_exec</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_exec</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_SvntArtifact">
+ <name>Perf_Keyed_Test_Connector_svnt</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_svnt</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_StubArtifact">
+ <name>Perf_Keyed_Test_Connector_stub</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_stub</location>
+ </artifact>
+ </Deployment:DeploymentPlan>
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_sub.cdp b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_sub.cdp
new file mode 100644
index 00000000000..fc68d25baae
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_sub.cdp
@@ -0,0 +1,246 @@
+<Deployment:DeploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+ <label>Perf_Keyed_Test_Depl_1</label>
+ <UUID>Perf_Keyed_Test_Depl_1</UUID>
+
+ <implementation xmi:id="ReceiverComponentImplementation">
+ <name>ReceiverComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Receiver_ExecArtifact" />
+ <artifact xmi:idref="Receiver_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Receiver_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Receiver_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+
+ <implementation xmi:id="Perf_Keyed_Test_ConnectorComponentImplementation">
+ <name>Perf_Keyed_Test_ConnectorComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_ExecArtifact" />
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+ <instance xmi:id="ReceiverComponentInstance">
+ <name>ReceiverComponent</name>
+ <node>ReceiverNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="ReceiverComponentImplementation" />
+ </instance>
+ <instance xmi:id="Perf_Keyed_Test_ConnectorComponentInstance2">
+ <name>Perf_Keyed_Test_ConnectorComponent2</name>
+ <node>ReceiverNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="Perf_Keyed_Test_ConnectorComponentImplementation" />
+ <configProperty>
+ <name>topic_name</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test</string>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>qos_profile</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>HelloTest_Library#LatencyQoS</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <connection>
+ <name>info_listen_data</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>info_listen_data_listener</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="ReceiverComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance2" />
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>info_listen_data_control</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>info_listen_data_control</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="ReceiverComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_control</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance2" />
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>writer_connection_sub</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>write_ping_data</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="ReceiverComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>supplier_data</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance2" />
+ </internalEndpoint>
+ </connection>
+
+
+ <artifact xmi:id="Perf_Keyed_Test_Connector_ExecArtifact">
+ <name>Perf_Keyed_Test_Connector_exec</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_exec</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_SvntArtifact">
+ <name>Perf_Keyed_Test_Connector_svnt</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_svnt</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_StubArtifact">
+ <name>Perf_Keyed_Test_Connector_stub</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_stub</location>
+ </artifact>
+ <artifact xmi:id="Receiver_ExecArtifact">
+ <name>Receiver_exec</name>
+ <source/>
+ <node/>
+ <location>Receiver_exec</location>
+ </artifact>
+ <artifact xmi:id="Receiver_SvntArtifact">
+ <name>Receiver_svnt</name>
+ <source/>
+ <node/>
+ <location>Receiver_svnt</location>
+ </artifact>
+ <artifact xmi:id="Receiver_StubArtifact">
+ <name>Receiver_stub</name>
+ <source/>
+ <node/>
+ <location>Receiver_stub</location>
+ </artifact>
+</Deployment:DeploymentPlan>
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_sub_BE.cdp b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_sub_BE.cdp
new file mode 100644
index 00000000000..155e4b4bd05
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/Plan_sub_BE.cdp
@@ -0,0 +1,247 @@
+<Deployment:DeploymentPlan
+ xmlns:Deployment="http://www.omg.org/Deployment"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd">
+ <label>Perf_Keyed_Test_Depl_1</label>
+ <UUID>Perf_Keyed_Test_Depl_1</UUID>
+
+ <implementation xmi:id="ReceiverComponentImplementation">
+ <name>ReceiverComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Receiver_ExecArtifact" />
+ <artifact xmi:idref="Receiver_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Receiver_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Receiver_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Receiver_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+
+ <implementation xmi:id="Perf_Keyed_Test_ConnectorComponentImplementation">
+ <name>Perf_Keyed_Test_ConnectorComponentImplementation</name>
+ <source/>
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_ExecArtifact" />
+ <artifact xmi:idref="Perf_Keyed_Test_Connector_SvntArtifact" />
+ <execParameter>
+ <!-- entrypoint as exec parameter (see 10.6.1) -->
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Perf_Keyed_Test_Perf_Keyed_Test_Connector_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test_Connector_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+ <instance xmi:id="ReceiverComponentInstance">
+ <name>ReceiverComponent</name>
+ <node>ReceiverNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="ReceiverComponentImplementation" />
+ </instance>
+ <instance xmi:id="Perf_Keyed_Test_ConnectorComponentInstance2">
+ <name>Perf_Keyed_Test_ConnectorComponent2</name>
+ <node>ReceiverNode</node>
+ <!-- hostname -->
+ <source/>
+ <implementation xmi:idref="Perf_Keyed_Test_ConnectorComponentImplementation" />
+ <configProperty>
+ <name>topic_name</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>Perf_Keyed_Test</string>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>qos_profile</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>HelloTest_Library#BestEffortQoS</string>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <connection>
+ <name>info_listen_data</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>info_listen_data_listener</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="ReceiverComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_listener</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance2" />
+ </internalEndpoint>
+ </connection>
+
+
+ <connection>
+ <name>info_listen_data_control</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>info_listen_data_control</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="ReceiverComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>push_consumer_data_control</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance2" />
+ </internalEndpoint>
+ </connection>
+
+ <connection>
+ <name>writer_connection_sub</name>
+ <deployRequirement>
+ <name>edu.dre.vanderbilt.DAnCE.ConnectionType</name>
+ <resourceType>Local_Interface</resourceType>
+ </deployRequirement>
+ <internalEndpoint>
+ <portName>write_ping_data</portName>
+ <provider>false</provider>
+ <kind>SimplexReceptacle</kind>
+ <instance xmi:idref="ReceiverComponentInstance" />
+ </internalEndpoint>
+ <internalEndpoint>
+ <portName>supplier_data</portName>
+ <provider>true</provider>
+ <kind>Facet</kind>
+ <instance xmi:idref="Perf_Keyed_Test_ConnectorComponentInstance2" />
+ </internalEndpoint>
+ </connection>
+
+
+ <artifact xmi:id="Perf_Keyed_Test_Connector_ExecArtifact">
+ <name>Perf_Keyed_Test_Connector_exec</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_exec</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_SvntArtifact">
+ <name>Perf_Keyed_Test_Connector_svnt</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_svnt</location>
+ </artifact>
+ <artifact xmi:id="Perf_Keyed_Test_Connector_StubArtifact">
+ <name>Perf_Keyed_Test_Connector_stub</name>
+ <source/>
+ <node/>
+ <location>DDS_Perf_Keyed_Test_Connector_stub</location>
+ </artifact>
+ <artifact xmi:id="Receiver_ExecArtifact">
+ <name>Receiver_exec</name>
+ <source/>
+ <node/>
+ <location>Receiver_exec</location>
+ </artifact>
+ <artifact xmi:id="Receiver_SvntArtifact">
+ <name>Receiver_svnt</name>
+ <source/>
+ <node/>
+ <location>Receiver_svnt</location>
+ </artifact>
+ <artifact xmi:id="Receiver_StubArtifact">
+ <name>Receiver_stub</name>
+ <source/>
+ <node/>
+ <location>Receiver_stub</location>
+ </artifact>
+</Deployment:DeploymentPlan>
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/README b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/README
new file mode 100644
index 00000000000..5c60c72c2ab
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/README
@@ -0,0 +1,24 @@
+
+These tests test the performance with different options.
+
+- test one publisher and one subscriber in 1 process:
+ run_test.pl with resp. Plan.cdp
+
+
+- default test (RELIABLE) , separate publisher and subscriber:
+ run_pub.pl and run_sub.pl with resp. Plan_pub.cdp and Plan_sub.cdp .
+
+- test with one publisher and three separate subscribers:
+ run_pub3.pl with Plan_pub3.cdp and run_sub.pl, run_sub2.pl, run_sub3.pl all with Plan_sub.cdp .
+
+- BEST_EFFORT test, separate publisher and subscriber:
+ run_pub_BE.pl and run_sub_BE.pl with resp. Plan_pub_BE.cdp and Plan_sub_BE.cdp .
+
+
+To test changes in the next attributes, changes this values in the publisher cdp-files:
+latency_count : indicates the number of messages minus 1 between two latency messages
+iterations : the number of messages from one instance to send. 0 = INFINITY .
+datalen: the datalen of a message (minimal 32).
+sleep: time in ms to sleep before writing the next message
+spin: number of times to do a code loop before writing the next message, sleep has to be 0 .
+keys: number of instances. (default 1) MORE THEN 1 NOT IMPLEMENTED YET. \ No newline at end of file
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/USER_QOS_PROFILES.xml b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/USER_QOS_PROFILES.xml
new file mode 100644
index 00000000000..9b472b3f879
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/USER_QOS_PROFILES.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Description
+XML QoS Profile
+
+The QoS configuration of the DDS entities in the generated example is
+loaded from this file.
+
+This file is used only when it is in the current working directory
+or when the enviroment variable
+NDDS_QOS_PROFILES is defined and points to this file.
+
+For more information about XML QoS Profiles see Chapter 15 in the
+RTI Data Distribution Service user manual.
+-->
+<dds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="c:/ndds/ndds.4.4d/scripts/../resource/rtiddsgen/../qos_profiles_4.4d/schema/rti_dds_qos_profiles.xsd" version="4.4d">
+ <!-- QoS Library containing the QoS profile used in the generated example.
+
+ A QoS library is a named set of QoS profiles.
+ -->
+ <qos_library name="HelloTest_Library">
+ <!-- QoS profile used to configure reliable communication between the DataWriter
+ and DataReader created in the example code.
+
+ A QoS profile groups a set of related QoS.
+ -->
+ <qos_profile name="LatencyQoS" is_default_qos="true">
+ <!-- QoS used to configure the data writer created in the example code -->
+ <datawriter_qos>
+ <reliability>
+ <kind>RELIABLE_RELIABILITY_QOS</kind>
+ <max_blocking_time>
+ <sec>DURATION_INFINITE_SEC</sec>
+ <nanosec>DURATION_INFINITE_NSEC</nanosec>
+ </max_blocking_time>
+ </reliability>
+ <history>
+ <kind>KEEP_ALL_HISTORY_QOS</kind>
+ </history>
+ <durability>
+ <kind>TRANSIENT_DURABILITY_QOS</kind>
+ </durability>
+ <resource_limits>
+ <max_instances>1</max_instances>
+ <initial_instances>1</initial_instances>
+ <max_samples>LENGTH_UNLIMITED</max_samples>
+ <initial_samples>100</initial_samples>
+ <max_samples_per_instance>LENGTH_UNLIMITED</max_samples_per_instance>
+ </resource_limits>
+ <protocol>
+ <rtps_reliable_writer>
+ <max_heartbeat_retries>10</max_heartbeat_retries>
+ </rtps_reliable_writer>
+ </protocol>
+ </datawriter_qos>
+ <!-- QoS used to configure the data reader created in the example code -->
+ <datareader_qos>
+ <reliability>
+ <kind>RELIABLE_RELIABILITY_QOS</kind>
+ </reliability>
+ <history>
+ <kind>KEEP_ALL_HISTORY_QOS</kind>
+ </history>
+ <resource_limits>
+ <initial_samples>100</initial_samples>
+ <initial_instances>1</initial_instances>
+ <max_samples>LENGTH_UNLIMITED</max_samples>
+ <max_instances>1</max_instances>
+ <max_samples_per_instance>LENGTH_UNLIMITED</max_samples_per_instance>
+ </resource_limits>
+ <durability>
+ <kind>TRANSIENT_DURABILITY_QOS</kind>
+ </durability>
+ </datareader_qos>
+
+ </qos_profile>
+ <qos_profile name="BestEffortQoS" is_default_qos="false">
+ <!-- QoS used to configure the data writer created in the example code -->
+ <datawriter_qos>
+ <reliability>
+ <kind>BEST_EFFORT_RELIABILITY_QOS</kind>
+ </reliability>
+ <history>
+ <kind>KEEP_ALL_HISTORY_QOS</kind>
+ </history>
+ <durability>
+ <kind>TRANSIENT_DURABILITY_QOS</kind>
+ </durability>
+ <resource_limits>
+ <max_instances>1</max_instances>
+ <initial_instances>1</initial_instances>
+ <max_samples>LENGTH_UNLIMITED</max_samples>
+ <initial_samples>100</initial_samples>
+ <max_samples_per_instance>LENGTH_UNLIMITED</max_samples_per_instance>
+ </resource_limits>
+ <protocol>
+ <rtps_reliable_writer>
+ <max_heartbeat_retries>10</max_heartbeat_retries>
+ </rtps_reliable_writer>
+ </protocol>
+ </datawriter_qos>
+ <!-- QoS used to configure the data reader created in the example code -->
+ <datareader_qos>
+ <reliability>
+ <kind>BEST_EFFORT_RELIABILITY_QOS</kind>
+ </reliability>
+ <history>
+ <kind>KEEP_ALL_HISTORY_QOS</kind>
+ </history>
+ <resource_limits>
+ <initial_samples>100</initial_samples>
+ <initial_instances>1</initial_instances>
+ <max_samples>LENGTH_UNLIMITED</max_samples>
+ <max_instances>1</max_instances>
+ <max_samples_per_instance>LENGTH_UNLIMITED</max_samples_per_instance>
+ </resource_limits>
+ <durability>
+ <kind>TRANSIENT_DURABILITY_QOS</kind>
+ </durability>
+ </datareader_qos>
+ </qos_profile>
+ </qos_library>
+
+</dds> \ No newline at end of file
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub.pl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub.pl
new file mode 100755
index 00000000000..7adaac62e2d
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub.pl
@@ -0,0 +1,219 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::TestTarget;
+
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$TAO_ROOT = "$ENV{'TAO_ROOT'}";
+$DANCE_ROOT = "$ENV{'DANCE_ROOT'}";
+
+$daemons_running = 0;
+$em_running = 0;
+$ns_running = 0;
+
+$nr_daemon = 1;
+@ports = ( 60001 );
+@iorbases = ( "Sender.ior" );
+@iorfiles = 0;
+@nodenames = ( "SenderNode" );
+
+# ior files other than daemon
+# ior files other than daemon
+$ior_nsbase = "ns.ior";
+$ior_nsfile = 0;
+$ior_embase = "EM.ior";
+$ior_emfile = 0;
+
+# Processes
+$E = 0;
+$EM = 0;
+$NS = 0;
+@DEAMONS = 0;
+
+# targets
+@tg_daemons = 0;
+$tg_naming = 0;
+$tg_exe_man = 0;
+$tg_executor = 0;
+
+$status = 0;
+$cdp_file = "Plan_pub.cdp";
+
+sub create_targets {
+ # naming service
+ $tg_naming = PerlACE::TestTarget::create_target (1) || die "Create target for ns failed\n";
+ $tg_naming->AddLibPath ('../lib');
+ # daemon
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i] = PerlACE::TestTarget::create_target ($i+1) || die "Create target for deamon $i failed\n";
+ $tg_daemons[$i]->AddLibPath ('../lib');
+ }
+ # execution manager
+ $tg_exe_man = PerlACE::TestTarget::create_target (1) || die "Create target for EM failed\n";
+ $tg_exe_man->AddLibPath ('../lib');
+ # executor (plan_launcher)
+ $tg_executor = PerlACE::TestTarget::create_target (1) || die "Create target for executor failed\n";
+ $tg_executor->AddLibPath ('../lib');
+}
+
+sub init_ior_files {
+ $ior_nsfile = $tg_naming->LocalFile ($ior_nsbase);
+ $ior_emfile = $tg_exe_man->LocalFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+ delete_ior_files ();
+}
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i]->DeleteFile ($iorbases[$i]);
+ }
+ $tg_naming->DeleteFile ($ior_nsbase);
+ $tg_exe_man->DeleteFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+}
+
+sub kill_node_daemon {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemon ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill (); $EM->TimedWait (1);
+ }
+
+ if ($ns_running == 1) {
+ $NS->Kill (); $NS->TimedWait (1);
+ }
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorbase = $iorbases[$i];
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+ $nodename = $nodenames[$i];
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$CIAO_ROOT/bin/ciao_componentserver";
+
+ $d_cmd = "$DANCE_ROOT/bin/dance_node_manager";
+ $d_param = "-ORBEndpoint $iiop -s $node_app -n $nodename=$iorfile -t 30 --domain-nc corbaloc:rir:/NameService";
+
+ print "Run dance_node_manager with $d_param\n";
+
+ $DEAMONS[$i] = $tg_daemons[$i]->CreateProcess ($d_cmd, $d_param);
+ $DEAMONS[$i]->Spawn ();
+
+ if ($tg_daemons[$i]->WaitForFileTimed($iorbase,
+ $tg_daemons[$i]->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior $iorfile file of node daemon $i could not be found\n";
+ for (; $i >= 0; --$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ return 0;
+}
+
+create_targets ();
+init_ior_files ();
+
+# Invoke naming service
+
+$NS = $tg_naming->CreateProcess ("$TAO_ROOT/orbsvcs/Naming_Service/Naming_Service", "-m 1 -ORBEndpoint iiop://localhost:60004 -o $ior_nsfile");
+
+$NS->Spawn ();
+
+print STDERR "Starting Naming Service with -m 1 -ORBEndpoint iiop://localhost:60004 -o ns.ior\n";
+
+if ($tg_naming->WaitForFileTimed ($ior_nsbase,
+ $tg_naming->ProcessStartWaitInterval ()) == -1) {
+ print STDERR "ERROR: cannot find naming service IOR file\n";
+ $NS->Kill (); $NS->TimedWait (1);
+ exit 1;
+}
+
+$ns_running = 1;
+# Set up NamingService environment
+$ENV{"NameServiceIOR"} = "corbaloc:iiop:localhost:60004/NameService";
+
+# Invoke node daemon.
+print "Invoking node daemon\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemon\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$daemons_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager (dance_execution_manager.exe) with -e$ior_emfile\n";
+$EM = $tg_exe_man->CreateProcess ("$DANCE_ROOT/bin/dance_execution_manager",
+ "-e$ior_emfile --domain-nc corbaloc:rir:/NameService");
+$EM->Spawn ();
+
+if ($tg_exe_man->WaitForFileTimed ($ior_embase,
+ $tg_exe_man->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - launch the application -\n";
+
+print "Start dance_plan_launcher.exe with -x $cdp_file -k file://$ior_emfile\n";
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-x $cdp_file -k file://$ior_emfile");
+$E->SpawnWaitKill (2*$tg_executor->ProcessStartWaitInterval ());
+
+for ($i = 0; $i < $nr_daemon; ++$i) {
+ if ($tg_daemons[$i]->WaitForFileTimed ($iorbases[$i],
+ $tg_daemons[$i]->ProcessStopWaitInterval ()) == -1) {
+ print STDERR "ERROR: The ior file of daemon $i could not be found\n";
+ kill_open_processes ();
+ exit 1;
+ }
+}
+
+print "Sleeping 180 seconds to allow task to complete\n";
+sleep (180);
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+print "by running dance_plan_launcher.exe with -k file://$ior_emfile -x $cdp_file -q\n";
+
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-k file://$ior_emfile -x $cdp_file -s");
+$E->SpawnWaitKill ($tg_executor->ProcessStopWaitInterval ());
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub3.pl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub3.pl
new file mode 100755
index 00000000000..f210522bace
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub3.pl
@@ -0,0 +1,219 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::TestTarget;
+
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$TAO_ROOT = "$ENV{'TAO_ROOT'}";
+$DANCE_ROOT = "$ENV{'DANCE_ROOT'}";
+
+$daemons_running = 0;
+$em_running = 0;
+$ns_running = 0;
+
+$nr_daemon = 1;
+@ports = ( 60001 );
+@iorbases = ( "Sender.ior" );
+@iorfiles = 0;
+@nodenames = ( "SenderNode" );
+
+# ior files other than daemon
+# ior files other than daemon
+$ior_nsbase = "ns.ior";
+$ior_nsfile = 0;
+$ior_embase = "EM.ior";
+$ior_emfile = 0;
+
+# Processes
+$E = 0;
+$EM = 0;
+$NS = 0;
+@DEAMONS = 0;
+
+# targets
+@tg_daemons = 0;
+$tg_naming = 0;
+$tg_exe_man = 0;
+$tg_executor = 0;
+
+$status = 0;
+$cdp_file = "Plan_pub3.cdp";
+
+sub create_targets {
+ # naming service
+ $tg_naming = PerlACE::TestTarget::create_target (1) || die "Create target for ns failed\n";
+ $tg_naming->AddLibPath ('../lib');
+ # daemon
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i] = PerlACE::TestTarget::create_target ($i+1) || die "Create target for deamon $i failed\n";
+ $tg_daemons[$i]->AddLibPath ('../lib');
+ }
+ # execution manager
+ $tg_exe_man = PerlACE::TestTarget::create_target (1) || die "Create target for EM failed\n";
+ $tg_exe_man->AddLibPath ('../lib');
+ # executor (plan_launcher)
+ $tg_executor = PerlACE::TestTarget::create_target (1) || die "Create target for executor failed\n";
+ $tg_executor->AddLibPath ('../lib');
+}
+
+sub init_ior_files {
+ $ior_nsfile = $tg_naming->LocalFile ($ior_nsbase);
+ $ior_emfile = $tg_exe_man->LocalFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+ delete_ior_files ();
+}
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i]->DeleteFile ($iorbases[$i]);
+ }
+ $tg_naming->DeleteFile ($ior_nsbase);
+ $tg_exe_man->DeleteFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+}
+
+sub kill_node_daemon {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemon ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill (); $EM->TimedWait (1);
+ }
+
+ if ($ns_running == 1) {
+ $NS->Kill (); $NS->TimedWait (1);
+ }
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorbase = $iorbases[$i];
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+ $nodename = $nodenames[$i];
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$CIAO_ROOT/bin/ciao_componentserver";
+
+ $d_cmd = "$DANCE_ROOT/bin/dance_node_manager";
+ $d_param = "-ORBEndpoint $iiop -s $node_app -n $nodename=$iorfile -t 30 --domain-nc corbaloc:rir:/NameService";
+
+ print "Run dance_node_manager with $d_param\n";
+
+ $DEAMONS[$i] = $tg_daemons[$i]->CreateProcess ($d_cmd, $d_param);
+ $DEAMONS[$i]->Spawn ();
+
+ if ($tg_daemons[$i]->WaitForFileTimed($iorbase,
+ $tg_daemons[$i]->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior $iorfile file of node daemon $i could not be found\n";
+ for (; $i >= 0; --$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ return 0;
+}
+
+create_targets ();
+init_ior_files ();
+
+# Invoke naming service
+
+$NS = $tg_naming->CreateProcess ("$TAO_ROOT/orbsvcs/Naming_Service/Naming_Service", "-m 1 -ORBEndpoint iiop://localhost:60004 -o $ior_nsfile");
+
+$NS->Spawn ();
+
+print STDERR "Starting Naming Service with -m 1 -ORBEndpoint iiop://localhost:60004 -o ns.ior\n";
+
+if ($tg_naming->WaitForFileTimed ($ior_nsbase,
+ $tg_naming->ProcessStartWaitInterval ()) == -1) {
+ print STDERR "ERROR: cannot find naming service IOR file\n";
+ $NS->Kill (); $NS->TimedWait (1);
+ exit 1;
+}
+
+$ns_running = 1;
+# Set up NamingService environment
+$ENV{"NameServiceIOR"} = "corbaloc:iiop:localhost:60004/NameService";
+
+# Invoke node daemon.
+print "Invoking node daemon\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemon\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$daemons_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager (dance_execution_manager.exe) with -e$ior_emfile\n";
+$EM = $tg_exe_man->CreateProcess ("$DANCE_ROOT/bin/dance_execution_manager",
+ "-e$ior_emfile --domain-nc corbaloc:rir:/NameService");
+$EM->Spawn ();
+
+if ($tg_exe_man->WaitForFileTimed ($ior_embase,
+ $tg_exe_man->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - launch the application -\n";
+
+print "Start dance_plan_launcher.exe with -x $cdp_file -k file://$ior_emfile\n";
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-x $cdp_file -k file://$ior_emfile");
+$E->SpawnWaitKill (2*$tg_executor->ProcessStartWaitInterval ());
+
+for ($i = 0; $i < $nr_daemon; ++$i) {
+ if ($tg_daemons[$i]->WaitForFileTimed ($iorbases[$i],
+ $tg_daemons[$i]->ProcessStopWaitInterval ()) == -1) {
+ print STDERR "ERROR: The ior file of daemon $i could not be found\n";
+ kill_open_processes ();
+ exit 1;
+ }
+}
+
+print "Sleeping 180 seconds to allow task to complete\n";
+sleep (180);
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+print "by running dance_plan_launcher.exe with -k file://$ior_emfile -x $cdp_file -q\n";
+
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-k file://$ior_emfile -x $cdp_file -s");
+$E->SpawnWaitKill ($tg_executor->ProcessStopWaitInterval ());
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub_BE.pl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub_BE.pl
new file mode 100755
index 00000000000..7e84b92407a
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_pub_BE.pl
@@ -0,0 +1,219 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::TestTarget;
+
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$TAO_ROOT = "$ENV{'TAO_ROOT'}";
+$DANCE_ROOT = "$ENV{'DANCE_ROOT'}";
+
+$daemons_running = 0;
+$em_running = 0;
+$ns_running = 0;
+
+$nr_daemon = 1;
+@ports = ( 60001 );
+@iorbases = ( "Sender.ior" );
+@iorfiles = 0;
+@nodenames = ( "SenderNode" );
+
+# ior files other than daemon
+# ior files other than daemon
+$ior_nsbase = "ns.ior";
+$ior_nsfile = 0;
+$ior_embase = "EM.ior";
+$ior_emfile = 0;
+
+# Processes
+$E = 0;
+$EM = 0;
+$NS = 0;
+@DEAMONS = 0;
+
+# targets
+@tg_daemons = 0;
+$tg_naming = 0;
+$tg_exe_man = 0;
+$tg_executor = 0;
+
+$status = 0;
+$cdp_file = "Plan_pub_BE.cdp";
+
+sub create_targets {
+ # naming service
+ $tg_naming = PerlACE::TestTarget::create_target (1) || die "Create target for ns failed\n";
+ $tg_naming->AddLibPath ('../lib');
+ # daemon
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i] = PerlACE::TestTarget::create_target ($i+1) || die "Create target for deamon $i failed\n";
+ $tg_daemons[$i]->AddLibPath ('../lib');
+ }
+ # execution manager
+ $tg_exe_man = PerlACE::TestTarget::create_target (1) || die "Create target for EM failed\n";
+ $tg_exe_man->AddLibPath ('../lib');
+ # executor (plan_launcher)
+ $tg_executor = PerlACE::TestTarget::create_target (1) || die "Create target for executor failed\n";
+ $tg_executor->AddLibPath ('../lib');
+}
+
+sub init_ior_files {
+ $ior_nsfile = $tg_naming->LocalFile ($ior_nsbase);
+ $ior_emfile = $tg_exe_man->LocalFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+ delete_ior_files ();
+}
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i]->DeleteFile ($iorbases[$i]);
+ }
+ $tg_naming->DeleteFile ($ior_nsbase);
+ $tg_exe_man->DeleteFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+}
+
+sub kill_node_daemon {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemon ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill (); $EM->TimedWait (1);
+ }
+
+ if ($ns_running == 1) {
+ $NS->Kill (); $NS->TimedWait (1);
+ }
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorbase = $iorbases[$i];
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+ $nodename = $nodenames[$i];
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$CIAO_ROOT/bin/ciao_componentserver";
+
+ $d_cmd = "$DANCE_ROOT/bin/dance_node_manager";
+ $d_param = "-ORBEndpoint $iiop -s $node_app -n $nodename=$iorfile -t 30 --domain-nc corbaloc:rir:/NameService";
+
+ print "Run dance_node_manager with $d_param\n";
+
+ $DEAMONS[$i] = $tg_daemons[$i]->CreateProcess ($d_cmd, $d_param);
+ $DEAMONS[$i]->Spawn ();
+
+ if ($tg_daemons[$i]->WaitForFileTimed($iorbase,
+ $tg_daemons[$i]->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior $iorfile file of node daemon $i could not be found\n";
+ for (; $i >= 0; --$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ return 0;
+}
+
+create_targets ();
+init_ior_files ();
+
+# Invoke naming service
+
+$NS = $tg_naming->CreateProcess ("$TAO_ROOT/orbsvcs/Naming_Service/Naming_Service", "-m 1 -ORBEndpoint iiop://localhost:60004 -o $ior_nsfile");
+
+$NS->Spawn ();
+
+print STDERR "Starting Naming Service with -m 1 -ORBEndpoint iiop://localhost:60004 -o ns.ior\n";
+
+if ($tg_naming->WaitForFileTimed ($ior_nsbase,
+ $tg_naming->ProcessStartWaitInterval ()) == -1) {
+ print STDERR "ERROR: cannot find naming service IOR file\n";
+ $NS->Kill (); $NS->TimedWait (1);
+ exit 1;
+}
+
+$ns_running = 1;
+# Set up NamingService environment
+$ENV{"NameServiceIOR"} = "corbaloc:iiop:localhost:60004/NameService";
+
+# Invoke node daemon.
+print "Invoking node daemon\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemon\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$daemons_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager (dance_execution_manager.exe) with -e$ior_emfile\n";
+$EM = $tg_exe_man->CreateProcess ("$DANCE_ROOT/bin/dance_execution_manager",
+ "-e$ior_emfile --domain-nc corbaloc:rir:/NameService");
+$EM->Spawn ();
+
+if ($tg_exe_man->WaitForFileTimed ($ior_embase,
+ $tg_exe_man->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - launch the application -\n";
+
+print "Start dance_plan_launcher.exe with -x $cdp_file -k file://$ior_emfile\n";
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-x $cdp_file -k file://$ior_emfile");
+$E->SpawnWaitKill (2*$tg_executor->ProcessStartWaitInterval ());
+
+for ($i = 0; $i < $nr_daemon; ++$i) {
+ if ($tg_daemons[$i]->WaitForFileTimed ($iorbases[$i],
+ $tg_daemons[$i]->ProcessStopWaitInterval ()) == -1) {
+ print STDERR "ERROR: The ior file of daemon $i could not be found\n";
+ kill_open_processes ();
+ exit 1;
+ }
+}
+
+print "Sleeping 180 seconds to allow task to complete\n";
+sleep (180);
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+print "by running dance_plan_launcher.exe with -k file://$ior_emfile -x $cdp_file -q\n";
+
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-k file://$ior_emfile -x $cdp_file -s");
+$E->SpawnWaitKill ($tg_executor->ProcessStopWaitInterval ());
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub.pl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub.pl
new file mode 100755
index 00000000000..62fc97da27d
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub.pl
@@ -0,0 +1,219 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::TestTarget;
+
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$TAO_ROOT = "$ENV{'TAO_ROOT'}";
+$DANCE_ROOT = "$ENV{'DANCE_ROOT'}";
+
+$daemons_running = 0;
+$em_running = 0;
+$ns_running = 0;
+
+$nr_daemon = 1;
+@ports = ( 60002 );
+@iorbases = ( "Receiver.ior" );
+@iorfiles = 0;
+@nodenames = ( "ReceiverNode" );
+
+# ior files other than daemon
+# ior files other than daemon
+$ior_nsbase = "ns1.ior";
+$ior_nsfile = 0;
+$ior_embase = "EM1.ior";
+$ior_emfile = 0;
+
+# Processes
+$E = 0;
+$EM = 0;
+$NS = 0;
+@DEAMONS = 0;
+
+# targets
+@tg_daemons = 0;
+$tg_naming = 0;
+$tg_exe_man = 0;
+$tg_executor = 0;
+
+$status = 0;
+$cdp_file = "Plan_sub.cdp";
+
+sub create_targets {
+ # naming service
+ $tg_naming = PerlACE::TestTarget::create_target (1) || die "Create target for ns failed\n";
+ $tg_naming->AddLibPath ('../lib');
+ # daemon
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i] = PerlACE::TestTarget::create_target ($i+1) || die "Create target for deamon $i failed\n";
+ $tg_daemons[$i]->AddLibPath ('../lib');
+ }
+ # execution manager
+ $tg_exe_man = PerlACE::TestTarget::create_target (1) || die "Create target for EM failed\n";
+ $tg_exe_man->AddLibPath ('../lib');
+ # executor (plan_launcher)
+ $tg_executor = PerlACE::TestTarget::create_target (1) || die "Create target for executor failed\n";
+ $tg_executor->AddLibPath ('../lib');
+}
+
+sub init_ior_files {
+ $ior_nsfile = $tg_naming->LocalFile ($ior_nsbase);
+ $ior_emfile = $tg_exe_man->LocalFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+ delete_ior_files ();
+}
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i]->DeleteFile ($iorbases[$i]);
+ }
+ $tg_naming->DeleteFile ($ior_nsbase);
+ $tg_exe_man->DeleteFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+}
+
+sub kill_node_daemon {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemon ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill (); $EM->TimedWait (1);
+ }
+
+ if ($ns_running == 1) {
+ $NS->Kill (); $NS->TimedWait (1);
+ }
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorbase = $iorbases[$i];
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+ $nodename = $nodenames[$i];
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$CIAO_ROOT/bin/ciao_componentserver";
+
+ $d_cmd = "$DANCE_ROOT/bin/dance_node_manager";
+ $d_param = "-ORBEndpoint $iiop -s $node_app -n $nodename=$iorfile -t 30 --domain-nc corbaloc:rir:/NameService";
+
+ print "Run dance_node_manager with $d_param\n";
+
+ $DEAMONS[$i] = $tg_daemons[$i]->CreateProcess ($d_cmd, $d_param);
+ $DEAMONS[$i]->Spawn ();
+
+ if ($tg_daemons[$i]->WaitForFileTimed($iorbase,
+ $tg_daemons[$i]->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior $iorfile file of node daemon $i could not be found\n";
+ for (; $i >= 0; --$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ return 0;
+}
+
+create_targets ();
+init_ior_files ();
+
+# Invoke naming service
+
+$NS = $tg_naming->CreateProcess ("$TAO_ROOT/orbsvcs/Naming_Service/Naming_Service", "-m 1 -ORBEndpoint iiop://localhost:60003 -o $ior_nsfile");
+
+$NS->Spawn ();
+
+print STDERR "Starting Naming Service with -m 1 -ORBEndpoint iiop://localhost:60003 -o ns.ior\n";
+
+if ($tg_naming->WaitForFileTimed ($ior_nsbase,
+ $tg_naming->ProcessStartWaitInterval ()) == -1) {
+ print STDERR "ERROR: cannot find naming service IOR file\n";
+ $NS->Kill (); $NS->TimedWait (1);
+ exit 1;
+}
+
+$ns_running = 1;
+# Set up NamingService environment
+$ENV{"NameServiceIOR"} = "corbaloc:iiop:localhost:60003/NameService";
+
+# Invoke node daemon.
+print "Invoking node daemon\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemon\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$daemons_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager (dance_execution_manager.exe) with -e$ior_emfile\n";
+$EM = $tg_exe_man->CreateProcess ("$DANCE_ROOT/bin/dance_execution_manager",
+ "-e$ior_emfile --domain-nc corbaloc:rir:/NameService");
+$EM->Spawn ();
+
+if ($tg_exe_man->WaitForFileTimed ($ior_embase,
+ $tg_exe_man->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - launch the application -\n";
+
+print "Start dance_plan_launcher.exe with -x $cdp_file -k file://$ior_emfile\n";
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-x $cdp_file -k file://$ior_emfile");
+$E->SpawnWaitKill (2*$tg_executor->ProcessStartWaitInterval ());
+
+for ($i = 0; $i < $nr_daemon; ++$i) {
+ if ($tg_daemons[$i]->WaitForFileTimed ($iorbases[$i],
+ $tg_daemons[$i]->ProcessStopWaitInterval ()) == -1) {
+ print STDERR "ERROR: The ior file of daemon $i could not be found\n";
+ kill_open_processes ();
+ exit 1;
+ }
+}
+
+print "Sleeping 180 seconds to allow task to complete\n";
+sleep (180);
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+print "by running dance_plan_launcher.exe with -k file://$ior_emfile -x $cdp_file -q\n";
+
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-k file://$ior_emfile -x $cdp_file -s");
+$E->SpawnWaitKill ($tg_executor->ProcessStopWaitInterval ());
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub2.pl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub2.pl
new file mode 100755
index 00000000000..26a273dd7b7
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub2.pl
@@ -0,0 +1,219 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::TestTarget;
+
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$TAO_ROOT = "$ENV{'TAO_ROOT'}";
+$DANCE_ROOT = "$ENV{'DANCE_ROOT'}";
+
+$daemons_running = 0;
+$em_running = 0;
+$ns_running = 0;
+
+$nr_daemon = 1;
+@ports = ( 60005 );
+@iorbases = ( "Receiver.ior" );
+@iorfiles = 0;
+@nodenames = ( "ReceiverNode" );
+
+# ior files other than daemon
+# ior files other than daemon
+$ior_nsbase = "ns1.ior";
+$ior_nsfile = 0;
+$ior_embase = "EM2.ior";
+$ior_emfile = 0;
+
+# Processes
+$E = 0;
+$EM = 0;
+$NS = 0;
+@DEAMONS = 0;
+
+# targets
+@tg_daemons = 0;
+$tg_naming = 0;
+$tg_exe_man = 0;
+$tg_executor = 0;
+
+$status = 0;
+$cdp_file = "Plan_sub.cdp";
+
+sub create_targets {
+ # naming service
+ $tg_naming = PerlACE::TestTarget::create_target (1) || die "Create target for ns failed\n";
+ $tg_naming->AddLibPath ('../lib');
+ # daemon
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i] = PerlACE::TestTarget::create_target ($i+1) || die "Create target for deamon $i failed\n";
+ $tg_daemons[$i]->AddLibPath ('../lib');
+ }
+ # execution manager
+ $tg_exe_man = PerlACE::TestTarget::create_target (1) || die "Create target for EM failed\n";
+ $tg_exe_man->AddLibPath ('../lib');
+ # executor (plan_launcher)
+ $tg_executor = PerlACE::TestTarget::create_target (1) || die "Create target for executor failed\n";
+ $tg_executor->AddLibPath ('../lib');
+}
+
+sub init_ior_files {
+ $ior_nsfile = $tg_naming->LocalFile ($ior_nsbase);
+ $ior_emfile = $tg_exe_man->LocalFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+ delete_ior_files ();
+}
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i]->DeleteFile ($iorbases[$i]);
+ }
+ $tg_naming->DeleteFile ($ior_nsbase);
+ $tg_exe_man->DeleteFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+}
+
+sub kill_node_daemon {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemon ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill (); $EM->TimedWait (1);
+ }
+
+ if ($ns_running == 1) {
+ $NS->Kill (); $NS->TimedWait (1);
+ }
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorbase = $iorbases[$i];
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+ $nodename = $nodenames[$i];
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$CIAO_ROOT/bin/ciao_componentserver";
+
+ $d_cmd = "$DANCE_ROOT/bin/dance_node_manager";
+ $d_param = "-ORBEndpoint $iiop -s $node_app -n $nodename=$iorfile -t 30 --domain-nc corbaloc:rir:/NameService";
+
+ print "Run dance_node_manager with $d_param\n";
+
+ $DEAMONS[$i] = $tg_daemons[$i]->CreateProcess ($d_cmd, $d_param);
+ $DEAMONS[$i]->Spawn ();
+
+ if ($tg_daemons[$i]->WaitForFileTimed($iorbase,
+ $tg_daemons[$i]->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior $iorfile file of node daemon $i could not be found\n";
+ for (; $i >= 0; --$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ return 0;
+}
+
+create_targets ();
+init_ior_files ();
+
+# Invoke naming service
+
+$NS = $tg_naming->CreateProcess ("$TAO_ROOT/orbsvcs/Naming_Service/Naming_Service", "-m 1 -ORBEndpoint iiop://localhost:60006 -o $ior_nsfile");
+
+$NS->Spawn ();
+
+print STDERR "Starting Naming Service with -m 1 -ORBEndpoint iiop://localhost:60006 -o ns.ior\n";
+
+if ($tg_naming->WaitForFileTimed ($ior_nsbase,
+ $tg_naming->ProcessStartWaitInterval ()) == -1) {
+ print STDERR "ERROR: cannot find naming service IOR file\n";
+ $NS->Kill (); $NS->TimedWait (1);
+ exit 1;
+}
+
+$ns_running = 1;
+# Set up NamingService environment
+$ENV{"NameServiceIOR"} = "corbaloc:iiop:localhost:60006/NameService";
+
+# Invoke node daemon.
+print "Invoking node daemon\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemon\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$daemons_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager (dance_execution_manager.exe) with -e$ior_emfile\n";
+$EM = $tg_exe_man->CreateProcess ("$DANCE_ROOT/bin/dance_execution_manager",
+ "-e$ior_emfile --domain-nc corbaloc:rir:/NameService");
+$EM->Spawn ();
+
+if ($tg_exe_man->WaitForFileTimed ($ior_embase,
+ $tg_exe_man->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - launch the application -\n";
+
+print "Start dance_plan_launcher.exe with -x $cdp_file -k file://$ior_emfile\n";
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-x $cdp_file -k file://$ior_emfile");
+$E->SpawnWaitKill (2*$tg_executor->ProcessStartWaitInterval ());
+
+for ($i = 0; $i < $nr_daemon; ++$i) {
+ if ($tg_daemons[$i]->WaitForFileTimed ($iorbases[$i],
+ $tg_daemons[$i]->ProcessStopWaitInterval ()) == -1) {
+ print STDERR "ERROR: The ior file of daemon $i could not be found\n";
+ kill_open_processes ();
+ exit 1;
+ }
+}
+
+print "Sleeping 180 seconds to allow task to complete\n";
+sleep (180);
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+print "by running dance_plan_launcher.exe with -k file://$ior_emfile -x $cdp_file -q\n";
+
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-k file://$ior_emfile -x $cdp_file -s");
+$E->SpawnWaitKill ($tg_executor->ProcessStopWaitInterval ());
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub3.pl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub3.pl
new file mode 100755
index 00000000000..8fa41296ab7
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub3.pl
@@ -0,0 +1,219 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::TestTarget;
+
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$TAO_ROOT = "$ENV{'TAO_ROOT'}";
+$DANCE_ROOT = "$ENV{'DANCE_ROOT'}";
+
+$daemons_running = 0;
+$em_running = 0;
+$ns_running = 0;
+
+$nr_daemon = 1;
+@ports = ( 60007 );
+@iorbases = ( "Receiver.ior" );
+@iorfiles = 0;
+@nodenames = ( "ReceiverNode" );
+
+# ior files other than daemon
+# ior files other than daemon
+$ior_nsbase = "ns1.ior";
+$ior_nsfile = 0;
+$ior_embase = "EM3.ior";
+$ior_emfile = 0;
+
+# Processes
+$E = 0;
+$EM = 0;
+$NS = 0;
+@DEAMONS = 0;
+
+# targets
+@tg_daemons = 0;
+$tg_naming = 0;
+$tg_exe_man = 0;
+$tg_executor = 0;
+
+$status = 0;
+$cdp_file = "Plan_sub.cdp";
+
+sub create_targets {
+ # naming service
+ $tg_naming = PerlACE::TestTarget::create_target (1) || die "Create target for ns failed\n";
+ $tg_naming->AddLibPath ('../lib');
+ # daemon
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i] = PerlACE::TestTarget::create_target ($i+1) || die "Create target for deamon $i failed\n";
+ $tg_daemons[$i]->AddLibPath ('../lib');
+ }
+ # execution manager
+ $tg_exe_man = PerlACE::TestTarget::create_target (1) || die "Create target for EM failed\n";
+ $tg_exe_man->AddLibPath ('../lib');
+ # executor (plan_launcher)
+ $tg_executor = PerlACE::TestTarget::create_target (1) || die "Create target for executor failed\n";
+ $tg_executor->AddLibPath ('../lib');
+}
+
+sub init_ior_files {
+ $ior_nsfile = $tg_naming->LocalFile ($ior_nsbase);
+ $ior_emfile = $tg_exe_man->LocalFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+ delete_ior_files ();
+}
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i]->DeleteFile ($iorbases[$i]);
+ }
+ $tg_naming->DeleteFile ($ior_nsbase);
+ $tg_exe_man->DeleteFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+}
+
+sub kill_node_daemon {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemon ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill (); $EM->TimedWait (1);
+ }
+
+ if ($ns_running == 1) {
+ $NS->Kill (); $NS->TimedWait (1);
+ }
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorbase = $iorbases[$i];
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+ $nodename = $nodenames[$i];
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$CIAO_ROOT/bin/ciao_componentserver";
+
+ $d_cmd = "$DANCE_ROOT/bin/dance_node_manager";
+ $d_param = "-ORBEndpoint $iiop -s $node_app -n $nodename=$iorfile -t 30 --domain-nc corbaloc:rir:/NameService";
+
+ print "Run dance_node_manager with $d_param\n";
+
+ $DEAMONS[$i] = $tg_daemons[$i]->CreateProcess ($d_cmd, $d_param);
+ $DEAMONS[$i]->Spawn ();
+
+ if ($tg_daemons[$i]->WaitForFileTimed($iorbase,
+ $tg_daemons[$i]->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior $iorfile file of node daemon $i could not be found\n";
+ for (; $i >= 0; --$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ return 0;
+}
+
+create_targets ();
+init_ior_files ();
+
+# Invoke naming service
+
+$NS = $tg_naming->CreateProcess ("$TAO_ROOT/orbsvcs/Naming_Service/Naming_Service", "-m 1 -ORBEndpoint iiop://localhost:60008 -o $ior_nsfile");
+
+$NS->Spawn ();
+
+print STDERR "Starting Naming Service with -m 1 -ORBEndpoint iiop://localhost:60008 -o ns.ior\n";
+
+if ($tg_naming->WaitForFileTimed ($ior_nsbase,
+ $tg_naming->ProcessStartWaitInterval ()) == -1) {
+ print STDERR "ERROR: cannot find naming service IOR file\n";
+ $NS->Kill (); $NS->TimedWait (1);
+ exit 1;
+}
+
+$ns_running = 1;
+# Set up NamingService environment
+$ENV{"NameServiceIOR"} = "corbaloc:iiop:localhost:60008/NameService";
+
+# Invoke node daemon.
+print "Invoking node daemon\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemon\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$daemons_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager (dance_execution_manager.exe) with -e$ior_emfile\n";
+$EM = $tg_exe_man->CreateProcess ("$DANCE_ROOT/bin/dance_execution_manager",
+ "-e$ior_emfile --domain-nc corbaloc:rir:/NameService");
+$EM->Spawn ();
+
+if ($tg_exe_man->WaitForFileTimed ($ior_embase,
+ $tg_exe_man->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - launch the application -\n";
+
+print "Start dance_plan_launcher.exe with -x $cdp_file -k file://$ior_emfile\n";
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-x $cdp_file -k file://$ior_emfile");
+$E->SpawnWaitKill (2*$tg_executor->ProcessStartWaitInterval ());
+
+for ($i = 0; $i < $nr_daemon; ++$i) {
+ if ($tg_daemons[$i]->WaitForFileTimed ($iorbases[$i],
+ $tg_daemons[$i]->ProcessStopWaitInterval ()) == -1) {
+ print STDERR "ERROR: The ior file of daemon $i could not be found\n";
+ kill_open_processes ();
+ exit 1;
+ }
+}
+
+print "Sleeping 180 seconds to allow task to complete\n";
+sleep (180);
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+print "by running dance_plan_launcher.exe with -k file://$ior_emfile -x $cdp_file -q\n";
+
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-k file://$ior_emfile -x $cdp_file -s");
+$E->SpawnWaitKill ($tg_executor->ProcessStopWaitInterval ());
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub_BE.pl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub_BE.pl
new file mode 100755
index 00000000000..d178bdf4359
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_sub_BE.pl
@@ -0,0 +1,219 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::TestTarget;
+
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$TAO_ROOT = "$ENV{'TAO_ROOT'}";
+$DANCE_ROOT = "$ENV{'DANCE_ROOT'}";
+
+$daemons_running = 0;
+$em_running = 0;
+$ns_running = 0;
+
+$nr_daemon = 1;
+@ports = ( 60002 );
+@iorbases = ( "Receiver.ior" );
+@iorfiles = 0;
+@nodenames = ( "ReceiverNode" );
+
+# ior files other than daemon
+# ior files other than daemon
+$ior_nsbase = "ns1.ior";
+$ior_nsfile = 0;
+$ior_embase = "EM1.ior";
+$ior_emfile = 0;
+
+# Processes
+$E = 0;
+$EM = 0;
+$NS = 0;
+@DEAMONS = 0;
+
+# targets
+@tg_daemons = 0;
+$tg_naming = 0;
+$tg_exe_man = 0;
+$tg_executor = 0;
+
+$status = 0;
+$cdp_file = "Plan_sub_BE.cdp";
+
+sub create_targets {
+ # naming service
+ $tg_naming = PerlACE::TestTarget::create_target (1) || die "Create target for ns failed\n";
+ $tg_naming->AddLibPath ('../lib');
+ # daemon
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i] = PerlACE::TestTarget::create_target ($i+1) || die "Create target for deamon $i failed\n";
+ $tg_daemons[$i]->AddLibPath ('../lib');
+ }
+ # execution manager
+ $tg_exe_man = PerlACE::TestTarget::create_target (1) || die "Create target for EM failed\n";
+ $tg_exe_man->AddLibPath ('../lib');
+ # executor (plan_launcher)
+ $tg_executor = PerlACE::TestTarget::create_target (1) || die "Create target for executor failed\n";
+ $tg_executor->AddLibPath ('../lib');
+}
+
+sub init_ior_files {
+ $ior_nsfile = $tg_naming->LocalFile ($ior_nsbase);
+ $ior_emfile = $tg_exe_man->LocalFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+ delete_ior_files ();
+}
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i]->DeleteFile ($iorbases[$i]);
+ }
+ $tg_naming->DeleteFile ($ior_nsbase);
+ $tg_exe_man->DeleteFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+}
+
+sub kill_node_daemon {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemon ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill (); $EM->TimedWait (1);
+ }
+
+ if ($ns_running == 1) {
+ $NS->Kill (); $NS->TimedWait (1);
+ }
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorbase = $iorbases[$i];
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+ $nodename = $nodenames[$i];
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$CIAO_ROOT/bin/ciao_componentserver";
+
+ $d_cmd = "$DANCE_ROOT/bin/dance_node_manager";
+ $d_param = "-ORBEndpoint $iiop -s $node_app -n $nodename=$iorfile -t 30 --domain-nc corbaloc:rir:/NameService";
+
+ print "Run dance_node_manager with $d_param\n";
+
+ $DEAMONS[$i] = $tg_daemons[$i]->CreateProcess ($d_cmd, $d_param);
+ $DEAMONS[$i]->Spawn ();
+
+ if ($tg_daemons[$i]->WaitForFileTimed($iorbase,
+ $tg_daemons[$i]->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior $iorfile file of node daemon $i could not be found\n";
+ for (; $i >= 0; --$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ return 0;
+}
+
+create_targets ();
+init_ior_files ();
+
+# Invoke naming service
+
+$NS = $tg_naming->CreateProcess ("$TAO_ROOT/orbsvcs/Naming_Service/Naming_Service", "-m 1 -ORBEndpoint iiop://localhost:60003 -o $ior_nsfile");
+
+$NS->Spawn ();
+
+print STDERR "Starting Naming Service with -m 1 -ORBEndpoint iiop://localhost:60003 -o ns.ior\n";
+
+if ($tg_naming->WaitForFileTimed ($ior_nsbase,
+ $tg_naming->ProcessStartWaitInterval ()) == -1) {
+ print STDERR "ERROR: cannot find naming service IOR file\n";
+ $NS->Kill (); $NS->TimedWait (1);
+ exit 1;
+}
+
+$ns_running = 1;
+# Set up NamingService environment
+$ENV{"NameServiceIOR"} = "corbaloc:iiop:localhost:60003/NameService";
+
+# Invoke node daemon.
+print "Invoking node daemon\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemon\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$daemons_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager (dance_execution_manager.exe) with -e$ior_emfile\n";
+$EM = $tg_exe_man->CreateProcess ("$DANCE_ROOT/bin/dance_execution_manager",
+ "-e$ior_emfile --domain-nc corbaloc:rir:/NameService");
+$EM->Spawn ();
+
+if ($tg_exe_man->WaitForFileTimed ($ior_embase,
+ $tg_exe_man->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - launch the application -\n";
+
+print "Start dance_plan_launcher.exe with -x $cdp_file -k file://$ior_emfile\n";
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-x $cdp_file -k file://$ior_emfile");
+$E->SpawnWaitKill (2*$tg_executor->ProcessStartWaitInterval ());
+
+for ($i = 0; $i < $nr_daemon; ++$i) {
+ if ($tg_daemons[$i]->WaitForFileTimed ($iorbases[$i],
+ $tg_daemons[$i]->ProcessStopWaitInterval ()) == -1) {
+ print STDERR "ERROR: The ior file of daemon $i could not be found\n";
+ kill_open_processes ();
+ exit 1;
+ }
+}
+
+print "Sleeping 180 seconds to allow task to complete\n";
+sleep (180);
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+print "by running dance_plan_launcher.exe with -k file://$ior_emfile -x $cdp_file -q\n";
+
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-k file://$ior_emfile -x $cdp_file -s");
+$E->SpawnWaitKill ($tg_executor->ProcessStopWaitInterval ());
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_test.pl b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_test.pl
new file mode 100755
index 00000000000..943d0e31404
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/performance-tests/Keyed/descriptors/run_test.pl
@@ -0,0 +1,221 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{'ACE_ROOT'}/bin";
+use PerlACE::TestTarget;
+
+$CIAO_ROOT = "$ENV{'CIAO_ROOT'}";
+$TAO_ROOT = "$ENV{'TAO_ROOT'}";
+$DANCE_ROOT = "$ENV{'DANCE_ROOT'}";
+
+$daemons_running = 0;
+$em_running = 0;
+$ns_running = 0;
+
+$nr_daemon = 2;
+@ports = ( 60001, 60002 );
+@iorbases = ( "NodeApp1.ior", "NodeApp2.ior" );
+@iorfiles = 0;
+@nodenames = ( "SenderNode", "ReceiverNode" );
+
+# ior files other than daemon
+# ior files other than daemon
+$ior_nsbase = "ns.ior";
+$ior_nsfile = 0;
+$ior_embase = "EM.ior";
+$ior_emfile = 0;
+
+# Processes
+$E = 0;
+$EM = 0;
+$NS = 0;
+@DEAMONS = 0;
+
+# targets
+@tg_daemons = 0;
+$tg_naming = 0;
+$tg_exe_man = 0;
+$tg_executor = 0;
+
+$status = 0;
+$cdp_file = "Plan.cdp";
+
+sub create_targets {
+ # naming service
+ $tg_naming = PerlACE::TestTarget::create_target (1) || die "Create target for ns failed\n";
+ $tg_naming->AddLibPath ('../lib');
+ # daemon
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i] = PerlACE::TestTarget::create_target ($i+1) || die "Create target for deamon $i failed\n";
+ $tg_daemons[$i]->AddLibPath ('../lib');
+ }
+ # execution manager
+ $tg_exe_man = PerlACE::TestTarget::create_target (1) || die "Create target for EM failed\n";
+ $tg_exe_man->AddLibPath ('../lib');
+ # executor (plan_launcher)
+ $tg_executor = PerlACE::TestTarget::create_target (1) || die "Create target for executor failed\n";
+ $tg_executor->AddLibPath ('../lib');
+}
+
+sub init_ior_files {
+ $ior_nsfile = $tg_naming->LocalFile ($ior_nsbase);
+ $ior_emfile = $tg_exe_man->LocalFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+ delete_ior_files ();
+}
+
+# Delete if there are any .ior files.
+sub delete_ior_files {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i]->DeleteFile ($iorbases[$i]);
+ }
+ $tg_naming->DeleteFile ($ior_nsbase);
+ $tg_exe_man->DeleteFile ($ior_embase);
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorfiles[$i] = $tg_daemons[$i]->LocalFile ($iorbases[$i]);
+ }
+}
+
+sub kill_node_daemon {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+}
+
+sub kill_open_processes {
+ if ($daemons_running == 1) {
+ kill_node_daemon ();
+ }
+
+ if ($em_running == 1) {
+ $EM->Kill (); $EM->TimedWait (1);
+ }
+
+ if ($ns_running == 1) {
+ $NS->Kill (); $NS->TimedWait (1);
+ }
+ # in case shutdown did not perform as expected
+ $tg_executor->KillAll ('ciao_componentserver');
+}
+
+sub run_node_daemons {
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $iorbase = $iorbases[$i];
+ $iorfile = $iorfiles[$i];
+ $port = $ports[$i];
+ $nodename = $nodenames[$i];
+ $iiop = "iiop://localhost:$port";
+ $node_app = "$CIAO_ROOT/bin/ciao_componentserver";
+
+ $d_cmd = "$DANCE_ROOT/bin/dance_node_manager";
+ $d_param = "-ORBEndpoint $iiop -s $node_app -n $nodename=$iorfile -t 30 --domain-nc corbaloc:rir:/NameService";
+
+ print "Run dance_node_manager with $d_param\n";
+
+ $DEAMONS[$i] = $tg_daemons[$i]->CreateProcess ($d_cmd, $d_param);
+ $DEAMONS[$i]->Spawn ();
+
+ if ($tg_daemons[$i]->WaitForFileTimed($iorbase,
+ $tg_daemons[$i]->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior $iorfile file of node daemon $i could not be found\n";
+ for (; $i >= 0; --$i) {
+ $DEAMONS[$i]->Kill (); $DEAMONS[$i]->TimedWait (1);
+ }
+ return -1;
+ }
+ }
+ return 0;
+}
+
+create_targets ();
+init_ior_files ();
+
+# Invoke naming service
+
+$NS = $tg_naming->CreateProcess ("$TAO_ROOT/orbsvcs/Naming_Service/Naming_Service", "-m 1 -ORBEndpoint iiop://localhost:60003 -o $ior_nsfile");
+
+$NS->Spawn ();
+
+print STDERR "Starting Naming Service with -m 1 -ORBEndpoint iiop://localhost:60003 -o ns.ior\n";
+
+if ($tg_naming->WaitForFileTimed ($ior_nsbase,
+ $tg_naming->ProcessStartWaitInterval ()) == -1) {
+ print STDERR "ERROR: cannot find naming service IOR file\n";
+ $NS->Kill (); $NS->TimedWait (1);
+ exit 1;
+}
+
+$ns_running = 1;
+# Set up NamingService environment
+$ENV{"NameServiceIOR"} = "corbaloc:iiop:localhost:60003/NameService";
+
+# Invoke node daemon.
+print "Invoking node daemon\n";
+$status = run_node_daemons ();
+
+if ($status != 0) {
+ print STDERR "ERROR: Unable to execute the node daemon\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$daemons_running = 1;
+
+# Invoke execution manager.
+print "Invoking execution manager (dance_execution_manager.exe) with -e$ior_emfile\n";
+$EM = $tg_exe_man->CreateProcess ("$DANCE_ROOT/bin/dance_execution_manager",
+ "-e$ior_emfile --domain-nc corbaloc:rir:/NameService");
+$EM->Spawn ();
+
+if ($tg_exe_man->WaitForFileTimed ($ior_embase,
+ $tg_exe_man->ProcessStartWaitInterval ()) == -1) {
+ print STDERR
+ "ERROR: The ior file of execution manager could not be found\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+$em_running = 1;
+
+# Invoke executor - start the application -.
+print "Invoking executor - launch the application -\n";
+
+print "Start dance_plan_launcher.exe with -x $cdp_file -k file://$ior_emfile\n";
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-x $cdp_file -k file://$ior_emfile");
+$E->SpawnWaitKill (2*$tg_executor->ProcessStartWaitInterval ());
+
+for ($i = 0; $i < $nr_daemon; ++$i) {
+ if ($tg_daemons[$i]->WaitForFileTimed ($iorbases[$i],
+ $tg_daemons[$i]->ProcessStopWaitInterval ()) == -1) {
+ print STDERR "ERROR: The ior file of daemon $i could not be found\n";
+ kill_open_processes ();
+ exit 1;
+ }
+}
+
+print "Sleeping 120 seconds to allow task to complete\n";
+sleep (120);
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+print "by running dance_plan_launcher.exe with -k file://$ior_emfile -x $cdp_file -q\n";
+
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-k file://$ior_emfile -x $cdp_file -s");
+$E->SpawnWaitKill ($tg_executor->ProcessStopWaitInterval ());
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;