summaryrefslogtreecommitdiff
path: root/DAnCE/dance/LocalityManager/Daemon/Locality_Manager_Impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'DAnCE/dance/LocalityManager/Daemon/Locality_Manager_Impl.cpp')
-rw-r--r--DAnCE/dance/LocalityManager/Daemon/Locality_Manager_Impl.cpp1142
1 files changed, 0 insertions, 1142 deletions
diff --git a/DAnCE/dance/LocalityManager/Daemon/Locality_Manager_Impl.cpp b/DAnCE/dance/LocalityManager/Daemon/Locality_Manager_Impl.cpp
deleted file mode 100644
index 32942a7e661..00000000000
--- a/DAnCE/dance/LocalityManager/Daemon/Locality_Manager_Impl.cpp
+++ /dev/null
@@ -1,1142 +0,0 @@
-// -*- C++ -*-
-#include "Locality_Manager_Impl.h"
-#include "dance/Logger/Log_Macros.h"
-
-#include "dance/DAnCE_Utility.h"
-#include "dance/DAnCE_PropertiesC.h"
-#include "dance/LocalityManager/Handler/Plugin_Conf.h"
-#include "dance/LocalityManager/Scheduler/Plugin_Manager.h"
-#include "dance/LocalityManager/Scheduler/Deployment_Completion.h"
-#include "dance/LocalityManager/Scheduler/Events/Install.h"
-#include "dance/LocalityManager/Scheduler/Events/Connect.h"
-#include "dance/LocalityManager/Scheduler/Events/Endpoint.h"
-#include "dance/LocalityManager/Scheduler/Events/Start.h"
-#include "dance/LocalityManager/Scheduler/Events/Configured.h"
-#include "dance/LocalityManager/Scheduler/Events/Remove.h"
-#include "dance/LocalityManager/Scheduler/Events/Passivate.h"
-#include "dance/LocalityManager/Scheduler/Events/Disconnect.h"
-#include "ace/Auto_Ptr.h"
-
-namespace DAnCE
-{
- // Implementation skeleton constructor
- LocalityManager_i::LocalityManager_i (const ACE_TString &uuid,
- std::list < std::string > plugin_config,
- CORBA::ORB_ptr orb,
- PortableServer::POA_ptr poa)
- : uuid_ (uuid),
- plugin_config_files_ (plugin_config),
- orb_ (CORBA::ORB::_duplicate (orb)),
- poa_ (PortableServer::POA::_duplicate (poa)),
- spawn_delay_ (30)
- {
- DANCE_TRACE ("LocalityManager_i::LocalityManager_i");
- this->scheduler_.activate_scheduler (0);
- }
-
- LocalityManager_i::~LocalityManager_i (void)
- {
- DANCE_TRACE ("LocalityManager_i::~LocalityManager_i");
-
- this->scheduler_.terminate_scheduler ();
-
- PLUGIN_MANAGER::instance ()->set_orb (::CORBA::ORB::_nil ());
- }
-
- void
- LocalityManager_i::init (const Deployment::Properties &props)
- {
- DANCE_TRACE ("LocalityManager_i::init");
-
- DANCE_DEBUG (DANCE_LOG_MAJOR_DEBUG_INFO,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::init - ")
- ACE_TEXT ("Received %u properties from init\n"),
- props.length ()));
-
- PLUGIN_MANAGER::instance ()->set_configuration (props);
-
- PLUGIN_MANAGER::instance ()->set_orb (this->orb_.in ());
-
- Plugin_Configurator config;
-
- DANCE_DEBUG (DANCE_LOG_DETAILED_TRACE,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::init - ")
- ACE_TEXT ("Loading %u plugin configuration files\n"),
- this->plugin_config_files_.size ()));
-
- for (std::list < std::string >::const_iterator i =
- this->plugin_config_files_.begin ();
- i != this->plugin_config_files_.end (); ++i)
- {
- DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::init - ")
- ACE_TEXT ("Loading plugin file <%C>\n"),
- i->c_str ()));
- config.load_from_text_file (ACE_TEXT_CHAR_TO_TCHAR (i->c_str ()));
- }
-
- if (props.length () != 0)
- {
- if (DAnCE::Utility::get_property_value (DAnCE::LOCALITY_TIMEOUT,
- props,
- this->spawn_delay_))
- {
- DANCE_DEBUG (DANCE_LOG_MAJOR_DEBUG_INFO,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::init - ")
- ACE_TEXT ("Using provided spawn delay %u\n"),
- this->spawn_delay_));
- }
-
- DANCE_DEBUG (DANCE_LOG_TRACE,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::init - ")
- ACE_TEXT ("Number of LM configuration properties: %u\n"),
- props.length ()));
-
- for (CORBA::ULong i = 0; i < props.length (); ++i)
- {
- DANCE_DEBUG (DANCE_LOG_TRACE,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::init - ")
- ACE_TEXT ("Looking up configuration handler for <%C>\n"),
- props[i].name.in ()));
-
- ::DAnCE::LocalityConfiguration_var config =
- PLUGIN_MANAGER::instance ()->get_configuration_handler (props[i].name.in ());
-
- if (config.in ())
- {
- DANCE_DEBUG (DANCE_LOG_DETAILED_TRACE,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::init - ")
- ACE_TEXT ("Invoking configuration handler for <%C>\n"),
- props[i].name.in ()));
- config->configure (props[i]);
- }
- }
- }
- else
- {
- DANCE_ERROR (DANCE_LOG_MAJOR_DEBUG_INFO,
- (LM_WARNING, DLINFO
- ACE_TEXT ("LocalityManager_i::init - ")
- ACE_TEXT ("Warning: No configuration properties\n")));
- }
- }
-
- ::Deployment::Properties *
- LocalityManager_i::configuration (void)
- {
- DANCE_TRACE ("LocalityManager_i::configuration");
- throw CORBA::NO_IMPLEMENT ();
- }
-
- ::Deployment::ApplicationManager_ptr
- LocalityManager_i::preparePlan (const ::Deployment::DeploymentPlan & plan,
- ::Deployment::ResourceCommitmentManager_ptr)
- {
- DANCE_TRACE ("LocalityManager_i::preparePlan");
-
- this->plan_ = plan;
-
- Plugin_Manager::INTERCEPTORS interceptors =
- PLUGIN_MANAGER::instance ()->fetch_interceptors ();
-
- for (Plugin_Manager::INTERCEPTORS::iterator i = interceptors.begin ();
- i != interceptors.end ();
- ++i)
- {
- if (!CORBA::is_nil (*i))
- {
- (*i)->preprocess_plan (this->plan_);
- }
- }
-
- // populate the impl_type_table.
- for (CORBA::ULong i = 0;
- i < plan_.instance.length ();
- ++i)
- {
- CORBA::ULong const implRef = plan.instance[i].implementationRef;
-
- const char *instance_type =
- Utility::get_instance_type (plan.implementation[implRef].execParameter);
-
- instance_handlers_[instance_type].push_back (i);
- }
-
- return this->_this ();
- }
-
- ::Deployment::Application_ptr
- LocalityManager_i::startLaunch (const ::Deployment::Properties &prop,
- ::Deployment::Connections_out providedReference)
- {
- DANCE_TRACE ("LocalityManager_i::startLaunch");
-
- PLUGIN_MANAGER::instance ()->get_installation_order (this->handler_order_);
-
- this->install_instances (prop);
-
- this->collect_references (providedReference);
-
- return this->_this ();
- }
-
- void
- LocalityManager_i::install_instances (const ::Deployment::Properties &)
- {
- DANCE_TRACE ("LocalityManager_i::install_instances");
-
- CORBA::ULong dispatched (0);
-
- Deployment_Completion completion (this->scheduler_);
-
- for (Plugin_Manager::INSTALL_ORDER::const_iterator i = this->handler_order_.begin ();
- i != this->handler_order_.end ();
- ++i)
- {
- DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
- (LM_TRACE, DLINFO
- ACE_TEXT ("LocalityManager_i::install_instances - ")
- ACE_TEXT ("Starting installation of %C type instances\n"),
- i->c_str ()));
-
- INSTANCE_LIST &inst_list = this->instance_handlers_[*i];
-
- for (INSTANCE_LIST::const_iterator j = inst_list.begin ();
- j != inst_list.end ();
- ++j)
- {
- DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
- (LM_TRACE, DLINFO
- ACE_TEXT ("LocalityManager_i::install_instances - ")
- ACE_TEXT ("Starting installation of instance %C\n"),
- this->plan_.instance[*j].name.in ()));
-
- Install_Instance *event (0);
- Event_Future result;
- completion.accept (result);
-
- ACE_NEW_THROW_EX (event,
- Install_Instance (this->plan_,
- *j,
- i->c_str (),
- result),
- CORBA::NO_MEMORY ());
-
- this->scheduler_.schedule_event (event);
- ++dispatched;
- }
- }
-
- ACE_Time_Value tv (ACE_OS::gettimeofday () + ACE_Time_Value (this->spawn_delay_));
-
- if (!completion.wait_on_completion (&tv))
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::install_instances - ")
- ACE_TEXT ("Timed out while waiting on completion of scheduler\n")));
- }
-
- tv = ACE_Time_Value::zero;
-
- Event_List completed_events;
- completion.completed_events (completed_events);
-
- if (completed_events.size () != dispatched)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_WARNING, DLINFO
- ACE_TEXT ("LocalityManager_i::install_instances - ")
- ACE_TEXT ("Received only %u completed events, expected %u\n"),
- dispatched,
- completed_events.size ()));
- }
-
- for (Event_List::iterator i = completed_events.begin ();
- i != completed_events.end ();
- ++i)
- {
- Event_Result event;
- if (i->get (event, &tv) != 0)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::install_instances - ")
- ACE_TEXT ("Failed to get future value for current instance\n")));
- continue;
- }
-
- if (event.exception_ &&
- !(DAnCE::Utility::extract_and_throw_exception < Deployment::StartError >
- (event.contents_.in ()) ||
- DAnCE::Utility::extract_and_throw_exception < Deployment::InvalidProperty >
- (event.contents_.in ()) ||
- DAnCE::Utility::extract_and_throw_exception < Deployment::InvalidNodeExecParameter >
- (event.contents_.in ()) ||
- DAnCE::Utility::extract_and_throw_exception < Deployment::InvalidComponentExecParameter >
- (event.contents_.in ()))
- )
- {
- DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::install_instances - ")
- ACE_TEXT ("Error: Unknown exception propagated\n")));
- throw ::Deployment::StartError (event.id_.c_str (),
- "Unknown exception");
- }
-
- DANCE_DEBUG (DANCE_LOG_MAJOR_EVENT,
- (LM_INFO, DLINFO
- ACE_TEXT ("LocalityManager_i::install_instances - ")
- ACE_TEXT ("Instance <%C> successfully deployed\n"),
- event.id_.c_str ()));
-
- this->instance_references_[event.id_] = event.contents_;
- }
- }
-
- void
- LocalityManager_i::collect_references (::Deployment::Connections_out &providedReference)
- {
- DANCE_TRACE ("LocalityManager_i::collect_references");
-
- CORBA::ULong dispatched (0);
- Deployment_Completion completion (this->scheduler_);
-
- ::Deployment::Connections *conn_cmp = 0;
- ACE_NEW_THROW_EX (conn_cmp,
- ::Deployment::Connections (this->plan_.connection.length ()),
- CORBA::NO_MEMORY ());
- ACE_Auto_Ptr< ::Deployment::Connections > conn_safe (conn_cmp);
- CORBA::ULong conn_pos (0);
-
- for (CORBA::ULong i = 0;
- i < this->plan_.connection.length ();
- ++i)
- {
- const ::Deployment::PlanConnectionDescription &conn =
- this->plan_.connection[i];
-
- if (conn.externalReference.length () > 0)
- {
- // connections with external reference endpoints
- // we do not know how to resolve here; we just
- // collect them and allow connect handlers/interceptors
- // to handle them later
- conn_cmp->length (conn_pos + 1);
- (*conn_cmp)[conn_pos].name = conn.name.in ();
- (*conn_cmp)[conn_pos].endpoint.length (1);
- (*conn_cmp)[conn_pos].endpoint[0] = CORBA::Object::_nil ();
- ++conn_pos;
- }
- else
- for (CORBA::ULong j = 0;
- j != conn.internalEndpoint.length ();
- ++j)
- {
- if (conn.internalEndpoint[j].provider)
- {
- CORBA::ULong instRef =
- conn.internalEndpoint[j].instanceRef;
- CORBA::ULong implRef =
- this->plan_.instance[instRef].implementationRef;
-
- const char *inst_type =
- Utility::get_instance_type (this->plan_.implementation[implRef].execParameter);
-
- Endpoint_Reference *event (0);
- Event_Future result;
- completion.accept (result);
-
- ACE_NEW_THROW_EX (event,
- Endpoint_Reference (this->plan_,
- i,
- inst_type,
- result),
- CORBA::NO_MEMORY ());
-
- this->scheduler_.schedule_event (event);
- ++dispatched;
- }
- }
- }
-
- ACE_Time_Value tv (ACE_OS::gettimeofday () + ACE_Time_Value (this->spawn_delay_));
-
- if (!completion.wait_on_completion (&tv))
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::collect_references - ")
- ACE_TEXT ("Timed out while waiting on completion of scheduler\n")));
- }
-
- tv = ACE_Time_Value::zero;
-
- Event_List completed_events;
- completion.completed_events (completed_events);
-
- if (completed_events.size () != dispatched)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_WARNING, DLINFO
- ACE_TEXT ("LocalityManager_i::collect_references - ")
- ACE_TEXT ("Received only %u completed events, expected %u\n"),
- dispatched,
- completed_events.size ()));
- }
-
- for (Event_List::iterator i = completed_events.begin ();
- i != completed_events.end ();
- ++i)
- {
- Event_Result event;
- if (i->get (event, &tv) != 0)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::collect_references - ")
- ACE_TEXT ("Failed to get future value for current instance\n")));
- continue;
- }
-
- if (event.exception_ &&
- !(DAnCE::Utility::extract_and_throw_exception < Deployment::StartError >
- (event.contents_.in ()) ||
- DAnCE::Utility::extract_and_throw_exception < Deployment::InvalidProperty >
- (event.contents_.in ())))
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::collect_references - ")
- ACE_TEXT ("Error: Unknown exception propagated\n")));
- throw ::Deployment::StartError (event.id_.c_str (),
- "Unknown exception");
- }
-
- CORBA::Object_var obj_ref;
-
- if (event.contents_.ptr () != 0)
- event.contents_ >>= CORBA::Any::to_object (obj_ref);
- else
- {
- DANCE_DEBUG (DANCE_LOG_MAJOR_DEBUG_INFO,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::collect_references - ")
- ACE_TEXT ("No reference returned for connection <%C>\n"),
- event.id_.c_str ()));
- }
-
- conn_cmp->length (conn_pos + 1);
- (*conn_cmp)[conn_pos].name = event.id_.c_str ();
- (*conn_cmp)[conn_pos].endpoint.length (1);
- (*conn_cmp)[conn_pos].endpoint[0] = obj_ref;
- ++conn_pos;
- }
-
- providedReference = conn_safe.release ();
- }
-
- void
- LocalityManager_i::finishLaunch (const ::Deployment::Connections & providedReference,
- ::CORBA::Boolean start)
- {
- DANCE_TRACE ("LocalityManager_i::finishLaunch");
-
- typedef std::map < std::string, CORBA::ULong > ConnMap;
- ConnMap conns;
-
- Deployment_Completion completion (this->scheduler_);
-
- DANCE_DEBUG (DANCE_LOG_MINOR_EVENT,
- (LM_TRACE, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Starting finishLaunch, received %u references, ")
- ACE_TEXT ("have %u connections\n"),
- providedReference.length (),
- this->plan_.connection.length ()
- ));
-
- for (CORBA::ULong i = 0; i < this->plan_.connection.length (); ++i)
- {
- conns[this->plan_.connection[i].name.in ()] = i;
- }
-
- CORBA::ULong dispatched (0);
-
- for (CORBA::ULong i = 0; i < providedReference.length (); ++i)
- {
- const char * name = providedReference[i].name.in ();
- ConnMap::const_iterator conn_ref = conns.find (name);
-
- if (conn_ref == conns.end ())
- continue;
-
- CORBA::ULong j (0);
-
- const ::Deployment::PlanConnectionDescription &conn =
- this->plan_.connection[conn_ref->second];
-
- DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
- (LM_TRACE, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Connection <%C> has %u endpoints\n"),
- conn.name.in (),
- conn.internalEndpoint.length ()));
-
- if (conn.internalEndpoint.length () == 2)
- {
- if (!conn.internalEndpoint[1].provider)
- j = 1;
- }
- else if (conn.internalEndpoint[0].provider &&
- conn.externalReference.length () == 0)
- {
- DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
- (LM_TRACE, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Skipping connection <%C>\n"),
- conn.name.in ()));
- continue;
- }
-
- DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Starting connection <%C>\n"),
- name));
-
- CORBA::Any reference;
-
- reference <<= providedReference[i].endpoint[0];
-
- CORBA::ULong instRef =
- conn.internalEndpoint[j].instanceRef;
- CORBA::ULong implRef =
- this->plan_.instance[instRef].implementationRef;
-
- const char *inst_type =
- Utility::get_instance_type (this->plan_.implementation[implRef].execParameter);
-
- Connect_Instance *event (0);
- Event_Future result;
- completion.accept (result);
-
- ACE_NEW_THROW_EX (event,
- Connect_Instance (this->plan_,
- conn_ref->second,
- reference,
- inst_type,
- result),
- CORBA::NO_MEMORY ());
-
- this->scheduler_.schedule_event (event);
- ++dispatched;
- }
-
- ACE_Time_Value tv (ACE_OS::gettimeofday () + ACE_Time_Value (this->spawn_delay_));
-
- if (!completion.wait_on_completion (&tv))
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Timed out while waiting on completion of scheduler\n")));
- }
-
- tv = ACE_Time_Value::zero;
-
- Event_List completed_events;
- completion.completed_events (completed_events);
-
- if (completed_events.size () != dispatched)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_WARNING, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Received only %u completed events, expected %u\n"),
- dispatched,
- completed_events.size ()));
- }
-
- for (Event_List::iterator i = completed_events.begin ();
- i != completed_events.end ();
- ++i)
- {
- Event_Result event;
- if (i->get (event, &tv) != 0)
- {
- DANCE_ERROR (DANCE_LOG_ERROR, (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Failed to get future value for current instance\n")));
- continue;
- }
-
- if (event.exception_ &&
- !(DAnCE::Utility::extract_and_throw_exception < Deployment::StartError >
- (event.contents_.in ()) ||
- DAnCE::Utility::extract_and_throw_exception < Deployment::InvalidConnection >
- (event.contents_.in ()))
- )
- {
- DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR, (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Error: Unknown exception propagated\n")));
- throw ::Deployment::StartError (event.id_.c_str (),
- "Unknown exception");
- }
- }
-
- dispatched = 0;
-
- for (Plugin_Manager::INSTALL_ORDER::const_iterator i = this->handler_order_.begin ();
- i != this->handler_order_.end ();
- ++i)
- {
- INSTANCE_LIST &inst_list = this->instance_handlers_[*i];
-
- for (INSTANCE_LIST::const_iterator j = inst_list.begin ();
- j != inst_list.end ();
- ++j)
- {
- Instance_Configured *event (0);
- Event_Future result;
- completion.accept (result);
-
- ACE_NEW_THROW_EX (event,
- Instance_Configured (this->plan_,
- *j,
- i->c_str (),
- result),
- CORBA::NO_MEMORY ());
-
- this->scheduler_.schedule_event (event);
- ++dispatched;
- }
- }
-
- tv = ACE_OS::gettimeofday () + ACE_Time_Value (this->spawn_delay_);
-
- if (!completion.wait_on_completion (&tv))
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Timed out while waiting on completion of scheduler\n")));
- }
-
- tv = ACE_Time_Value::zero;
-
- completion.completed_events (completed_events);
-
- if (completed_events.size () != dispatched)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_WARNING, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Received only %u completed events, expected %u\n"),
- dispatched,
- completed_events.size ()));
- }
-
- for (Event_List::iterator i = completed_events.begin ();
- i != completed_events.end ();
- ++i)
- {
- Event_Result event;
- if (i->get (event, &tv) != 0)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Failed to get future value for current instance\n")));
- continue;
- }
-
- if (event.exception_ &&
- !(DAnCE::Utility::extract_and_throw_exception < Deployment::StartError >
- (event.contents_.in ()))
- )
- {
- DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::finishLaunch - ")
- ACE_TEXT ("Error: Unknown exception propagated\n")));
- throw ::Deployment::StartError (event.id_.c_str (),
- "Unknown exception from instance_configured");
- }
- }
-
- if (start)
- this->start ();
- }
-
- void
- LocalityManager_i::disconnect_connections (void)
- {
- DANCE_TRACE ("LocalityManager_i::disconnect_connections");
-
- Deployment_Completion completion (this->scheduler_);
-
- DANCE_DEBUG (DANCE_LOG_MINOR_EVENT,
- (LM_TRACE, DLINFO
- ACE_TEXT ("LocalityManager_i::disconnect_connections - ")
- ACE_TEXT ("Starting disconnect_connections, ")
- ACE_TEXT ("have %u connections\n"),
- this->plan_.connection.length ()
- ));
-
- CORBA::ULong dispatched (0);
-
- for (CORBA::ULong i = 0; i < this->plan_.connection.length (); ++i)
- {
- const char * name = this->plan_.connection[i].name.in ();
- CORBA::ULong j (0);
-
- const ::Deployment::PlanConnectionDescription &conn =
- this->plan_.connection[i];
-
- DANCE_DEBUG (DANCE_LOG_MAJOR_DEBUG_INFO, (LM_TRACE, DLINFO
- ACE_TEXT ("LocalityManager_i::disconnect_connections - ")
- ACE_TEXT ("Connection <%C> has %u endpoints\n"),
- conn.name.in (),
- conn.internalEndpoint.length ()));
-
- if (conn.internalEndpoint.length () == 2)
- {
- if (conn.internalEndpoint[1].provider)
- j = 1;
- }
- else if (conn.internalEndpoint[0].provider &&
- conn.externalReference.length () == 0)
- {
- DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
- (LM_TRACE, DLINFO
- ACE_TEXT ("LocalityManager_i::disconnect_connections - ")
- ACE_TEXT ("Skipping connection <%C>\n"),
- conn.name.in ()));
- continue;
- }
-
- DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::disconnect_connections - ")
- ACE_TEXT ("Starting disconnect connection <%C>\n"),
- name));
-
- CORBA::ULong instRef =
- conn.internalEndpoint[j].instanceRef;
- CORBA::ULong implRef =
- this->plan_.instance[instRef].implementationRef;
-
- const char *inst_type =
- Utility::get_instance_type (this->plan_.implementation[implRef].execParameter);
-
- Disconnect_Instance *event (0);
- Event_Future result;
- completion.accept (result);
-
- ACE_NEW_THROW_EX (event,
- Disconnect_Instance (this->plan_,
- i,
- inst_type,
- result),
- CORBA::NO_MEMORY ());
-
- this->scheduler_.schedule_event (event);
- ++dispatched;
- }
-
- ACE_Time_Value tv (ACE_OS::gettimeofday () + ACE_Time_Value (this->spawn_delay_));
-
- if (!completion.wait_on_completion (&tv))
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::disconnect_connections - ")
- ACE_TEXT ("Timed out while waiting on completion of scheduler\n")));
- }
-
- tv = ACE_Time_Value::zero;
-
- Event_List completed_events;
- completion.completed_events (completed_events);
-
- if (completed_events.size () != dispatched)
- {
- DANCE_ERROR (DANCE_LOG_WARNING,
- (LM_WARNING, DLINFO
- ACE_TEXT ("LocalityManager_i::disconnect_connections - ")
- ACE_TEXT ("Received only %u completed events, expected %u\n"),
- dispatched,
- completed_events.size ()));
- }
-
- for (Event_List::iterator i = completed_events.begin ();
- i != completed_events.end ();
- ++i)
- {
- Event_Result event;
- if (i->get (event, &tv) != 0)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::disconnect_connections - ")
- ACE_TEXT ("Failed to get future value for current instance\n")));
- continue;
- }
-
- if (event.exception_ &&
- !(DAnCE::Utility::extract_and_throw_exception < Deployment::StartError >
- (event.contents_.in ()) ||
- DAnCE::Utility::extract_and_throw_exception < Deployment::InvalidConnection >
- (event.contents_.in ()))
- )
- {
- DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::disconnect_connections - ")
- ACE_TEXT ("Error: Unknown exception propagated\n")));
- throw ::Deployment::StartError (event.id_.c_str (),
- "Unknown exception");
- }
- }
- }
-
- void
- LocalityManager_i::start (void)
- {
- DANCE_TRACE ("LocalityManager_i::start");
-
- Deployment_Completion completion (this->scheduler_);
- CORBA::ULong dispatched (0);
-
- for (Plugin_Manager::INSTALL_ORDER::const_iterator i = this->handler_order_.begin ();
- i != this->handler_order_.end ();
- ++i)
- {
- INSTANCE_LIST &inst_list = this->instance_handlers_[*i];
-
- for (INSTANCE_LIST::const_iterator j = inst_list.begin ();
- j != inst_list.end ();
- ++j)
- {
- DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::start - ")
- ACE_TEXT ("Scheduling start for instance %C\n"),
- plan_.instance[*j].name.in ()));
-
- Start_Instance *event (0);
- Event_Future result;
- completion.accept (result);
-
- const char *name = this->plan_.instance[*j].name.in ();
-
- ACE_NEW_THROW_EX (event,
- Start_Instance (this->plan_,
- *j,
- this->instance_references_[name].in (),
- i->c_str (),
- result),
- CORBA::NO_MEMORY ());
-
- this->scheduler_.schedule_event (event);
- ++dispatched;
- }
- }
-
- ACE_Time_Value tv (ACE_OS::gettimeofday () + ACE_Time_Value (this->spawn_delay_));
-
- if (!completion.wait_on_completion (&tv))
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::start - ")
- ACE_TEXT ("Timed out while waiting on completion of scheduler\n")));
- }
-
- tv = ACE_Time_Value::zero;
-
- Event_List completed_events;
- completion.completed_events (completed_events);
-
- if (completed_events.size () != dispatched)
- {
- DANCE_ERROR (DANCE_LOG_WARNING,
- (LM_WARNING, DLINFO
- ACE_TEXT ("LocalityManager_i::start - ")
- ACE_TEXT ("Received only %u completed events, expected %u\n"),
- dispatched,
- completed_events.size ()));
- }
-
- for (Event_List::iterator i = completed_events.begin ();
- i != completed_events.end ();
- ++i)
- {
- Event_Result event;
- if (i->get (event, &tv) != 0)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::start - ")
- ACE_TEXT ("Failed to get future value for current instance\n")));
- continue;
- }
-
- if (event.exception_ &&
- !(DAnCE::Utility::extract_and_throw_exception < Deployment::StartError >
- (event.contents_.in ()))
- )
- {
- DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::start - ")
- ACE_TEXT ("Error: Unknown exception propagated\n")));
- throw ::Deployment::StartError (event.id_.c_str (),
- "Unknown exception");
- }
-
- DANCE_DEBUG (DANCE_LOG_MAJOR_EVENT,
- (LM_INFO, DLINFO
- ACE_TEXT ("LocalityManager_i::start - ")
- ACE_TEXT ("Instance <%C> successfully activated\n"),
- event.id_.c_str ()));
- }
- }
-
- void
- LocalityManager_i::destroyApplication (::Deployment::Application_ptr)
- {
- DANCE_TRACE ("LocalityManager_i::destroyApplication");
-
- Deployment_Completion completion (this->scheduler_);
- CORBA::ULong dispatched (0);
-
- for (size_t i = this->handler_order_.size ();
- i > 0;
- --i)
- {
- INSTANCE_LIST &inst_list = this->instance_handlers_[this->handler_order_[i-1]];
-
- for (INSTANCE_LIST::const_iterator j = inst_list.begin ();
- j != inst_list.end ();
- ++j)
- {
- DANCE_DEBUG (DANCE_LOG_EVENT_TRACE,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Scheduling passivation for instance %C\n"),
- this->plan_.instance[*j].name.in ()));
-
- Passivate_Instance *event (0);
- Event_Future result;
- completion.accept (result);
-
- const char *name = this->plan_.instance[*j].name.in ();
-
- ACE_NEW_THROW_EX (event,
- Passivate_Instance (this->plan_,
- *j,
- this->instance_references_[name].in (),
- this->handler_order_[i-1].c_str (),
- result),
- CORBA::NO_MEMORY ());
-
- this->scheduler_.schedule_event (event);
- ++dispatched;
- }
- }
-
- ACE_Time_Value tv (ACE_OS::gettimeofday () + ACE_Time_Value (this->spawn_delay_));
-
- if (!completion.wait_on_completion (&tv))
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Timed out while waiting on completion of scheduler\n")));
- }
-
- tv = ACE_Time_Value::zero;
-
- Event_List completed_events;
- completion.completed_events (completed_events);
-
- if (completed_events.size () != dispatched)
- {
- DANCE_ERROR (DANCE_LOG_WARNING,
- (LM_WARNING, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Received only %u completed events, expected %u\n"),
- dispatched,
- completed_events.size ()));
- }
-
- dispatched = 0;
-
- for (Event_List::iterator i = completed_events.begin ();
- i != completed_events.end ();
- ++i)
- {
- Event_Result event;
- if (i->get (event, &tv) != 0)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Failed to get future value for current instance\n")));
- continue;
- }
-
- if (event.exception_ &&
- !(DAnCE::Utility::extract_and_throw_exception < Deployment::StopError >
- (event.contents_.in ()))
- )
- {
- DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Error: Unknown exception propagated\n")));
- throw ::Deployment::StopError (event.id_.c_str (),
- "Unknown exception");
- }
-
- DANCE_DEBUG (DANCE_LOG_MINOR_EVENT,
- (LM_INFO, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Instance <%C> successfully passivated\n"),
- event.id_.c_str ()));
- }
-
- // Now disconnect all connections in the plan
- this->disconnect_connections();
-
- for (size_t i = this->handler_order_.size ();
- i > 0;
- --i)
- {
- INSTANCE_LIST &inst_list = this->instance_handlers_[this->handler_order_[i-1]];
-
- for (INSTANCE_LIST::const_iterator j = inst_list.begin ();
- j != inst_list.end ();
- ++j)
- {
- Remove_Instance *event (0);
- Event_Future result;
- completion.accept (result);
-
- const char *name = this->plan_.instance[*j].name.in ();
-
- REFERENCE_MAP::iterator ref = this->instance_references_.find (name);
-
- ACE_NEW_THROW_EX (event,
- Remove_Instance (this->plan_,
- *j,
- ref->second.in (),
- this->handler_order_[i-1].c_str (),
- result),
- CORBA::NO_MEMORY ());
-
- this->instance_references_.erase (ref);
-
- this->scheduler_.schedule_event (event);
- ++dispatched;
- }
- }
-
- tv = ACE_OS::gettimeofday () + ACE_Time_Value (this->spawn_delay_);
-
- if (!completion.wait_on_completion (&tv))
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Timed out while waiting on completion of scheduler\n")));
- }
-
- tv = ACE_Time_Value::zero;
-
- completion.completed_events (completed_events);
-
- if (completed_events.size () != dispatched)
- {
- DANCE_ERROR (DANCE_LOG_WARNING,
- (LM_WARNING, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Received only %u completed events, expected %u\n"),
- dispatched,
- completed_events.size ()));
- }
-
- dispatched = 0;
-
- for (Event_List::iterator i = completed_events.begin ();
- i != completed_events.end ();
- ++i)
- {
- Event_Result event;
- if (i->get (event, &tv) != 0)
- {
- DANCE_ERROR (DANCE_LOG_ERROR,
- (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Failed to get future value for current instance\n")));
- continue;
- }
-
- if (event.exception_ &&
- !(DAnCE::Utility::extract_and_throw_exception < Deployment::StopError >
- (event.contents_.in ()))
- )
- {
- DANCE_ERROR (DANCE_LOG_TERMINAL_ERROR, (LM_ERROR, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Error: Unknown exception propagated\n")));
- throw ::Deployment::StopError (event.id_.c_str (),
- "Unknown exception");
- }
-
- DANCE_DEBUG (DANCE_LOG_MINOR_EVENT, (LM_INFO, DLINFO
- ACE_TEXT ("LocalityManager_i::destroyApplication - ")
- ACE_TEXT ("Instance <%C> successfully removed\n"),
- event.id_.c_str ()));
- }
- }
-
-
- void
- LocalityManager_i::destroyManager (::Deployment::ApplicationManager_ptr)
- {
- DANCE_TRACE ("LocalityManager_i::destroyManager");
- // Add your implementation here
- }
-
-
- void
- LocalityManager_i::shutdown (void)
- {
- DANCE_TRACE ("LocalityManager_i::shutdown");
-
- DANCE_DEBUG (DANCE_LOG_MAJOR_EVENT,
- (LM_DEBUG, DLINFO
- ACE_TEXT ("DAnCE LocalityManager shutdown request received for UUID <%C>\n"),
- uuid_.c_str ()));
-
- this->orb_->shutdown ();
-
- // Explicitly close the plugin manager to release memory.
- PLUGIN_MANAGER::close ();
-
- this->poa_ = PortableServer::POA::_nil ();
- this->orb_ = CORBA::ORB::_nil ();
- }
-}