summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstanleyk <stanleyk@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2013-01-28 16:19:56 +0000
committerstanleyk <stanleyk@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2013-01-28 16:19:56 +0000
commit8bf800a5aa61ff40ad94d4a0cc449d2824558840 (patch)
tree91ec7d44b9ccd964a53c07ed4fe543de64362c5e
parentace6321eaa7ac291095daa685dd14229e8b9314b (diff)
downloadATCD-8bf800a5aa61ff40ad94d4a0cc449d2824558840.tar.gz
Merged with trunk. Resolved conflict on Options.hmtl.
-rw-r--r--ACE/ChangeLog8
-rw-r--r--ACE/OCI_RE_ChangeLog14
-rw-r--r--ACE/ace/config-macosx-lion.h1
-rw-r--r--ACE/ace/config-macosx-mountainlion.h (renamed from ACE/ace/config-macosx-mountain-lion.h)4
-rw-r--r--ACE/ace/config-macosx-snowleopard.h1
-rw-r--r--ACE/examples/Shared_Memory/test_MM.cpp2
-rw-r--r--ACE/examples/Shared_Memory/test_SV.cpp2
-rw-r--r--ACE/include/makeinclude/platform_macosx_mountainlion.GNU (renamed from ACE/include/makeinclude/platform_macosx_mountain_lion.GNU)0
-rw-r--r--CIAO/ChangeLog15
-rw-r--r--CIAO/bin/ciao_tests.lst2
-rw-r--r--[-rwxr-xr-x]CIAO/tests/Bug_3834_Regression/descriptors/PlanLocality_DifferentProcesses.cdp0
-rw-r--r--[-rwxr-xr-x]CIAO/tests/Bug_3834_Regression/descriptors/PlanLocality_SameProcess.cdp0
-rw-r--r--CIAO/tests/Bug_4086_Regression/Bug_4086_Regression.mpc122
-rw-r--r--CIAO/tests/Bug_4086_Regression/Foo.idl21
-rw-r--r--CIAO/tests/Bug_4086_Regression/Foo_exec.cpp95
-rw-r--r--CIAO/tests/Bug_4086_Regression/Foo_exec.h64
-rw-r--r--CIAO/tests/Bug_4086_Regression/descriptors/DeploymentPlan.cdp106
-rwxr-xr-xCIAO/tests/Bug_4086_Regression/descriptors/run_test.pl234
-rwxr-xr-xCIAO/tests/Bug_4086_Regression/descriptors/run_test_cdr.pl251
-rw-r--r--TAO/ChangeLog50
-rw-r--r--TAO/NEWS4
-rw-r--r--TAO/OCI_RE_ChangeLog29
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp2
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp2
-rw-r--r--TAO/docs/Options.html45
-rw-r--r--TAO/examples/Advanced/ch_12/client.cpp9
-rw-r--r--TAO/examples/Advanced/ch_18/client.cpp6
-rw-r--r--TAO/examples/Advanced/ch_21/client.cpp7
-rw-r--r--TAO/examples/Advanced/ch_8_and_10/client.cpp5
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp305
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.h6
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Transport.cpp12
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/miop_resource.cpp40
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/miop_resource.h13
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/miopconf.h8
-rw-r--r--TAO/orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.cpp23
-rw-r--r--TAO/orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.h3
-rw-r--r--TAO/orbsvcs/tests/Miop/McastFragmentation/client.cpp4
-rwxr-xr-xTAO/orbsvcs/tests/Miop/McastFragmentation/run_test.pl4
-rwxr-xr-xTAO/orbsvcs/tests/Miop/McastFragmentation/run_test_ipv6.pl6
-rw-r--r--TAO/orbsvcs/tests/Miop/McastFragmentation/server.cpp8
-rw-r--r--TAO/tao/DynamicInterface/Request.h5
42 files changed, 1369 insertions, 169 deletions
diff --git a/ACE/ChangeLog b/ACE/ChangeLog
index 17abc81c3f8..ec7ef0059b3 100644
--- a/ACE/ChangeLog
+++ b/ACE/ChangeLog
@@ -1,3 +1,11 @@
+Mon Jan 28 07:55:27 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/config-macosx-mountainlion.h:
+ * ace/config-macosx-mountain-lion.h:
+ * include/makeinclude/platform_macosx_mountainlion.GNU:
+ * include/makeinclude/platform_macosx_mountain_lion.GNU:
+ Renamed mountain-lion to mountainlion to simplify packaging
+
Tue Jan 22 12:28:19 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
* ace/CDR_Size.h:
diff --git a/ACE/OCI_RE_ChangeLog b/ACE/OCI_RE_ChangeLog
index 621863e3310..c3e7962e97e 100644
--- a/ACE/OCI_RE_ChangeLog
+++ b/ACE/OCI_RE_ChangeLog
@@ -1,3 +1,17 @@
+Mon Jan 28 16:13:07 UTC 2013 "Kevin Stanley" <stanleyk@ociweb.com>
+
+ * ace/config-macosx-lion.h:
+ * ace/config-macosx-mountainlion.h:
+ * ace/config-macosx-snowleopard.h:
+ * examples/Shared_Memory/test_MM.cpp:
+ * examples/Shared_Memory/test_SV.cpp:
+ * include/makeinclude/platform_macosx_mountainlion.GNU:
+ * ace/config-macosx-mountain-lion.h:
+ * include/makeinclude/platform_macosx_mountain_lion.GNU:
+
+ Merged trunk into branch. The above files were changed in the
+ trunk.
+
Wed Dec 19 17:52:25 UTC 2012 Phil Mesnier <mesnier_p@ociweb.com>
* ace/Mem_Map.inl:
diff --git a/ACE/ace/config-macosx-lion.h b/ACE/ace/config-macosx-lion.h
index 12c19660469..87fc5c7c9ec 100644
--- a/ACE/ace/config-macosx-lion.h
+++ b/ACE/ace/config-macosx-lion.h
@@ -2,7 +2,6 @@
#ifndef ACE_CONFIG_MACOSX_LION_H
#define ACE_CONFIG_MACOSX_LION_H
-
#include "ace/config-macosx-leopard.h"
#ifdef __clang__
diff --git a/ACE/ace/config-macosx-mountain-lion.h b/ACE/ace/config-macosx-mountainlion.h
index 4173495276c..c8f6a08fbc5 100644
--- a/ACE/ace/config-macosx-mountain-lion.h
+++ b/ACE/ace/config-macosx-mountainlion.h
@@ -1,6 +1,6 @@
// $Id$
-#ifndef ACE_CONFIG_MACOSX_MOUNTAIN_LION_H
-#define ACE_CONFIG_MACOSX_MOUNTAIN_LION_H
+#ifndef ACE_CONFIG_MACOSX_MOUNTAINLION_H
+#define ACE_CONFIG_MACOSX_MOUNTAINLION_H
#include "ace/config-macosx-lion.h"
diff --git a/ACE/ace/config-macosx-snowleopard.h b/ACE/ace/config-macosx-snowleopard.h
index 76dbaf8916b..7d7341453d8 100644
--- a/ACE/ace/config-macosx-snowleopard.h
+++ b/ACE/ace/config-macosx-snowleopard.h
@@ -2,7 +2,6 @@
#ifndef ACE_CONFIG_MACOSX_SNOWLEOPARD_H
#define ACE_CONFIG_MACOSX_SNOWLEOPARD_H
-
#include "ace/config-macosx-leopard.h"
#ifdef __clang__
diff --git a/ACE/examples/Shared_Memory/test_MM.cpp b/ACE/examples/Shared_Memory/test_MM.cpp
index 27184bb8e2d..cfb3f5a1af0 100644
--- a/ACE/examples/Shared_Memory/test_MM.cpp
+++ b/ACE/examples/Shared_Memory/test_MM.cpp
@@ -6,8 +6,6 @@
#include "ace/OS_NS_unistd.h"
#include "ace/OS_NS_stdlib.h"
-
-
#define SHMSZ 27
ACE_TCHAR shm_key[] = ACE_TEXT ("/tmp/fooXXXXXX");
diff --git a/ACE/examples/Shared_Memory/test_SV.cpp b/ACE/examples/Shared_Memory/test_SV.cpp
index ce7e2218115..7745bc641ab 100644
--- a/ACE/examples/Shared_Memory/test_SV.cpp
+++ b/ACE/examples/Shared_Memory/test_SV.cpp
@@ -4,8 +4,6 @@
#include "ace/Log_Msg.h"
#include "ace/OS_NS_unistd.h"
-
-
#define SHMSZ 27
#define SHM_KEY (key_t) 5678
diff --git a/ACE/include/makeinclude/platform_macosx_mountain_lion.GNU b/ACE/include/makeinclude/platform_macosx_mountainlion.GNU
index 5899db19fa2..5899db19fa2 100644
--- a/ACE/include/makeinclude/platform_macosx_mountain_lion.GNU
+++ b/ACE/include/makeinclude/platform_macosx_mountainlion.GNU
diff --git a/CIAO/ChangeLog b/CIAO/ChangeLog
index dd7f18638ad..8b5653eba5a 100644
--- a/CIAO/ChangeLog
+++ b/CIAO/ChangeLog
@@ -1,3 +1,18 @@
+Mon Jan 28 10:11:13 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/ciao_tests.lst:
+ * tests/Bug_4086_Regression/Bug_4086_Regression.mpc:
+ * tests/Bug_4086_Regression/Foo.idl:
+ * tests/Bug_4086_Regression/Foo_exec.h:
+ * tests/Bug_4086_Regression/Foo_exec.cpp:
+ * tests/Bug_4086_Regression/descriptors/DeploymentPlan.cdp:
+ * tests/Bug_4086_Regression/descriptors/run_test.pl:
+ * tests/Bug_4086_Regression/descriptors/run_test_cdr.pl:
+ New test for components with attributes as part of
+ supported interfaces. Thanks to Jiang Wei
+ <jiangwei_1976 at yahoo dot com dot cn> for reporting this and
+ providing the patch and unit test
+
Mon Jan 21 08:16:41 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
* bin/ciao_tests.lst:
diff --git a/CIAO/bin/ciao_tests.lst b/CIAO/bin/ciao_tests.lst
index f0e2422006b..a3b1f61abd6 100644
--- a/CIAO/bin/ciao_tests.lst
+++ b/CIAO/bin/ciao_tests.lst
@@ -39,6 +39,8 @@ TAO/CIAO/tests/Bug_3832_Regression/run_test.pl:
TAO/CIAO/tests/Bug_3936_Regression/run_test.pl
TAO/CIAO/tests/Bug_3937_Regression/run_test.pl
TAO/CIAO/tests/Bug_3944_Regression/run_test.pl
+TAO/CIAO/tests/Bug_4086_Regression/descriptors/run_test.pl:
+TAO/CIAO/tests/Bug_4086_Regression/descriptors/run_test_cdr.pl:
TAO/CIAO/tests/IDL_Test/Cornucopia/run_test.pl: DOXYGEN
TAO/CIAO/tests/Cookies/run_test.pl
TAO/CIAO/tests/TTSCTest/descriptors/run_test.pl:
diff --git a/CIAO/tests/Bug_3834_Regression/descriptors/PlanLocality_DifferentProcesses.cdp b/CIAO/tests/Bug_3834_Regression/descriptors/PlanLocality_DifferentProcesses.cdp
index a7a9720e8f9..a7a9720e8f9 100755..100644
--- a/CIAO/tests/Bug_3834_Regression/descriptors/PlanLocality_DifferentProcesses.cdp
+++ b/CIAO/tests/Bug_3834_Regression/descriptors/PlanLocality_DifferentProcesses.cdp
diff --git a/CIAO/tests/Bug_3834_Regression/descriptors/PlanLocality_SameProcess.cdp b/CIAO/tests/Bug_3834_Regression/descriptors/PlanLocality_SameProcess.cdp
index d57913ded9c..d57913ded9c 100755..100644
--- a/CIAO/tests/Bug_3834_Regression/descriptors/PlanLocality_SameProcess.cdp
+++ b/CIAO/tests/Bug_3834_Regression/descriptors/PlanLocality_SameProcess.cdp
diff --git a/CIAO/tests/Bug_4086_Regression/Bug_4086_Regression.mpc b/CIAO/tests/Bug_4086_Regression/Bug_4086_Regression.mpc
new file mode 100644
index 00000000000..9018cb37cd2
--- /dev/null
+++ b/CIAO/tests/Bug_4086_Regression/Bug_4086_Regression.mpc
@@ -0,0 +1,122 @@
+// $Id$
+// This file is generated with "generate_component_mpc.pl Foo"
+
+project(*idl_gen) : componentidldefaults {
+ custom_only = 1
+ idlflags += -Wb,stub_export_macro=FOO_STUB_Export \
+ -Wb,stub_export_include=Foo_stub_export.h \
+ -Wb,skel_export_macro=FOO_SVNT_Export \
+ -Wb,skel_export_include=Foo_svnt_export.h \
+ -Wb,exec_export_macro=FOO_EXEC_Export \
+ -Wb,exec_export_include=Foo_exec_export.h
+
+ IDL_Files {
+ Foo.idl
+ }
+}
+
+project(*lem_gen) : ciaoidldefaults {
+ after += *idl_gen
+ custom_only = 1
+ idlflags += -Wb,stub_export_macro=FOO_LEM_STUB_Export \
+ -Wb,stub_export_include=Foo_lem_stub_export.h \
+ -SS -Gxhst
+
+ IDL_Files {
+ FooE.idl
+ }
+}
+
+project(*lem_stub) : ccm_svnt {
+ after += *lem_gen *stub
+ libs += Foo_stub
+ sharedname = Foo_lem_stub
+ dynamicflags += FOO_LEM_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ FooEC.cpp
+ }
+
+ Header_Files {
+ FooEC.h
+ Foo_lem_stub_export.h
+ }
+
+ Inline_Files {
+ FooEC.inl
+ }
+}
+
+project(*stub) : ccm_stub {
+ after += *idl_gen
+ libs +=
+ sharedname = Foo_stub
+ dynamicflags += FOO_STUB_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ FooC.cpp
+ }
+
+ Header_Files {
+ FooC.h
+ Foo_stub_export.h
+ }
+
+ Inline_Files {
+ FooC.inl
+ }
+}
+
+project(*exec) : ciao_executor {
+ after += *lem_stub *stub
+ sharedname = Foo_exec
+ libs += Foo_stub Foo_lem_stub
+ dynamicflags += FOO_EXEC_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ Foo_exec.cpp
+ }
+
+ Header_Files {
+ Foo_exec.h
+ Foo_exec_export.h
+ }
+
+ Inline_Files {
+ }
+}
+
+project(*svnt) : ciao_servant {
+ after += *lem_stub
+ sharedname = Foo_svnt
+ libs += Foo_stub Foo_lem_stub
+ dynamicflags += FOO_SVNT_BUILD_DLL
+
+ IDL_Files {
+ }
+
+ Source_Files {
+ FooS.cpp
+ Foo_svnt.cpp
+ }
+
+ Header_Files {
+ FooS.h
+ Foo_svnt.h
+ Foo_svnt_export.h
+ }
+
+ Inline_Files {
+ }
+}
+
+
diff --git a/CIAO/tests/Bug_4086_Regression/Foo.idl b/CIAO/tests/Bug_4086_Regression/Foo.idl
new file mode 100644
index 00000000000..7d3672d5806
--- /dev/null
+++ b/CIAO/tests/Bug_4086_Regression/Foo.idl
@@ -0,0 +1,21 @@
+// $Id$
+
+#ifndef FOO_IDL_
+#define FOO_IDL_
+
+#include <Components.idl>
+
+interface FooSupportBase
+{
+ attribute short supported_short;
+};
+
+interface FooSupport : FooSupportBase
+{
+};
+
+component Foo supports FooSupport
+{
+};
+
+#endif /* FOO_IDL_ */
diff --git a/CIAO/tests/Bug_4086_Regression/Foo_exec.cpp b/CIAO/tests/Bug_4086_Regression/Foo_exec.cpp
new file mode 100644
index 00000000000..594db22db4f
--- /dev/null
+++ b/CIAO/tests/Bug_4086_Regression/Foo_exec.cpp
@@ -0,0 +1,95 @@
+// -*- C++ -*-
+// $Id$
+
+#include "Foo_exec.h"
+
+namespace CIAO_Foo_Impl
+{
+ //============================================================
+ // Component Executor Implementation Class: Foo_exec_i
+ //============================================================
+
+ Foo_exec_i::Foo_exec_i (void)
+ : supported_short_ (false)
+ {
+ }
+
+ Foo_exec_i::~Foo_exec_i (void)
+ {
+ }
+
+ // Supported operations and attributes.
+
+ ::CORBA::Short
+ Foo_exec_i::supported_short (void)
+ {
+ /* Your code here. */
+ return 0;
+ }
+
+ void
+ Foo_exec_i::supported_short (
+ const ::CORBA::Short supported_short)
+ {
+ if(supported_short != 11)
+ ACE_ERROR ((LM_ERROR, "ERROR: supported_short != 11, it is %d\n", supported_short));
+ else supported_short_ = true;
+
+ }
+
+ // Operations from Components::SessionComponent.
+
+ void
+ Foo_exec_i::set_session_context (
+ ::Components::SessionContext_ptr ctx)
+ {
+ this->context_ =
+ ::CCM_Foo_Context::_narrow (ctx);
+
+ if ( ::CORBA::is_nil (this->context_.in ()))
+ {
+ throw ::CORBA::INTERNAL ();
+ }
+ }
+
+ void
+ Foo_exec_i::configuration_complete (void)
+ {
+ }
+
+ void
+ Foo_exec_i::ccm_activate (void)
+ {
+ if (! supported_short_ )
+ {
+ ACE_ERROR ((LM_ERROR, "ERROR: Not all expected attributes were initialized\n"));
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG, "OK: All attributes were correctly initialized\n"));
+ }
+ }
+
+ void
+ Foo_exec_i::ccm_passivate (void)
+ {
+ }
+
+ void
+ Foo_exec_i::ccm_remove (void)
+ {
+ }
+
+ extern "C" FOO_EXEC_Export ::Components::EnterpriseComponent_ptr
+ create_Foo_Impl (void)
+ {
+ ::Components::EnterpriseComponent_ptr retval =
+ ::Components::EnterpriseComponent::_nil ();
+
+ ACE_NEW_NORETURN (
+ retval,
+ Foo_exec_i);
+
+ return retval;
+ }
+}
diff --git a/CIAO/tests/Bug_4086_Regression/Foo_exec.h b/CIAO/tests/Bug_4086_Regression/Foo_exec.h
new file mode 100644
index 00000000000..6514ee311e8
--- /dev/null
+++ b/CIAO/tests/Bug_4086_Regression/Foo_exec.h
@@ -0,0 +1,64 @@
+// -*- C++ -*-
+// $Id$
+
+#ifndef CIAO_FOO_EXEC_H_
+#define CIAO_FOO_EXEC_H_
+
+#include "FooEC.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include /**/ "Foo_exec_export.h"
+#include "tao/LocalObject.h"
+
+namespace CIAO_Foo_Impl
+{
+ class FOO_EXEC_Export Foo_exec_i
+ : public virtual Foo_Exec,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ Foo_exec_i (void);
+ virtual ~Foo_exec_i (void);
+
+ //@{
+ /** Supported operations and attributes. */
+
+ virtual ::CORBA::Short
+ supported_short (void);
+
+ virtual void
+ supported_short (
+ ::CORBA::Short supported_short);
+ //@}
+
+
+ //@{
+ /** Operations from Components::SessionComponent. */
+
+ 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);
+ //@}
+
+
+ private:
+ ::CCM_Foo_Context_var context_;
+
+ bool supported_short_;
+ };
+
+ extern "C" FOO_EXEC_Export ::Components::EnterpriseComponent_ptr
+ create_Foo_Impl (void);
+}
+
+#endif /* ifndef */
+
diff --git a/CIAO/tests/Bug_4086_Regression/descriptors/DeploymentPlan.cdp b/CIAO/tests/Bug_4086_Regression/descriptors/DeploymentPlan.cdp
new file mode 100644
index 00000000000..6f5f3e15777
--- /dev/null
+++ b/CIAO/tests/Bug_4086_Regression/descriptors/DeploymentPlan.cdp
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<!-- $Id$ -->
+<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">
+
+ <UUID>e4a58f39-c343-4988-b7af-af6ad9ded5e2</UUID>
+
+ <implementation xmi:id="_936b6d23-5a31-4241-b681-1dcd0d4180ee">
+ <name>PICML_default_xme_file.ComponentImplementations.FooImpl.FooImpl</name>
+ <source/>
+ <artifact xmi:idref="_936b6d23-5a31-4241-b682-1dcd0d4180ee"/>
+ <artifact xmi:idref="_936b6d23-5a31-4241-b683-1dcd0d4180ee"/>
+ <execParameter>
+ <name>component factory</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Foo_Impl</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ExecutorArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>PICML_default_xme_file.ImplementationArtifacts.FooArtifacts.Foo_exec</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantEntrypoint</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>create_Foo_Servant</string>
+ </value>
+ </value>
+ </execParameter>
+ <execParameter>
+ <name>edu.vanderbilt.dre.CIAO.ServantArtifact</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>PICML_default_xme_file.ImplementationArtifacts.FooArtifacts.Foo_svnt</string>
+ </value>
+ </value>
+ </execParameter>
+ </implementation>
+
+ <instance xmi:id="_d6fbd4f9-1bc4-46eb-af5f-2b1ef5bf1ae8">
+ <name>PICML_default_xme_file.ComponentImplementations.ComponentImplementationContainer.ComponentAssembly.Foo</name>
+ <node>NodeOne</node>
+ <source/>
+ <implementation xmi:idref="_936b6d23-5a31-4241-b681-1dcd0d4180ee"/>
+ <configProperty>
+ <name>edu.vanderbilt.dre.DAnCE.InstanceIOR</name>
+ <value>
+ <type>
+ <kind>tk_string</kind>
+ </type>
+ <value>
+ <string>FooImpl.ior</string>
+ </value>
+ </value>
+ </configProperty>
+ <configProperty>
+ <name>supported_short</name>
+ <value>
+ <type>
+ <kind>tk_short</kind>
+ </type>
+ <value>
+ <short>11</short>
+ </value>
+ </value>
+ </configProperty>
+ </instance>
+
+ <artifact xmi:id="_936b6d23-5a31-4241-b682-1dcd0d4180ee">
+ <name>PICML_default_xme_file.ImplementationArtifacts.FooArtifacts.Foo_svnt</name>
+ <source/>
+ <node/>
+ <location>Foo_svnt</location>
+ </artifact>
+
+ <artifact xmi:id="_936b6d23-5a31-4241-b683-1dcd0d4180ee">
+ <name>PICML_default_xme_file.ImplementationArtifacts.FooArtifacts.Foo_exec</name>
+ <source/>
+ <node/>
+ <location>Foo_exec</location>
+ </artifact>
+
+ <localityConstraint>
+ <constraint>SameProcess</constraint>
+ <constrainedInstance xmi:idref="_d6fbd4f9-1bc4-46eb-af5f-2b1ef5bf1ae8"/>
+ </localityConstraint>
+
+</Deployment:DeploymentPlan>
diff --git a/CIAO/tests/Bug_4086_Regression/descriptors/run_test.pl b/CIAO/tests/Bug_4086_Regression/descriptors/run_test.pl
new file mode 100755
index 00000000000..33f087ecba9
--- /dev/null
+++ b/CIAO/tests/Bug_4086_Regression/descriptors/run_test.pl
@@ -0,0 +1,234 @@
+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 = ( "NodeApp2.ior" );
+@iorfiles = 0;
+@nodenames = ( "NodeOne" );
+
+# 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 = "DeploymentPlan.cdp";
+
+sub create_targets {
+ # naming service
+ $tg_naming = PerlACE::TestTarget::create_target (1) || die "Create target for ns failed\n";
+ $tg_naming->AddLibPath ('..');
+ # daemon
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i] = PerlACE::TestTarget::create_target ($i+1) || die "Create target for daemon $i failed\n";
+ $tg_daemons[$i]->AddLibPath ('..');
+ }
+ # execution manager
+ $tg_exe_man = PerlACE::TestTarget::create_target (1) || die "Create target for EM failed\n";
+ $tg_exe_man->AddLibPath ('..');
+ # executor (plan_launcher)
+ $tg_executor = PerlACE::TestTarget::create_target (1) || die "Create target for executor failed\n";
+ $tg_executor->AddLibPath ('..');
+}
+
+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 ('dance_locality_manager');
+}
+
+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 = $tg_daemons[$i]->GetArchDir("$DANCE_ROOT/bin/") . "dance_locality_manager";
+
+ $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 --instance-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/tao_cosnaming", " -ORBEndpoint iiop://localhost:60003 -o $ior_nsfile");
+
+$ns_status = $NS->Spawn ();
+
+if ($ns_status != 0) {
+ print STDERR "ERROR: Unable to execute the naming service\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+print STDERR "Starting Naming Service with -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 5 seconds to allow task to complete\n";
+sleep (5);
+
+# 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\n";
+
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-k file://$ior_emfile -x $cdp_file -s");
+
+$pl_status = $E->SpawnWaitKill ($tg_executor->ProcessStartWaitInterval ());
+
+if ($pl_status != 0) {
+ print STDERR "ERROR: dance_plan_launcher returned $pl_status\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/CIAO/tests/Bug_4086_Regression/descriptors/run_test_cdr.pl b/CIAO/tests/Bug_4086_Regression/descriptors/run_test_cdr.pl
new file mode 100755
index 00000000000..ead7a7c7e98
--- /dev/null
+++ b/CIAO/tests/Bug_4086_Regression/descriptors/run_test_cdr.pl
@@ -0,0 +1,251 @@
+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 = ( "NodeApp2.ior" );
+@iorfiles = 0;
+@nodenames = ( "NodeOne" );
+
+# 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 = "DeploymentPlan.cdp";
+
+sub create_targets {
+ # naming service
+ $tg_naming = PerlACE::TestTarget::create_target (1) || die "Create target for ns failed\n";
+ $tg_naming->AddLibPath ('..');
+ # daemon
+ for ($i = 0; $i < $nr_daemon; ++$i) {
+ $tg_daemons[$i] = PerlACE::TestTarget::create_target ($i+1) || die "Create target for daemon $i failed\n";
+ $tg_daemons[$i]->AddLibPath ('..');
+ }
+ # execution manager
+ $tg_exe_man = PerlACE::TestTarget::create_target (1) || die "Create target for EM failed\n";
+ $tg_exe_man->AddLibPath ('..');
+ # executor (plan_launcher)
+ $tg_executor = PerlACE::TestTarget::create_target (1) || die "Create target for executor failed\n";
+ $tg_executor->AddLibPath ('..');
+}
+
+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 ('dance_locality_manager');
+}
+
+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 = $tg_daemons[$i]->GetArchDir("$DANCE_ROOT/bin/") . "dance_locality_manager";
+
+ $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 --instance-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/tao_cosnaming", " -ORBEndpoint iiop://localhost:60003 -o $ior_nsfile");
+
+$ns_status = $NS->Spawn ();
+
+if ($ns_status != 0) {
+ print STDERR "ERROR: Unable to execute the naming service\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+print STDERR "Starting Naming Service with -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;
+}
+
+$cdr_file = $cdp_file;
+$cdr_file =~ s/cdp/cdr/;
+
+print "Converting $cdp_file to $cdr_file\n";
+
+$tg_executor->DeleteFile ($cdr_file);
+
+$CONVERT = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_convert_plan", "-x $cdp_file -o $cdr_file");
+
+$convert_status = $CONVERT->SpawnWaitKill ($tg_executor->ProcessStartWaitInterval ());
+
+if ($convert_status != 0) {
+ print STDERR "ERROR: Can't convert $cdp_file to $cdr_file\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 -c $cdr_file -k file://$ior_emfile\n";
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-c $cdr_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 5 seconds to allow task to complete\n";
+sleep (5);
+
+# Invoke executor - stop the application -.
+print "Invoking executor - stop the application -\n";
+print "by running dance_plan_launcher.exe with -k file://$ior_emfile -c $cdr_file\n";
+
+$E = $tg_executor->CreateProcess ("$DANCE_ROOT/bin/dance_plan_launcher",
+ "-k file://$ior_emfile -c $cdr_file -s");
+
+$pl_status = $E->SpawnWaitKill ($tg_executor->ProcessStartWaitInterval ());
+
+if ($pl_status != 0) {
+ print STDERR "ERROR: dance_plan_launcher returned $pl_status\n";
+ kill_open_processes ();
+ exit 1;
+}
+
+print "Executor returned.\n";
+print "Shutting down rest of the processes.\n";
+
+delete_ior_files ();
+kill_open_processes ();
+
+exit $status;
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 1168993b06e..ab22bb18272 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,53 @@
+Mon Jan 28 12:44:24 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * examples/Advanced/ch_12/client.cpp:
+ * examples/Advanced/ch_18/client.cpp:
+ * examples/Advanced/ch_21/client.cpp:
+ * examples/Advanced/ch_8_and_10/client.cpp:
+ Fixed compile errors when ostream streaming is enabled
+ in TAO_IDL
+
+Mon Jan 28 11:26:06 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * TAO_IDL/be/be_visitor_interface/interface_ch.cpp:
+ * TAO_IDL/be/be_visitor_interface/interface_cs.cpp:
+ Generate also ostream insertion methods for components
+
+ * tao/DynamicInterface/Request.h:
+ Doxygen fixes
+
+Fri Jan 25 13:55:00 UTC 2013 Simon Massey <simon dot massey at prismtech dot com>
+
+ * orbsvcs/tests/Miop/McastFragmentation/server.cpp:
+ Correction.
+
+Fri Jan 25 13:35:00 UTC 2013 Simon Massey <simon dot massey at prismtech dot com>
+
+ * orbsvcs/orbsvcs/PortableGroup/miop_resource.cpp:
+ * orbsvcs/tests/Miop/McastFragmentation/client.cpp:
+ * orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.cpp:
+ * orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.h:
+ * orbsvcs/tests/Miop/McastFragmentation/run_test.pl:
+ * orbsvcs/tests/Miop/McastFragmentation/run_test_ipv6.pl:
+ * orbsvcs/tests/Miop/McastFragmentation/server.cpp:
+ Missed the parameter parsing changes from the last update and report
+ possiable problems from the McastFragmentation test but make the test
+ less demanding for the scoreboard systems.
+
+Thu Jan 24 15:51:00 UTC 2013 Simon Massey <simon dot massey at prismtech dot com>
+
+ * NEWS:
+ * doc/Options.h:
+ * orbsvcs/orbsvcs/PortableGroup/miop_resource.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/miop_resource.h:
+ * orbsvcs/orbsvcs/PortableGroup/miopconf.h:
+ * orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.h:
+ * orbsvcs/orbsvcs/PortableGroup/UIPMC_Transport.cpp:
+ Added MIOP configuration options -ORBSendThrottling and -ORBEagerDequeueing,
+ along with #define overrides for their default settings. See the descriptions
+ in the MIOP section of doc/Options.html for their use.
+
Wed Jan 23 19:43:50 UTC 2013 Adam Mitz <mitza@ociweb.com>
* tao/RTScheduling/Request_Interceptor.cpp:
diff --git a/TAO/NEWS b/TAO/NEWS
index 41ad50f40df..be9e95205df 100644
--- a/TAO/NEWS
+++ b/TAO/NEWS
@@ -1,6 +1,10 @@
USER VISIBLE CHANGES BETWEEN TAO-2.1.7 and TAO-2.1.8
====================================================
+. Added MIOP configuration options -ORBSendThrottling and -ORBEagerDequeueing,
+ along with #define overrides for their default settings. See the descriptions
+ in the MIOP section of doc/Options.html for their use.
+
USER VISIBLE CHANGES BETWEEN TAO-2.1.6 and TAO-2.1.7
====================================================
diff --git a/TAO/OCI_RE_ChangeLog b/TAO/OCI_RE_ChangeLog
index 0d334690cc8..551c7c05db4 100644
--- a/TAO/OCI_RE_ChangeLog
+++ b/TAO/OCI_RE_ChangeLog
@@ -1,3 +1,32 @@
+Mon Jan 28 16:09:03 UTC 2013 "Kevin Stanley" <stanleyk@ociweb.com>
+ * docs/Options.html:
+
+ Resolved conflict between trunk update and branch changes.
+
+ * NEWS:
+ * TAO_IDL/be/be_visitor_interface/interface_ch.cpp:
+ * TAO_IDL/be/be_visitor_interface/interface_cs.cpp:
+ * examples/Advanced/ch_12/client.cpp:
+ * examples/Advanced/ch_18/client.cpp:
+ * examples/Advanced/ch_21/client.cpp:
+ * examples/Advanced/ch_8_and_10/client.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.h:
+ * orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/UIPMC_Transport.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/miop_resource.h:
+ * orbsvcs/orbsvcs/PortableGroup/miop_resource.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/miopconf.h:
+ * orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.h:
+ * orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.cpp:
+ * orbsvcs/tests/Miop/McastFragmentation/client.cpp:
+ * orbsvcs/tests/Miop/McastFragmentation/run_test.pl:
+ * orbsvcs/tests/Miop/McastFragmentation/run_test_ipv6.pl:
+ * orbsvcs/tests/Miop/McastFragmentation/server.cpp:
+ * tao/DynamicInterface/Request.h:
+
+ Merged trunk to OCI_Reliability_Enhancements branch. These files were changed on
+ the trunk.
+
Sun Jan 27 18:57:35 UTC 2013 Byron Harris <harrisb@ociweb.com>
* tao/Storable_Base.h:
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp
index d4f0a72de4c..0fb0b926ebb 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp
@@ -171,7 +171,7 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
<< "virtual TAO_Policy_Scope _tao_scope (void) const;" << be_nl;
}
- if (c == 0 && be_global->gen_ostream_operators ())
+ if (be_global->gen_ostream_operators ())
{
*os << be_nl
<< "virtual std::ostream &_tao_stream_v (std::ostream &) const;";
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp
index 44294893e9e..543d5e13936 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp
@@ -139,7 +139,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node)
<< "}" << be_nl;
}
- if (c == 0 && be_global->gen_ostream_operators ())
+ if (be_global->gen_ostream_operators ())
{
*os << be_nl_2
<< "std::ostream &" << be_nl
diff --git a/TAO/docs/Options.html b/TAO/docs/Options.html
index 25229ec816d..d29f11c3ef2 100644
--- a/TAO/docs/Options.html
+++ b/TAO/docs/Options.html
@@ -1908,7 +1908,8 @@ strategy.
<tr>
<td ALIGN="left"><code>&#8209;ORBMaxFragmentRate</code> <em>microseconds</em></td>
<td ALIGN="left">
- <P>This client-side option specifies a non-zero, positive amount of time (in
+ <P>This client-side option (if enabled, see <code>&#8209;ORBSendThrottling</code> below)
+ specifies a non-zero, positive amount of time (in
uSec, i.e. microseconds) that it takes to transmit and process an individual
message fragment of the maximum size; see the <code>&#8209;ORBMaxFragmentSize</code>
option above. (This is the total of the
@@ -1929,7 +1930,8 @@ strategy.
</tr>
<tr>
<td ALIGN="left"><code>&#8209;ORBSendHighWaterMark</code> <em>bytes</em></td>
- <td ALIGN="left">This client-side option is the usable size of the message
+ <td ALIGN="left">This client-side option (if enabled, see <code>&#8209;ORBSendThrottling</code> below)
+ is the usable size of the message
buffer, i.e how much data can be sent without introducing delays into the
transmition of individual MIOP fragments (due to the <code>&#8209;ORBMaxFragmentRate</code>
option above). <b>Its default value is the size of the buffer maintained by the
@@ -1944,6 +1946,21 @@ strategy.
</td>
</tr>
<tr>
+ <td ALIGN="left"><code>&#8209;ORBSendThrottling</code> <em>0 | 1</em></td>
+ <td ALIGN="left">This is a client-side option that is enabled by default;
+ although this default can be overriden when the TAO libraries are built in the <CODE>
+ ace/config.h</CODE>, by specifying the new default such as <CODE>#define&nbsp;TAO_DEFAULT_MIOP_SEND_THROTTLING&nbsp;false</CODE>
+ which in this case would turn off throttling by default, unless specified in
+ the service file. If disabled (0) the client will always attempt to transmit
+ all MIOP message fragments without any delay. If enabled (1) the client will
+ attempt to automatically restrict the speed of sending individual MIOP messages
+ to maintain an average of <code>&#8209;ORBMaxFragmentSize</code> bytes per <code>&#8209;ORBMaxFragmentRate</code>
+ microseconds once the threshold of <code>&#8209;ORBSendHighWaterMark</code> bytes
+ of data are currently being transmitted or are in progress via each individual transport
+ (i.e. each individual client-side connection to the server).
+ </td>
+ </tr>
+ <tr>
<td ALIGN="left"><code>&#8209;ORBSndSock</code> <em>bytes</em></td>
<td ALIGN="left">This client-side option is the size of the outgoing socket's
message buffer. If specified in the service configuration file, this value will
@@ -1978,7 +1995,29 @@ strategy.
</td>
</tr>
<tr>
- <td ALIGN="left"><code>&#8209;ORBFragmentsCleanupStrategy</code> <em>DELAY | NUMBER
+ <td ALIGN="left"><code>&#8209;ORBEagerDequeueing</code> <em>0 | 1</em></td>
+ <td ALIGN="left">This is a server-side option that is enabled by default;
+ although this default can be overriden when the TAO libraries are built in the <CODE>
+ ace/config.h</CODE>, by specifying the new default such as <CODE>#define&nbsp;TAO_DEFAULT_MIOP_EAGER_DEQUEUEING&nbsp;false</CODE>
+ which in this case would turn this off by default, unless specified in the
+ service file. If disabled (0) each thread servicing the MIOP listener will only
+ dequeue enough MIOP message fragments from the socket receive buffer to
+ complete a single full MIOP message which it will then process. This action
+ reduces the amount of user memory consumed by the server process, but it also
+ increases the likelyhood of the OS sockets receive buffer overflowing (as
+ whilst processing each message, the thread cannot dequeue other incomming
+ message fragments). If enabled (1) it specifies that each server thread will
+ attempt to dequeue all available MIOP messages from the receiver's socket and
+ queue these up in a user memory FIFO queue, before attempting to process a
+ single MIOP message from the head of this FIFO queue. This action attempts to
+ speed up the dequeueing of MIOP messages from the OS socket receive buffer
+ (with a corresponding increase in the amount of user memory consumed by the
+ server process) so as to limit the number of MIOP messages that the server may
+ miss due to the OS sockets receive buffer becoming full.
+ </td>
+ </tr>
+ <tr>
+ <td ALIGN="left"><code>&#8209;ORBFragmentsCleanupStrategy</code> <em>DELAY | NUMBER
| MEMORY</em></td>
<td ALIGN="left">This option is used on the server to specify the incomplete
fragments cleanup strategy. The default is <em>DELAY</em>, indicating that the
diff --git a/TAO/examples/Advanced/ch_12/client.cpp b/TAO/examples/Advanced/ch_12/client.cpp
index 97801bea1a1..f41253a3c67 100644
--- a/TAO/examples/Advanced/ch_12/client.cpp
+++ b/TAO/examples/Advanced/ch_12/client.cpp
@@ -14,6 +14,7 @@
#include "CCSC.h" // ORB-specific
+#include <iterator>
#include <ace/streams.h>
using namespace std;
@@ -21,7 +22,8 @@ using namespace std;
// Generic ostream inserter for exceptions. Inserts the exception
// name, if available, and the repository ID otherwise.
-#if 0 // This inserter may or may not be needed for your ORB.
+// This inserter may or may not be needed for your ORB.
+#if !defined (GEN_OSTREAM_OPS)
static ostream &
operator<< (ostream &os, const CORBA::Exception &e)
@@ -38,8 +40,6 @@ operator<< (ostream &os, const CORBA::Exception &e)
return os;
}
-#endif
-
// Show the details for a thermometer or thermostat.
static std::ostream &
@@ -99,8 +99,9 @@ operator<< (std::ostream &os, const CCS::Controller::EChange &ec)
return os;
}
-// Change the temperature of a thermostat.
+#endif
+// Change the temperature of a thermostat.
static void
set_temp (CCS::Thermostat_ptr tmstat, CCS::TempType new_temp)
{
diff --git a/TAO/examples/Advanced/ch_18/client.cpp b/TAO/examples/Advanced/ch_18/client.cpp
index 42c8d8a5cc5..1581a423250 100644
--- a/TAO/examples/Advanced/ch_18/client.cpp
+++ b/TAO/examples/Advanced/ch_18/client.cpp
@@ -14,6 +14,7 @@
#include "CCSC.h" // ORB-specific
#include "assert.h"
+#include <iterator>
#include <orbsvcs/CosNamingC.h>
#include <ace/streams.h>
// ----------------------------------------------------------------
@@ -130,6 +131,9 @@ operator<<(ostream & os, const CORBA::Exception & e)
// Show the details for a thermometer or thermostat.
+// This inserter may or may not be needed for your ORB.
+#if !defined (GEN_OSTREAM_OPS)
+
static std::ostream &
operator<<(std::ostream &os, CCS::Thermometer_ptr t)
{
@@ -189,6 +193,8 @@ operator<<(std::ostream &os, const CCS::Controller::EChange &ec)
return os;
}
+#endif
+
//----------------------------------------------------------------
// Change the temperature of a thermostat.
diff --git a/TAO/examples/Advanced/ch_21/client.cpp b/TAO/examples/Advanced/ch_21/client.cpp
index eda65f7c518..f07fd00a9f2 100644
--- a/TAO/examples/Advanced/ch_21/client.cpp
+++ b/TAO/examples/Advanced/ch_21/client.cpp
@@ -22,7 +22,8 @@ using namespace std;
// Generic ostream inserter for exceptions. Inserts the exception
// name, if available, and the repository ID otherwise.
-#if 0 // This inserter is not needed for TAO.
+// This inserter may or may not be needed for your ORB.
+#if !defined (GEN_OSTREAM_OPS)
static ostream &
operator<<(ostream & os, const CORBA::Exception & e)
@@ -39,8 +40,6 @@ operator<<(ostream & os, const CORBA::Exception & e)
return os;
}
-#endif
-
//----------------------------------------------------------------
// Show the details for a thermometer or thermostat.
@@ -104,6 +103,8 @@ operator<<(std::ostream &os, const CCS::Controller::EChange &ec)
return os;
}
+#endif
+
//----------------------------------------------------------------
// Change the temperature of a thermostat.
diff --git a/TAO/examples/Advanced/ch_8_and_10/client.cpp b/TAO/examples/Advanced/ch_8_and_10/client.cpp
index 6f236100f90..086dd1bb2c7 100644
--- a/TAO/examples/Advanced/ch_8_and_10/client.cpp
+++ b/TAO/examples/Advanced/ch_8_and_10/client.cpp
@@ -17,6 +17,9 @@
using namespace std;
+// This inserter may or may not be needed for your ORB.
+#if !defined (GEN_OSTREAM_OPS)
+
// Show the details for a thermometer or thermostat.
static std::ostream &
operator<<(std::ostream & os, CCS::Thermometer_ptr t)
@@ -83,8 +86,6 @@ operator<<(std::ostream & os, const CCS::Controller::EChange & ec)
// Generic ostream inserter for exceptions. Inserts the exception
// name, if available, and the repository ID otherwise.
- #if 0 // This inserter may or may not be needed for your ORB.
-
static std::ostream &
operator<<(std::ostream & os, const CORBA::Exception & e)
{
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp
index 6e0b8762556..22459eb5b44 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp
@@ -284,115 +284,206 @@ TAO_UIPMC_Mcast_Transport::recv_packet (
return &buf[miop_header_size];
}
-bool
-TAO_UIPMC_Mcast_Transport::recv_all (void)
+TAO_PG::UIPMC_Recv_Packet *
+TAO_UIPMC_Mcast_Transport::recv_all (TAO_Resume_Handle &rh)
{
+ const TAO_MIOP_Resource_Factory *const factory =
+ ACE_Dynamic_Service<TAO_MIOP_Resource_Factory>::instance (
+ this->orb_core_->configuration(),
+ ACE_TEXT ("MIOP_Resource_Factory"));
+ const bool eager_dequeue= factory->enable_eager_dequeue ();
+
+ // Only one thread will do recv at the same time.
// FUZZ: disable check_for_ACE_Guard
- // Only one thread will do recv.
ACE_Guard<TAO_SYNCH_MUTEX> recv_guard (this->recv_lock_, 0); // tryacquire
- if (!recv_guard.locked ())
- return !this->complete_.is_empty ();
// FUZZ: enable check_for_ACE_Guard
-
- // The buffer on the stack which will be used to hold the input
- // messages.
- char buf [MIOP_MAX_DGRAM_SIZE + ACE_CDR::MAX_ALIGNMENT];
- char *aligned_buf = ACE_ptr_align_binary (buf, ACE_CDR::MAX_ALIGNMENT);
+ if (recv_guard.locked ())
+ {
+ // The buffer on the stack which will be used to hold the input
+ // messages.
+ char buf [MIOP_MAX_DGRAM_SIZE + ACE_CDR::MAX_ALIGNMENT];
+ char *aligned_buf = ACE_ptr_align_binary (buf, ACE_CDR::MAX_ALIGNMENT);
#if defined (ACE_INITIALIZE_MEMORY_BEFORE_USE)
- (void) ACE_OS::memset (buf,
- '\0',
- sizeof buf);
+ (void) ACE_OS::memset (buf, '\0', sizeof buf);
#endif /* ACE_INITIALIZE_MEMORY_BEFORE_USE */
- while (true)
- {
- // This guard will cleanup expired packets each iteration.
- TAO_PG::UIPMC_Recv_Packet_Cleanup_Guard guard (this);
+ while (true)
+ {
+ // This guard will cleanup expired packets each iteration.
+ TAO_PG::UIPMC_Recv_Packet_Cleanup_Guard guard (this);
- ACE_INET_Addr from_addr;
- CORBA::UShort packet_length;
- CORBA::ULong packet_number;
- bool stop_packet;
- u_long id_hash;
+ ACE_INET_Addr from_addr;
+ CORBA::UShort packet_length;
+ CORBA::ULong packet_number;
+ bool stop_packet;
+ u_long id_hash;
- char *start_data =
- this->recv_packet (aligned_buf, MIOP_MAX_DGRAM_SIZE, from_addr,
- packet_length, packet_number, stop_packet, id_hash);
+ char *start_data =
+ this->recv_packet (aligned_buf, MIOP_MAX_DGRAM_SIZE, from_addr,
+ packet_length, packet_number, stop_packet, id_hash);
- // The socket buffer is empty. Try to do other useful things.
- if (start_data == 0)
- {
- if (errno != EWOULDBLOCK && errno != EAGAIN)
+ // The socket buffer is empty. Try to do other useful things.
+ if (start_data == 0)
{
+ if (errno != EWOULDBLOCK && errno != EAGAIN)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - UIPMC_Mcast_Transport[%d]::")
+ ACE_TEXT ("recv_all, unexpected failure of recv_packet '%m'\n"),
+ this->id ()));
+ }
+ break;
+ }
+
+ if (TAO_debug_level >= 9)
+ {
+ char tmp[INET6_ADDRSTRLEN];
+ from_addr.get_host_addr (tmp, sizeof tmp);
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("TAO (%P|%t) - UIPMC_Mcast_Transport[%d]::")
- ACE_TEXT ("recv_all, unexpected failure of recv_packet '%m'\n"),
- this->id ()));
+ ACE_TEXT ("recv, received %d bytes from <%C:%u> ")
+ ACE_TEXT ("(hash %d)\n"),
+ this->id (),
+ packet_length,
+ tmp,
+ from_addr.get_port_number (),
+ id_hash));
}
- break;
- }
- if (TAO_debug_level >= 10)
- {
- char tmp[INET6_ADDRSTRLEN];
- from_addr.get_host_addr (tmp, sizeof tmp);
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) - UIPMC_Mcast_Transport[%d]::")
- ACE_TEXT ("recv, received %d bytes from <%C:%u> ")
- ACE_TEXT ("(hash %d)\n"),
- this->id (),
- packet_length,
- tmp,
- from_addr.get_port_number (),
- id_hash));
- }
+ TAO_PG::UIPMC_Recv_Packet *packet = 0;
+ if (this->incomplete_.find (id_hash, packet) == -1)
+ {
+ ACE_NEW_THROW_EX (packet,
+ TAO_PG::UIPMC_Recv_Packet,
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO::VMCID,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+
+ if (this->incomplete_.bind (id_hash, packet) != 0)
+ {
+ // Cleanup the packet.
+ delete packet;
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - UIPMC_Mcast_Transport[%d]::")
+ ACE_TEXT ("recv_all, could not queue fragment\n"),
+ this->id ()));
+ continue;
+ }
+ }
- TAO_PG::UIPMC_Recv_Packet *packet = 0;
- if (this->incomplete_.find (id_hash, packet) == -1)
- {
- ACE_NEW_THROW_EX (packet,
- TAO_PG::UIPMC_Recv_Packet,
- CORBA::NO_MEMORY (
- CORBA::SystemException::_tao_minor_code (
- TAO::VMCID,
- ENOMEM),
- CORBA::COMPLETED_NO));
-
- if (this->incomplete_.bind (id_hash, packet) != 0)
+ // We have incomplete packet so add a new data to it.
+ // add_fragment returns 1 iff the packet is complete.
+ if (1 == packet->add_fragment (start_data, packet_length,
+ packet_number, stop_packet))
{
- // Cleanup the packet.
- ACE_Auto_Ptr<TAO_PG::UIPMC_Recv_Packet> bail_guard (packet);
- continue;
+ // Remove this packet from incomplete packets.
+ this->incomplete_.unbind (id_hash);
+
+ // If there are no completed message ahead of us AND
+ // we only want a single message, just return it.
+ if (this->complete_.is_empty () && !eager_dequeue)
+ {
+ if (TAO_debug_level >= 9)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - UIPMC_Mcast_Transport[%d]::")
+ ACE_TEXT ("recv_all, completed MIOP message %@\n"),
+ this->id (), static_cast<void *> (packet)));
+ }
+
+ return packet;
+ }
+ ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
+ guard,
+ this->complete_lock_,
+ packet);
+ if (this->complete_.is_empty () && !eager_dequeue)
+ {
+ // Another thread dequeued the waiting MIOP message before we got
+ // the lock, simply return our single message, don't bother queueing
+ // it after all.
+ if (TAO_debug_level >= 9)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - UIPMC_Mcast_Transport[%d]::")
+ ACE_TEXT ("recv_all, completed MIOP message %@\n"),
+ this->id (), static_cast<void *> (packet)));
+ }
+
+ return packet;
+ }
+
+ if (TAO_debug_level >= 9)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - UIPMC_Mcast_Transport[%d]::")
+ ACE_TEXT ("recv_all, completed MIOP message %@ (QUEUED)\n"),
+ this->id (), static_cast<void *> (packet)));
+ }
+
+ // Add it to the complete queue.
+ this->complete_.enqueue_tail (packet);
+
+ // Stop attempting to queue more messages if we are not in eager mode.
+ if (!eager_dequeue)
+ break;
}
}
+ recv_guard.release ();
+ }
- // We have incomplete packet so add a new data to it.
- int const ret = packet->add_fragment (start_data, packet_length,
- packet_number, stop_packet);
-
- // add_fragment returns 1 iff the packet is complete.
- if (ret == 1)
- {
- // Remove this packet from incomplete packets.
- this->incomplete_.unbind (id_hash);
+ // Ok we have received as many packets as we could, now if we have
+ // any completed packets queued up, return the first to the caller.
+ if (this->complete_.is_empty ())
+ return 0;
+ ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, complete_guard, this->complete_lock_, 0);
+ if (this->complete_.is_empty ())
+ return 0; // Another thread got here first, not a problem.
- ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
- guard,
- this->complete_lock_,
- !this->complete_.is_empty ());
+ TAO_PG::UIPMC_Recv_Packet *packet = 0;
+ if (this->complete_.dequeue_head (packet) == -1)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - TAO_UIPMC_Mcast_Transport[%d]::recv_all, ")
+ ACE_TEXT ("unable to dequeue completed message\n"),
+ this->id ()));
+ return 0;
+ }
- // Add it to the complete queue.
- this->complete_.enqueue_tail (packet);
+ if (TAO_debug_level >= 9)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - UIPMC_Mcast_Transport[%d]::")
+ ACE_TEXT ("recv_all, completed MIOP message %@ (DEQUEUED)\n"),
+ this->id (), static_cast<void *> (packet)));
+ }
- // The following break stops the eager de-queuing of
- // further completed MIOP messages. This should probably
- // be configuable via a MIOP Server -ORB option.
- break;
+ // If there is another message waiting to be processed (in addition
+ // to the one we have just taken off), notify another thread (if
+ // available) so this can also be processed in parrellel.
+ if (!this->complete_.is_empty ())
+ {
+ int const retval = this->notify_reactor_now ();
+ if (retval == 1)
+ {
+ // Now we have handed off to another thread, let the class
+ // know that it doesn't need to resume with OUR handle
+ // after we have processed our message.
+ rh.set_flag (TAO_Resume_Handle::TAO_HANDLE_LEAVE_SUSPENDED);
+ }
+ else if (retval < 0 && TAO_debug_level > 2)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - TAO_UIPMC_Mcast_Transport[%d]::recv_all, ")
+ ACE_TEXT ("notify to the reactor failed.\n"),
+ this->id ()));
}
}
- return !this->complete_.is_empty ();
+ return packet;
}
int
@@ -411,47 +502,17 @@ TAO_UIPMC_Mcast_Transport::handle_input (
this->id ()));
}
- if (this->recv_all ())
+ // Grab the next completed MIOP message to process from the FIFO Queue.
+ ACE_Auto_Ptr<TAO_PG::UIPMC_Recv_Packet> complete_owner (this->recv_all (rh));
+ if (TAO_PG::UIPMC_Recv_Packet *complete = complete_owner.get ())
{
- // Unqueue the first available completed message for us to process.
- TAO_PG::UIPMC_Recv_Packet *complete = 0;
- ACE_Auto_Ptr<TAO_PG::UIPMC_Recv_Packet> owner (0);
- {
- ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, guard, this->complete_lock_, 0);
- if (this->complete_.is_empty ())
- return 0; // Another thread got here first, no problem.
- if (this->complete_.dequeue_head (complete) == -1)
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) - TAO_UIPMC_Mcast_Transport[%d]::handle_input, ")
- ACE_TEXT ("unable to dequeue completed message\n"),
- this->id ()));
- return 0;
- }
- ACE_auto_ptr_reset (owner, complete);
-
- // If there is another message waiting to be processed (in addition
- // to the one we have just taken off to be processed), notify another
- // thread (if available) so this can also be processed in parrellel.
- if (!this->complete_.is_empty ())
- {
- int const retval = this->notify_reactor_now ();
- if (retval == 1)
- {
- // Now we have handed off to another thread, let the class
- // know that it doesn't need to resume with OUR handle
- // after we have processed our message.
- rh.set_flag (TAO_Resume_Handle::TAO_HANDLE_LEAVE_SUSPENDED);
- }
- else if (retval < 0 && TAO_debug_level > 2)
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) - TAO_UIPMC_Mcast_Transport[%d]::handle_input, ")
- ACE_TEXT ("notify to the reactor failed.\n"),
- this->id ()));
- }
- }
- }
+ if (TAO_debug_level >= 9)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - UIPMC_Mcast_Transport[%d]::")
+ ACE_TEXT ("handle_input, processing MIOP message %@ (%d bytes)\n"),
+ this->id (), static_cast<void *> (complete), complete->data_length ()));
+ }
// Create a data block from our dequeued completed message.
char *buffer= 0;
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.h b/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.h
index 406fa8a84c9..75befb1e41d 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.h
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.h
@@ -31,7 +31,6 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
// Forward decls.
class TAO_ORB_Core;
class TAO_UIPMC_Mcast_Connection_Handler;
-
namespace TAO_PG
{
class UIPMC_Recv_Packet_Cleanup_Guard;
@@ -118,8 +117,9 @@ private:
bool &stop_packet,
u_long &id_hash) const;
- /// Receive as much UDP packets as possible.
- bool recv_all (void);
+ /// Return the next complete MIOP packet, possiably dequeueing
+ /// as many as are available first from the socket.
+ TAO_PG::UIPMC_Recv_Packet *recv_all (TAO_Resume_Handle &rh);
/// Cleanup either all packets or expired only depending the
/// expired_only flag.
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Transport.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Transport.cpp
index 9c9e9f2b07c..2b986c4afd9 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Transport.cpp
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Transport.cpp
@@ -330,10 +330,11 @@ TAO_UIPMC_Transport::send (
this_fragment_size-= static_cast<u_long> (already_sent))
{
// Make sure we don't send our fragments too quickly
- this->throttle_send_rate (
- factory->max_fragment_rate (),
- max_fragment_size,
- this_fragment_size);
+ if (factory->enable_throttling ())
+ this->throttle_send_rate (
+ factory->max_fragment_rate (),
+ max_fragment_size,
+ this_fragment_size);
// Haven't sent some of the data yet, we need to adjust the fragments iov's
// to skip the data we have actually manage to send so far.
@@ -382,7 +383,8 @@ TAO_UIPMC_Transport::send (
}
// Keep a note of the number of bytes we have just buffered
- this->total_bytes_outstanding_+= static_cast<u_long> (already_sent);
+ if (factory->enable_throttling ())
+ this->total_bytes_outstanding_+= static_cast<u_long> (already_sent);
} // Keep sending the rest of the fragment
// Increment the number of bytes of payload transferred.
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/miop_resource.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/miop_resource.cpp
index f61ff35a2f3..83d84972a82 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/miop_resource.cpp
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/miop_resource.cpp
@@ -20,6 +20,8 @@ TAO_MIOP_Resource_Factory::TAO_MIOP_Resource_Factory (void)
, send_hi_water_mark_ (0u) // Zero sets this to actual -ORBSndSock
, send_buffer_size_ (0u) // Zero is unspecified (-ORBSndSock).
, receive_buffer_size_ (0u) // Zero is unspecified (-ORBRcvSock).
+ , enable_throttling_ (!!(TAO_DEFAULT_MIOP_SEND_THROTTLING)) // Client-side SendRate throttling enabled.
+ , enable_eager_dequeue_ (!!(TAO_DEFAULT_MIOP_EAGER_DEQUEUEING)) // Server-side Multiple message dequeueing.
{
}
@@ -235,6 +237,32 @@ TAO_MIOP_Resource_Factory::init (int argc, ACE_TCHAR *argv[])
ACE_TEXT ("TAO (%P|%t) - MIOP_Resource_Factory ")
ACE_TEXT ("-ORBRcvSock missing size in bytes.\n")));
}
+ else if (ACE_OS::strcasecmp (argv[curarg],
+ ACE_TEXT ("-ORBSendThrottling")) == 0 ||
+ ACE_OS::strcasecmp (argv[curarg],
+ ACE_TEXT ("-ORBSendThrottle")) == 0)
+ {
+ if (++curarg < argc)
+ this->enable_throttling_= static_cast<bool> (ACE_OS::atoi (argv[curarg]));
+ else
+ ACE_DEBUG ((LM_ERROR,
+ ACE_TEXT ("TAO (%P|%t) - MIOP_Resource_Factory ")
+ ACE_TEXT ("%s missing 0 or 1 parameter.\n"),
+ argv[curarg-1]));
+ }
+ else if (ACE_OS::strcasecmp (argv[curarg],
+ ACE_TEXT ("-ORBEagerDequeueing")) == 0 ||
+ ACE_OS::strcasecmp (argv[curarg],
+ ACE_TEXT ("-ORBEagerDequeue")) == 0)
+ {
+ if (++curarg < argc)
+ this->enable_eager_dequeue_= static_cast<bool> (ACE_OS::atoi (argv[curarg]));
+ else
+ ACE_DEBUG ((LM_ERROR,
+ ACE_TEXT ("TAO (%P|%t) - MIOP_Resource_Factory ")
+ ACE_TEXT ("%s missing 0 or 1 parameter.\n"),
+ argv[curarg-1]));
+ }
else if (ACE_OS::strncmp (argv[curarg], ACE_TEXT ("-ORB"), 4) == 0)
{
// Can we assume there is an argument after the option?
@@ -342,6 +370,18 @@ TAO_MIOP_Resource_Factory::receive_buffer_size (void) const
return receive_buffer_size_;
}
+bool
+TAO_MIOP_Resource_Factory::enable_throttling (void) const
+{
+ return enable_throttling_;
+}
+
+bool
+TAO_MIOP_Resource_Factory::enable_eager_dequeue (void) const
+{
+ return enable_eager_dequeue_;
+}
+
TAO_END_VERSIONED_NAMESPACE_DECL
// ****************************************************************
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/miop_resource.h b/TAO/orbsvcs/orbsvcs/PortableGroup/miop_resource.h
index a4cfac1b51d..8f45618c04d 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/miop_resource.h
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/miop_resource.h
@@ -90,8 +90,13 @@ public:
u_long receive_buffer_size (void) const;
//@}
-private:
+ /// Get the client-side transmission rate throttling enable flag.
+ bool enable_throttling (void) const;
+
+ /// Get the server-side eager complete message dequeuing enable flag.
+ bool enable_eager_dequeue (void) const;
+private:
enum Fragments_Cleanup_Strategy_Type
{
TAO_MIOP_CLEANUP_TIME_BOUND,
@@ -122,6 +127,12 @@ private:
/// Get the desired socket receive buffer's size in bytes.
u_long receive_buffer_size_;
+
+ /// Get the client-side transmission rate throttling enable flag.
+ bool enable_throttling_;
+
+ /// Get the server-side eager complete message dequeuing enable flag.
+ bool enable_eager_dequeue_;
};
TAO_END_VERSIONED_NAMESPACE_DECL
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/miopconf.h b/TAO/orbsvcs/orbsvcs/PortableGroup/miopconf.h
index b45947b340a..49afdf15567 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/miopconf.h
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/miopconf.h
@@ -98,6 +98,14 @@ static u_long const TAO_DEFAULT_MIOP_FRAGMENT_SIZE = MIOP_MAX_DGRAM_SIZE;
static u_long const TAO_DEFAULT_MIOP_MAX_FRAGMENTS = 0u; // Zero is unlimited
#endif
+#if !defined (TAO_DEFAULT_MIOP_SEND_THROTTLING)
+static bool const TAO_DEFAULT_MIOP_SEND_THROTTLING = true; // Enabled
+#endif
+
+#if !defined (TAO_DEFAULT_MIOP_EAGER_DEQUEUEING)
+static bool const TAO_DEFAULT_MIOP_EAGER_DEQUEUEING = true; // Enabled
+#endif
+
static CORBA::Octet const miop_magic[4] = {
0x4d, 0x49, 0x4f, 0x50
}; // in ASCII this is 'M', 'I', 'O', 'P'
diff --git a/TAO/orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.cpp b/TAO/orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.cpp
index 906ffd17ccc..c6f0b7e7654 100644
--- a/TAO/orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.cpp
+++ b/TAO/orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.cpp
@@ -4,6 +4,8 @@
#include "Hello_Impl.h"
+ACE_Atomic_Op< TAO_SYNCH_MUTEX, u_long > Number_of_Problems = 0uL;
+
UIPMC_Object_Impl::UIPMC_Object_Impl (CORBA::ULong payload,
CORBA::ULong clients,
CORBA::ULong calls)
@@ -20,6 +22,7 @@ UIPMC_Object_Impl::~UIPMC_Object_Impl (void)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("ERROR: expected %d clients but only %d encountered\n"),
this->clients_, this->received_.current_size ()));
+ ++Number_of_Problems;
return;
}
@@ -29,12 +32,15 @@ UIPMC_Object_Impl::~UIPMC_Object_Impl (void)
this->received_.find (Test::ClientIDs[i], count);
if (count != this->calls_)
- // This perfectly ok for MIOP to lose messages.
- // So, this is not an error.
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("DEBUG: expected %d messages from '%c' client ")
- ACE_TEXT ("but only %d encountered\n"),
- this->calls_, Test::ClientIDs[i], count));
+ {
+ // This perfectly ok for MIOP to lose messages.
+ // So, this is not an error.
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("DEBUG: expected %d messages from '%c' client ")
+ ACE_TEXT ("but only %d encountered\n"),
+ this->calls_, Test::ClientIDs[i], count));
+ ++Number_of_Problems;
+ }
}
}
@@ -47,6 +53,7 @@ UIPMC_Object_Impl::process (Test::Octets const &payload)
ACE_TEXT ("ERROR: expected %d but received %d ")
ACE_TEXT ("sequence length\n"),
this->payload_, payload.length ()));
+ ++Number_of_Problems;
return;
}
@@ -66,6 +73,7 @@ UIPMC_Object_Impl::process (Test::Octets const &payload)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("ERROR: received malformed message from client '%c'\n"),
c));
+ ++Number_of_Problems;
return;
}
@@ -74,6 +82,7 @@ UIPMC_Object_Impl::process (Test::Octets const &payload)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("ERROR: client id '%c' doesn't match any known value\n"),
c));
+ ++Number_of_Problems;
return;
}
@@ -82,6 +91,7 @@ UIPMC_Object_Impl::process (Test::Octets const &payload)
{
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("ERROR: cann't rebind received count\n")));
+ ++Number_of_Problems;
}
}
@@ -107,6 +117,7 @@ Hello_Impl::shutdown (void)
}
catch (const CORBA::Exception& ex)
{
+ ++Number_of_Problems;
ex._tao_print_exception ("Exception caught in shutdown():");
}
}
diff --git a/TAO/orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.h b/TAO/orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.h
index 1b60a05f84c..890ec58bd8e 100644
--- a/TAO/orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.h
+++ b/TAO/orbsvcs/tests/Miop/McastFragmentation/Hello_Impl.h
@@ -7,6 +7,9 @@
#include "ace/Hash_Map_Manager_T.h"
#include "HelloS.h"
+#include "ace/Atomic_Op_T.h"
+
+extern ACE_Atomic_Op< TAO_SYNCH_MUTEX, u_long > Number_of_Problems;
class UIPMC_Object_Impl : public virtual POA_Test::UIPMC_Object
{
diff --git a/TAO/orbsvcs/tests/Miop/McastFragmentation/client.cpp b/TAO/orbsvcs/tests/Miop/McastFragmentation/client.cpp
index e55c8874557..1fc0e819426 100644
--- a/TAO/orbsvcs/tests/Miop/McastFragmentation/client.cpp
+++ b/TAO/orbsvcs/tests/Miop/McastFragmentation/client.cpp
@@ -185,10 +185,10 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("Exception caught in client main ():");
- return -1;
+ return 1;
}
ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("\nClient finished successfully\n")));
+ ACE_TEXT ("\nClient finished successfully.\n")));
return 0;
}
diff --git a/TAO/orbsvcs/tests/Miop/McastFragmentation/run_test.pl b/TAO/orbsvcs/tests/Miop/McastFragmentation/run_test.pl
index 764f22f07d6..99c705421fa 100755
--- a/TAO/orbsvcs/tests/Miop/McastFragmentation/run_test.pl
+++ b/TAO/orbsvcs/tests/Miop/McastFragmentation/run_test.pl
@@ -14,8 +14,8 @@ $client_level = '0';
$orbs = 10;
$payload = 3000;
-$threads = 10;
-$count = 10;
+$threads = 5;
+$count = 5;
foreach $i (@ARGV) {
if ($i eq '-debug') {
diff --git a/TAO/orbsvcs/tests/Miop/McastFragmentation/run_test_ipv6.pl b/TAO/orbsvcs/tests/Miop/McastFragmentation/run_test_ipv6.pl
index 4ca7bae0cd5..41972cfbbdb 100755
--- a/TAO/orbsvcs/tests/Miop/McastFragmentation/run_test_ipv6.pl
+++ b/TAO/orbsvcs/tests/Miop/McastFragmentation/run_test_ipv6.pl
@@ -13,9 +13,9 @@ $server_level = '0';
$client_level = '0';
$orbs = 10;
-$payload = 300000;
-$threads = 10;
-$count = 10;
+$payload = 3000;
+$threads = 5;
+$count = 5;
foreach $i (@ARGV) {
if ($i eq '-debug') {
diff --git a/TAO/orbsvcs/tests/Miop/McastFragmentation/server.cpp b/TAO/orbsvcs/tests/Miop/McastFragmentation/server.cpp
index 8cd9bffcf6f..045adfe7820 100644
--- a/TAO/orbsvcs/tests/Miop/McastFragmentation/server.cpp
+++ b/TAO/orbsvcs/tests/Miop/McastFragmentation/server.cpp
@@ -195,6 +195,14 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
return -1;
}
+ if (Number_of_Problems.value ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("\nServer finished with *Possiably* %u PROBLEMS.\n"),
+ Number_of_Problems.value ()));
+ return 1;
+ }
+
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("\nServer finished successfully.\n")));
return 0;
diff --git a/TAO/tao/DynamicInterface/Request.h b/TAO/tao/DynamicInterface/Request.h
index 92581d2d0f3..e912de15fe6 100644
--- a/TAO/tao/DynamicInterface/Request.h
+++ b/TAO/tao/DynamicInterface/Request.h
@@ -185,8 +185,8 @@ namespace CORBA
/// Set the byte order member.
void _tao_byte_order (int byte_order);
- // Hold on to a user exception in case we are part of a TAO
- // gateway.
+ /// Hold on to a user exception in case we are part of a TAO
+ /// gateway.
void raw_user_exception (TAO_InputCDR &cdr);
/// Accessor for the input stream containing the exception.
@@ -270,7 +270,6 @@ namespace CORBA
/// Stores user exception as a CDR stream when this request is
/// used in a TAO gateway.
ACE_CString raw_user_exception_;
-
};
} // End CORBA namespace.