diff options
author | William R. Otte <wotte@dre.vanderbilt.edu> | 2010-06-29 00:04:55 +0000 |
---|---|---|
committer | William R. Otte <wotte@dre.vanderbilt.edu> | 2010-06-29 00:04:55 +0000 |
commit | a1b0c62089070a57df137718922f832889c6bdba (patch) | |
tree | b73e18ca27c9f0b38329194d3db6dc631d6be67f | |
parent | 96a739f0404fc9eb77d8f7d72d0cb31a573c7e07 (diff) | |
download | ATCD-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/ChangeLog | 25 | ||||
-rw-r--r-- | CIAO/DAnCE/DAnCE/DAnCE_Properties.idl | 16 | ||||
-rw-r--r-- | CIAO/DAnCE/DAnCE/DAnCE_Utility.cpp | 45 | ||||
-rw-r--r-- | CIAO/DAnCE/DAnCE/DAnCE_Utility.h | 6 | ||||
-rw-r--r-- | CIAO/DAnCE/LocalityManager/Daemon/Locality_Manager_Impl.cpp | 16 | ||||
-rw-r--r-- | CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp | 9 | ||||
-rw-r--r-- | CIAO/DAnCE/NodeManager/Node_Manager_Module.cpp | 23 | ||||
-rw-r--r-- | CIAO/DAnCE/NodeManager/Node_Manager_Module.h | 1 | ||||
-rw-r--r-- | CIAO/NEWS | 18 |
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 ======================================================= |