summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam R. Otte <wotte@dre.vanderbilt.edu>2010-06-29 00:04:55 +0000
committerWilliam R. Otte <wotte@dre.vanderbilt.edu>2010-06-29 00:04:55 +0000
commita1b0c62089070a57df137718922f832889c6bdba (patch)
treeb73e18ca27c9f0b38329194d3db6dc631d6be67f
parent96a739f0404fc9eb77d8f7d72d0cb31a573c7e07 (diff)
downloadATCD-a1b0c62089070a57df137718922f832889c6bdba.tar.gz
Mon Jun 28 23:55:35 UTC 2010 William R. Otte <wotte@dre.vanderbilt.edu>
* DAnCE/DAnCE/DAnCE_Properties.idl: Additional documentation, and added a temporary property to trigger best effort deployment. * DAnCE/DAnCE/DAnCE_Utility.h: * DAnCE/DAnCE/DAnCE_Utility.cpp: New specialization for extracting boolean values from property sequences. * DAnCE/LocalityManager/Daemon/Locality_Manager_Impl.cpp: * DAnCE/NodeManager/NodeManager_Impl.cpp: * DAnCE/NodeManager/Node_Manager_Module.h: * DAnCE/NodeManager/Node_Manager_Module.cpp: Added code to optionally enable best effort deployment semantics, controlled by --best-effort to the NodeManager at startup. * NEWS: Updates.
-rw-r--r--CIAO/ChangeLog25
-rw-r--r--CIAO/DAnCE/DAnCE/DAnCE_Properties.idl16
-rw-r--r--CIAO/DAnCE/DAnCE/DAnCE_Utility.cpp45
-rw-r--r--CIAO/DAnCE/DAnCE/DAnCE_Utility.h6
-rw-r--r--CIAO/DAnCE/LocalityManager/Daemon/Locality_Manager_Impl.cpp16
-rw-r--r--CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp9
-rw-r--r--CIAO/DAnCE/NodeManager/Node_Manager_Module.cpp23
-rw-r--r--CIAO/DAnCE/NodeManager/Node_Manager_Module.h1
-rw-r--r--CIAO/NEWS18
9 files changed, 150 insertions, 9 deletions
diff --git a/CIAO/ChangeLog b/CIAO/ChangeLog
index 72b7ed7adb2..18f24486044 100644
--- a/CIAO/ChangeLog
+++ b/CIAO/ChangeLog
@@ -1,3 +1,28 @@
+Mon Jun 28 23:55:35 UTC 2010 William R. Otte <wotte@dre.vanderbilt.edu>
+
+ * DAnCE/DAnCE/DAnCE_Properties.idl:
+
+ Additional documentation, and added a temporary property to trigger
+ best effort deployment.
+
+ * DAnCE/DAnCE/DAnCE_Utility.h:
+ * DAnCE/DAnCE/DAnCE_Utility.cpp:
+
+ New specialization for extracting boolean values from property
+ sequences.
+
+ * DAnCE/LocalityManager/Daemon/Locality_Manager_Impl.cpp:
+ * DAnCE/NodeManager/NodeManager_Impl.cpp:
+ * DAnCE/NodeManager/Node_Manager_Module.h:
+ * DAnCE/NodeManager/Node_Manager_Module.cpp:
+
+ Added code to optionally enable best effort deployment semantics,
+ controlled by --best-effort to the NodeManager at startup.
+
+ * NEWS:
+
+ Updates.
+
Mon Jun 28 19:53:55 UTC 2010 William R. Otte <wotte@dre.vanderbilt.edu>
* DAnCE/NodeApplication/NodeApplication_Impl.cpp:
diff --git a/CIAO/DAnCE/DAnCE/DAnCE_Properties.idl b/CIAO/DAnCE/DAnCE/DAnCE_Properties.idl
index 53e46aaff64..4fe1c7f8c47 100644
--- a/CIAO/DAnCE/DAnCE/DAnCE_Properties.idl
+++ b/CIAO/DAnCE/DAnCE/DAnCE_Properties.idl
@@ -40,16 +40,30 @@ module DAnCE
/// Indicates the POA in use for this entity.
const string ENTITY_POA = "edu.dre.vanderbilt.DAnCE.POA";
-
+
+ /// Indicates the maximum time that the locality manager will wait for any
+ /// deployment step to complete, in seconds.
const string LOCALITY_TIMEOUT = "edu.vanderbilt.dre.DAnCE.LocalityTimeout";
+ /// Indicates the UUID that should be assigned to a locality instance
const string LOCALITY_UUID = "edu.vanderbilt.dre.DAnCE.LocalityUUID";
+ /// Indicates command line arguments that should be passed to locality managers
+ /// when spawned.
const string LOCALITY_ARGUMENTS = "edu.vanderbilt.dre.DAnCE.LocalityArguments";
+ /// Indicates the executable name that should be used when spawing a locality manager
const string LOCALITY_EXECUTABLE = "edu.vanderbilt.dre.DAnCE.LocalityExec";
+
const string LOCALITY_MULTITHREAD = "edu.vanderbilt.dre.DAnCE.LocalityMutltithread";
+ /// Stringified IOR to be used as the naming context for a locality instance.
const string LOCALITY_NAMINGCONTEXT = "edu.vanderbilt.dre.DAnCE.LocalityNamingContext";
+
+ /// @Temporary: Indicate that the node/locality manager should load best-effort
+ /// interceptors rather than first-failure semantics.
+ const string LOCALITY_BESTEFFORT = "edu.vanderbilt.dre.DAnCE.BestEffort";
// Implementation Types
+ /// Property describing the implementation type of a monolithic implementation
const string IMPL_TYPE = "edu.vanderbilt.dre.DAnCE.ImplementationType";
+
const string SERVER_EXECUTABLE = "edu.vanderbilt.dre.DAnCE.ServerExecutable";
const string CCM_CONTAINER = "edu.dre.vanderbilt.dre.CCM.Container";
const string CCM_HOME = "edu.dre.vanderbilt.dre.CCM.Home";
diff --git a/CIAO/DAnCE/DAnCE/DAnCE_Utility.cpp b/CIAO/DAnCE/DAnCE/DAnCE_Utility.cpp
index f2ef1c22ffd..4115843199d 100644
--- a/CIAO/DAnCE/DAnCE/DAnCE_Utility.cpp
+++ b/CIAO/DAnCE/DAnCE/DAnCE_Utility.cpp
@@ -220,6 +220,51 @@ namespace DAnCE
return false;
}
+
+ template<>
+ bool get_property_value (const char *name,
+ const ::Deployment::Properties &properties,
+ bool &val)
+ {
+ DANCE_TRACE ("DAnCE::Utility::get_property_value<const char *>");
+
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO
+ ACE_TEXT("DAnCE::Utility::get_property_value<T> - ")
+ ACE_TEXT("Finding property value for name '%C'\n"),
+ name));
+
+ for (CORBA::ULong i = 0; i < properties.length (); ++i)
+ {
+ if (ACE_OS::strcmp (properties[i].name.in (), name) == 0)
+ {
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO
+ ACE_TEXT("DAnCE::Utility::get_property_value<T> - ")
+ ACE_TEXT("Found property '%C'\n"), name));
+ if (properties[i].value >>= CORBA::Any::to_boolean (val))
+ {
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO
+ ACE_TEXT("DAnCE::Utility::get_property_value<T> - ")
+ ACE_TEXT("Value is %C\n"), val));
+ return true;
+ }
+ else
+ {
+ DANCE_ERROR (1, (LM_WARNING, DLINFO
+ ACE_TEXT("DAnCE::Utility::get_property_value<T> - ")
+ ACE_TEXT("Failed to extract property value for %C\n"),
+ name));
+ return false;
+ }
+ }
+ }
+
+
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO
+ ACE_TEXT("DAnCE::Utility::get_property_value<T> - ")
+ ACE_TEXT("Unable to find property named %C\n"), name));
+
+ return false;
+ }
template<char*>
void update_property_value (const char *name,
diff --git a/CIAO/DAnCE/DAnCE/DAnCE_Utility.h b/CIAO/DAnCE/DAnCE/DAnCE_Utility.h
index b347ac56896..1a3eb47f45a 100644
--- a/CIAO/DAnCE/DAnCE/DAnCE_Utility.h
+++ b/CIAO/DAnCE/DAnCE/DAnCE_Utility.h
@@ -121,6 +121,12 @@ namespace DAnCE
const ::Deployment::Properties &properties,
const char * &val);
+ template<>
+ DANCE_STUB_Export bool
+ get_property_value (const char *name,
+ const ::Deployment::Properties &properties,
+ bool &val);
+
template<char*>
DANCE_STUB_Export void
update_property_value (const char *name,
diff --git a/CIAO/DAnCE/LocalityManager/Daemon/Locality_Manager_Impl.cpp b/CIAO/DAnCE/LocalityManager/Daemon/Locality_Manager_Impl.cpp
index 51c4cf15372..92ab642a58f 100644
--- a/CIAO/DAnCE/LocalityManager/Daemon/Locality_Manager_Impl.cpp
+++ b/CIAO/DAnCE/LocalityManager/Daemon/Locality_Manager_Impl.cpp
@@ -123,9 +123,19 @@ namespace DAnCE
PLUGIN_MANAGER::instance ()->register_interceptor (ACE_TEXT_CHAR_TO_TCHAR ("CIAO_Deployment_Interceptors"),
ACE_TEXT_CHAR_TO_TCHAR ("create_CIAO_StoreReferences"));
-
- PLUGIN_MANAGER::instance ()->register_interceptor (ACE_TEXT_CHAR_TO_TCHAR ("DAnCE_Error_Interceptors"),
- ACE_TEXT_CHAR_TO_TCHAR ("create_DAnCE_Standard_Error"));
+
+ bool tmp;
+ if (props &&
+ DAnCE::Utility::get_property_value (DAnCE::LOCALITY_BESTEFFORT,
+ *props,
+ tmp))
+ {
+ PLUGIN_MANAGER::instance ()->register_interceptor (ACE_TEXT_CHAR_TO_TCHAR ("DAnCE_Error_Interceptors"),
+ ACE_TEXT_CHAR_TO_TCHAR ("create_DAnCE_Standard_Error"));
+ }
+ else
+ PLUGIN_MANAGER::instance ()->register_interceptor (ACE_TEXT_CHAR_TO_TCHAR ("DAnCE_Error_Interceptors"),
+ ACE_TEXT_CHAR_TO_TCHAR ("create_DAnCE_Best_Effort"));
if (this->props_)
{
diff --git a/CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp b/CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp
index 4148464dc48..88bdbec9c43 100644
--- a/CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp
+++ b/CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp
@@ -5,6 +5,7 @@
#include "DAnCE/Logger/Log_Macros.h"
#include "ace/OS_Memory.h"
+#include "DAnCE/DAnCE_PropertiesC.h"
#include "DAnCE/LocalityManager/Scheduler/Plugin_Manager.h"
#ifdef GEN_OSTREAM_OPS
@@ -43,8 +44,12 @@ namespace DAnCE
PLUGIN_MANAGER::instance ()->register_installation_handler (ACE_TEXT_CHAR_TO_TCHAR ("DAnCE_Locality_Handler"),
ACE_TEXT_CHAR_TO_TCHAR ("create_Locality_Handler"));
- PLUGIN_MANAGER::instance ()->register_interceptor (ACE_TEXT_CHAR_TO_TCHAR ("DAnCE_Error_Interceptors"),
- ACE_TEXT_CHAR_TO_TCHAR ("create_DAnCE_Standard_Error"));
+ if (this->properties_.find (DAnCE::LOCALITY_BESTEFFORT) == 0)
+ PLUGIN_MANAGER::instance ()->register_interceptor (ACE_TEXT_CHAR_TO_TCHAR ("DAnCE_Error_Interceptors"),
+ ACE_TEXT_CHAR_TO_TCHAR ("create_DAnCE_Standard_Error"));
+ else
+ PLUGIN_MANAGER::instance ()->register_interceptor (ACE_TEXT_CHAR_TO_TCHAR ("DAnCE_Error_Interceptors"),
+ ACE_TEXT_CHAR_TO_TCHAR ("create_DAnCE_Best_Effort"));
DANCE_DEBUG (8, (LM_INFO, DLINFO
ACE_TEXT("NodeApplication_Impl::NodeApplication_Impl - ")
diff --git a/CIAO/DAnCE/NodeManager/Node_Manager_Module.cpp b/CIAO/DAnCE/NodeManager/Node_Manager_Module.cpp
index 110b32cdc40..11a9a958ecc 100644
--- a/CIAO/DAnCE/NodeManager/Node_Manager_Module.cpp
+++ b/CIAO/DAnCE/NodeManager/Node_Manager_Module.cpp
@@ -54,7 +54,8 @@ DAnCE_NodeManager_Module::SOptions::SOptions(void)
standalone_ (false),
server_args_ (0),
domain_nc_ (0),
- instance_nc_ (0)
+ instance_nc_ (0),
+ best_effort_ (false)
{
}
@@ -92,6 +93,7 @@ DAnCE_NodeManager_Module::usage (void)
"\t-t|--timeout\t\t default timeout in seconds to wait for component server spawn\n"
"\t-d|--domain-nc [NC]\t Default naming context for domain objects.\n"
"\t--instance-nc [NC]\t Default naming context for instance registration directives. No argument indicates Domain NC.\n"
+ "\t--best-effort\t\t Instruct the node manager and the default behavior for locality managers to be best effort."
"\t-h|help\t\t\t print this help message\n";
}
@@ -116,9 +118,10 @@ DAnCE_NodeManager_Module::parse_args (int argc, ACE_TCHAR * argv[])
get_opts.long_option (ACE_TEXT("standalone-nm"), ACE_Get_Opt::NO_ARG);
get_opts.long_option (ACE_TEXT("timeout"), 't', ACE_Get_Opt::ARG_REQUIRED);
get_opts.long_option (ACE_TEXT("domain-nc"), 'd', ACE_Get_Opt::ARG_REQUIRED);
+ get_opts.long_option (ACE_TEXT("best-effort"), ACE_Get_Opt::NO_ARG);
get_opts.long_option (ACE_TEXT("help"), 'h', ACE_Get_Opt::NO_ARG);
get_opts.long_option (ACE_TEXT("instance-nc"), ACE_Get_Opt::ARG_REQUIRED);
-
+
//get_opts.long_option ("help", '?');
int c;
@@ -205,6 +208,13 @@ DAnCE_NodeManager_Module::parse_args (int argc, ACE_TCHAR * argv[])
this->options_.server_args_ = get_opts.opt_arg ();
}
else if (ACE_OS::strcmp (get_opts.long_option (),
+ ACE_TEXT("best-effort")) == 0)
+ {
+ DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT("Node_Manager_Module::parse_args - ")
+ ACE_TEXT("Using best effort deploment semantics\n")));
+ this->options_.best_effort_ = true;
+ }
+ else if (ACE_OS::strcmp (get_opts.long_option (),
ACE_TEXT("instance-nc")) == 0)
{
if (get_opts.opt_arg () == 0)
@@ -212,7 +222,8 @@ DAnCE_NodeManager_Module::parse_args (int argc, ACE_TCHAR * argv[])
if (this->options_.domain_nc_ == 0)
{
DANCE_ERROR (1, (LM_ERROR, DLINFO ACE_TEXT("Node_Manager_Module::parse_args - ")
- ACE_TEXT("ERROR: instance-nc provided no argument, but domain-nc did not appear before.\n")));
+ ACE_TEXT("ERROR: instance-nc provided no argument, ")
+ ACE_TEXT("but domain-nc did not appear before.\n")));
DANCE_ERROR_RETURN (1, (LM_ERROR, this->usage (), argv[0], c), false);
}
DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT("Node_Manager_Module::parse_args - ")
@@ -620,6 +631,12 @@ DAnCE_NodeManager_Module::create_nm_properties (DAnCE::Utility::PROPERTY_MAP &pr
val <<= CORBA::Any::from_string (CORBA::string_dup (ACE_TEXT_ALWAYS_CHAR (this->options_.domain_nc_)), 0);
props.bind (DAnCE::DOMAIN_NC, val);
}
+ if (this->options_.best_effort_)
+ {
+ CORBA::Any val;
+ val <<= CORBA::Any::from_boolean (true);
+ props.bind (DAnCE::LOCALITY_BESTEFFORT, val);
+ }
}
void
diff --git a/CIAO/DAnCE/NodeManager/Node_Manager_Module.h b/CIAO/DAnCE/NodeManager/Node_Manager_Module.h
index 88d69fd9360..a96349acc18 100644
--- a/CIAO/DAnCE/NodeManager/Node_Manager_Module.h
+++ b/CIAO/DAnCE/NodeManager/Node_Manager_Module.h
@@ -83,6 +83,7 @@ class DAnCE_NodeManager_Module
const ACE_TCHAR * domain_nc_;
const ACE_TCHAR * instance_nc_;
unsigned int threads_;
+ bool best_effort_;
SOptions();
};
diff --git a/CIAO/NEWS b/CIAO/NEWS
index 63a488dd894..7815c4d2113 100644
--- a/CIAO/NEWS
+++ b/CIAO/NEWS
@@ -21,6 +21,24 @@ USER VISIBLE CHANGES BETWEEN CIAO-0.7.9 and CIAO-0.8.0
. The ACE_FOR_TAO MPC feature is not supported anymore for CIAO
+. The DeploymentInterceptor interfaces have been merged into
+ a single interface.
+
+. All currently defined interception points are currently invoked
+ at the locality level when deploying plans.
+
+. The NodeApplication and LocalitManager have been refactored to use
+ a thread pool based dispatching system for executing deployment actions.
+ This allows the NodeApplication to use multiple threads to spawn new
+ dance_locality_manager processes. The LocalityManager will, for the
+ time being, be restricted to using only the ORB thread for dispatching
+ deployment events.
+
+. Most deployment errors are now passed to installed deployment interceptors.
+ DAnCE will include interceptors for extant semantics (first failure) and
+ initial support for best effort semantics, whereby deployment failures are
+ logged by otherwise ignored.
+
USER VISIBLE CHANGES BETWEEN CIAO-0.7.8 and CIAO-0.7.9
=======================================================