summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-01-20 01:04:02 +0000
committerdengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-01-20 01:04:02 +0000
commit692f1cadd0e96dc23f02266b8ff3c427ca177c4c (patch)
tree7249c8701072503a4023dc9784c54a6835b6aa31
parentb3bc1526b1a63974207b49f16c9a8f135de4fc62 (diff)
downloadATCD-692f1cadd0e96dc23f02266b8ff3c427ca177c4c.tar.gz
*** empty log message ***
-rw-r--r--TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp71
-rw-r--r--TAO/CIAO/DAnCE/ExecutionManager/DAM_Map.cpp6
-rw-r--r--TAO/CIAO/DAnCE/ExecutionManager/DAM_Map.h2
-rw-r--r--TAO/CIAO/DAnCE/ExecutionManager/Execution_Manager_Impl.cpp8
-rw-r--r--TAO/CIAO/DAnCE/ExecutionManager/Execution_Manager_Impl.h6
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp5
-rw-r--r--TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager.mpc3
-rw-r--r--TAO/CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp44
-rw-r--r--TAO/CIAO/DAnCE/NodeManager/NodeManager_Impl.h8
-rw-r--r--TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher.mpc5
-rw-r--r--TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp35
-rw-r--r--TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.h1
-rw-r--r--TAO/CIAO/ciao/Deployment.idl22
13 files changed, 161 insertions, 55 deletions
diff --git a/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp b/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp
index 46563fe6e7e..3d989ddbc26 100644
--- a/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp
+++ b/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp
@@ -1059,12 +1059,8 @@ destroyApplication (ACE_ENV_SINGLE_ARG_DECL)
CIAO_TRACE("CIAO::DomainApplicationManager_Impl::destroyApplication");
ACE_TRY
{
- CORBA::ULong i;
-
- // Invoke ciao_passivate () operation on each cached NodeApplication object.
- for (i = 0; i < this->num_child_plans_; ++i)
+ for (CORBA::ULong i = 0; i < this->num_child_plans_; ++i)
{
- // Get the NodeApplication object references.
ACE_Hash_Map_Entry <ACE_CString, Chained_Artifacts> *entry = 0;
if (this->artifact_map_.find (this->node_manager_names_[i],
@@ -1072,52 +1068,59 @@ destroyApplication (ACE_ENV_SINGLE_ARG_DECL)
{
ACE_ERROR ((LM_ERROR,
"DAnCE (%P|%t) DomainApplicationManager_Impl.cpp -"
- "CIAO::DomainApplicationManager_Impl::destroyApplication -"
+ "CIAO::DomainApplicationManager_Impl::destroyApplication -"
"ERROR while finding the node specific plan "
"for the node [%s] \n",
this->node_manager_names_[i].c_str ()));
- ACE_TRY_THROW (Deployment::StopError ());
+ ACE_CString error
+ ("Unable to resolve a reference to NodeManager: ");
+ error += this->node_manager_names_[i];
+
+ ACE_TRY_THROW
+ (Deployment::StopError
+ ("DomainApplicationManager_Impl::destroyApplication",
+ error.c_str ()));
}
+ // Invoke ciao_passivate () operation on each cached NodeApplication object.
::Deployment::NodeApplication_ptr my_na =
(entry->int_id_).node_application_.in ();
my_na->ciao_passivate ();
- ACE_TRY_CHECK;
- }
- // Invoke destroyManager() operation on each cached
- // NodeManager object.
- for (i = 0; i < this->num_child_plans_; ++i)
- {
- // Get the NodeManager and NodeApplicationManager object references.
- ACE_Hash_Map_Entry <ACE_CString, Chained_Artifacts> *entry;
+ Deployment::Connections * my_connections =
+ this->get_outgoing_connections (
+ (entry->int_id_).child_plan_.in (),
+ true, // yes, get *all* the connections
+ true // yes, we search the current plan
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
- if (this->artifact_map_.find (this->node_manager_names_[i],
- entry) != 0)
+ // Invoke finishLaunch() on NodeApplication to remove bindings.
+ if (my_connections->length () != 0)
{
- ACE_ERROR ((LM_ERROR,
- "DAnCE (%P|%t) DomainApplicationManager_Impl.cpp -"
- "CIAO::DomainApplicationManager_Impl::destroyApplication -"
- "ERROR while finding the node specific plan "
- "for the node [%s] \n",
- this->node_manager_names_[i].c_str ()));
-
- ACE_TRY_THROW (Deployment::StopError ());
+ entry->int_id_.node_application_->finishLaunch
+ (*my_connections,
+ start,
+ true // "true" => remove new connections only
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
}
- ::Deployment::NodeApplicationManager_ptr
- my_node_application_manager =
- (entry->int_id_).node_application_manager_.in ();
+ // Invoke destroyPlan() operation on the NodeManager
+ Deployment::NodeManager_var
+ my_node_manager = (entry->int_id_).node_manager_;
- // Invoke destoryApplication() operation on the NodeApplicationManger.
- // Since we have the first arg is not used by NAM anyway.
- my_node_application_manager->destroyApplication
- (0
- ACE_ENV_ARG_PARAMETER);
+ my_node_manager->destroyPlan ((entry->int_id_).child_plan_
+ ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
+
+ // Invoke destroyManager () operation on the NodeManager, since we need
+ // to clean up all the NodeApplicationManagers associated with this deployment
+ // plan (one NodeApplicationManager per Node per plan).
+
}
ACE_CATCHANY
{
@@ -1216,7 +1219,7 @@ perform_redeployment (
// node level, the connections are cached within the NodeApplication *and*
// Container, then we should modify the implementation of the
// <finishLaunch> on the NodeApplication to accomplish this.
- this->finishLaunch (true, true); // true means start activtion also.
+ this->finishLaunch (true, true); // true means start activation also.
// ture means "ReDAC" is desired
}
ACE_CATCHANY
diff --git a/TAO/CIAO/DAnCE/ExecutionManager/DAM_Map.cpp b/TAO/CIAO/DAnCE/ExecutionManager/DAM_Map.cpp
index c9cf6be6adf..759a1c9bc1b 100644
--- a/TAO/CIAO/DAnCE/ExecutionManager/DAM_Map.cpp
+++ b/TAO/CIAO/DAnCE/ExecutionManager/DAM_Map.cpp
@@ -15,6 +15,12 @@ namespace CIAO
{
}
+ size_t
+ DAM_Map::size (void)
+ {
+ return this->map_.current_size ();
+ }
+
bool
DAM_Map::is_plan_available (const ACE_CString &str)
{
diff --git a/TAO/CIAO/DAnCE/ExecutionManager/DAM_Map.h b/TAO/CIAO/DAnCE/ExecutionManager/DAM_Map.h
index 21d8dee5de9..2be163c6908 100644
--- a/TAO/CIAO/DAnCE/ExecutionManager/DAM_Map.h
+++ b/TAO/CIAO/DAnCE/ExecutionManager/DAM_Map.h
@@ -52,6 +52,8 @@ namespace CIAO
get_dams (ACE_ENV_SINGLE_ARG_DECL);
bool unbind_dam (const ACE_CString &str);
+
+ size_t size (void);
private:
typedef
diff --git a/TAO/CIAO/DAnCE/ExecutionManager/Execution_Manager_Impl.cpp b/TAO/CIAO/DAnCE/ExecutionManager/Execution_Manager_Impl.cpp
index 5584a411771..c7af75c6f11 100644
--- a/TAO/CIAO/DAnCE/ExecutionManager/Execution_Manager_Impl.cpp
+++ b/TAO/CIAO/DAnCE/ExecutionManager/Execution_Manager_Impl.cpp
@@ -122,6 +122,14 @@ namespace CIAO
return this->map_.get_dams (ACE_ENV_SINGLE_ARG_PARAMETER);
}
+ Deployment::DomainApplicationManager_ptr
+ Execution_Manager_Impl::getManager (const char * plan_uuid
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException, Deployment::PlanNotExist))
+ {
+ return this->map_.fetch_dam_reference (plan_uuid);
+ }
+
void
Execution_Manager_Impl::destroyManager (
Deployment::DomainApplicationManager_ptr manager
diff --git a/TAO/CIAO/DAnCE/ExecutionManager/Execution_Manager_Impl.h b/TAO/CIAO/DAnCE/ExecutionManager/Execution_Manager_Impl.h
index 4f70b234edc..7f6e3ab87dd 100644
--- a/TAO/CIAO/DAnCE/ExecutionManager/Execution_Manager_Impl.h
+++ b/TAO/CIAO/DAnCE/ExecutionManager/Execution_Manager_Impl.h
@@ -61,6 +61,12 @@ namespace CIAO
getManagers (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException));
+ // Below method is CIAO specific extension
+ virtual Deployment::DomainApplicationManager_ptr
+ getManager (const char * plan_uuid
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException, Deployment::PlanNotExist));
+
virtual void
destroyManager (Deployment::DomainApplicationManager_ptr manager
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
diff --git a/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp b/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
index 94abc352a09..36966457426 100644
--- a/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
+++ b/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
@@ -66,8 +66,9 @@ CIAO::NodeApplication_Impl::finishLaunch (
{
ACE_UNUSED_ARG (start);
- // parameter "true" means we want to establish new connections
- // instead of "remove" existing connections.
+ // If parameter "is_ReDAC" is true, then it means we want to "remove"
+ // existing connections. Otherwise, it means we want to "add" new
+ // connections
this->finishLaunch_i (providedReference, start, is_ReDAC);
}
diff --git a/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager.mpc b/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager.mpc
index 4a78aabaa86..03e89656275 100644
--- a/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager.mpc
+++ b/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager.mpc
@@ -1,9 +1,10 @@
-// -*- MPC -*-
+ // -*- MPC -*-
// $Id$
project(NodeApplicationManager): ciao_component_dnc, ciao_deployment_svnt {
sharedname = NodeApplicationManager
+ after += NodeManager_stub
idlflags += -Wb,export_include=CIAO_NAM_Export.h -Wb,export_macro=CIAO_NAM_Export
dynamicflags = CIAO_NAM_BUILD_DLL
diff --git a/TAO/CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp b/TAO/CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp
index 0cb007b85b0..6803f142b25 100644
--- a/TAO/CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp
+++ b/TAO/CIAO/DAnCE/NodeManager/NodeManager_Impl.cpp
@@ -319,8 +319,50 @@ CIAO::NodeManager_Impl_Base::destroyManager
ACE_ENDTRY;
}
+void
+CIAO::NodeManager_Impl_Base::
+destroyPlan (const Deployment::DeploymentPlan & plan
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((::CORBA::SystemException,
+ ::Deployment::StopError))
+{
+ // Update the reference counting map (subtract by 1 for each instance)
+ // If the ref count becomes 0, then remove this component, otherwise,
+ // we should remove the necesary bindings on this component specified
+ // in the deployment plan.
+
+ // Create a list of components that are not to be removed, and send
+ // this list to the NAM, who will delegate to appropriate NAs to
+ // remove bindings from these components.
+
+ // The problem is that we probably also want to call another NAM, which
+ // manages the shared components in a different child plan. :(
+
+
+ // Find the NAM from the map and invoke the destroyPlan() operation on
+ // it, which will actuall remove components and connections in this plan.
+ // If
+ CORBA::Object_var obj =
+ this->poa_->id_to_reference (this->map_.get_nam (plan.UUID.in ()));
+ ACE_TRY_CHECK;
+
+ Deployment::NodeApplicationManager_var nam =
+ Deployment::NodeApplicationManager::_narrow (obj.in ());
+ ACE_TRY_CHECK;
+
+ nam->destroyApplication (0);
+
+
+
+ // The problem is that we should NOT actually kill the NA process if
+ // there are some components that are shared by other plans.
+
+}
+
+
bool
-CIAO::NodeManager_Impl_Base::validate_plan (const Deployment::DeploymentPlan &plan)
+CIAO::NodeManager_Impl_Base::
+validate_plan (const Deployment::DeploymentPlan &plan)
{
const char * resource_id = 0;
CORBA::ULong i = 0;
diff --git a/TAO/CIAO/DAnCE/NodeManager/NodeManager_Impl.h b/TAO/CIAO/DAnCE/NodeManager/NodeManager_Impl.h
index 2dc4b11ebac..6eb12a49433 100644
--- a/TAO/CIAO/DAnCE/NodeManager/NodeManager_Impl.h
+++ b/TAO/CIAO/DAnCE/NodeManager/NodeManager_Impl.h
@@ -95,6 +95,13 @@ namespace CIAO
Deployment::StopError,
Deployment::InvalidReference));
+ // CIAO specific extension, which is particularly useful for dealing with
+ // shared components issue
+ virtual void destroyPlan (const Deployment::DeploymentPlan & plan
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException,
+ ::Deployment::StopError));
+
// ********* CIAO Specific Helper functions ************
virtual const ::Components::FacetDescriptions &
@@ -111,7 +118,6 @@ namespace CIAO
set_all_consumers (ACE_CString &name,
const ::Components::ConsumerDescriptions_var & consumers);
-
private:
/// Validate the child deployment plan. In particular, we are
/// trying to verify that all the component instances within this
diff --git a/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher.mpc b/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher.mpc
index 20921a279e8..41a34263764 100644
--- a/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher.mpc
+++ b/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher.mpc
@@ -3,17 +3,18 @@
project(Plan_Launcher_Impl) : ciao_component_dnc, ciao_config_handlers {
sharedname = Plan_Launcher_Impl
- after += ExecutionManager_stub NodeDaemon_stub
+ after += ExecutionManager_stub
libs += ExecutionManager_stub
dynamicflags = PLAN_LAUNCHER_IMPL_BUILD_DLL
Source_Files {
Plan_Launcher_Impl.cpp
- DAM_Map.cpp
+ ../ExecutionManager/DAM_Map.cpp
}
Header_Files {
+ ../ExecutionManager/DAM_Map.h
Plan_Launcher_Impl_Export.h
}
}
diff --git a/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp b/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp
index c31d32be127..eaec59004f8 100644
--- a/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp
+++ b/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp
@@ -228,20 +228,29 @@ namespace CIAO
bool
Plan_Launcher_i::teardown_plan (const char *uuid)
{
- size_t map_size = this->map_.size ();
+ // Since people could always run another instance of the Plan_Launcher
+ // executable to tear down a plan, so we could NOT rely on the local
+ // DAM_Map to fetch DAM obj reference. Instead, we make a remote call
+ // on ExecutionManager to fetch it.
+ ACE_TRY
+ {
+ ::Deployment::DomainApplicationManager_var dapp_mgr =
+ this->em_->getManager (uuid);
- if (!this->map_.is_plan_available (uuid))
- return false;
-
- ::Deployment::DomainApplicationManager_var dapp_mgr
- (this->map_.fetch_dam_reference (uuid));
-
- dapp_mgr->destroyApplication ();
- if (CIAO::debug_level ())
- ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+ dapp_mgr->destroyApplication ();
+ if (CIAO::debug_level ())
+ ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+
+ this->destroy_dam (dapp_mgr.in ());
+ }
+ ACE_CATCHANY
+ {
+ ACE_DEBUG ((LM_ERROR, "Unable to find DomainApplicationManager "
+ "for plan with uuid: %s\n", uuid));
+ return false;
+ }
+ ACE_ENDTRY;
- this->map_.unbind_dam (uuid);
-
return true;
}
@@ -258,7 +267,7 @@ namespace CIAO
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG, "[success]\n"));
- this->destroy_dam (dam);
+ this->destroy_dam (dam);
return true;
}
diff --git a/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.h b/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.h
index a58c95f1434..0993b6bf46a 100644
--- a/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.h
+++ b/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.h
@@ -82,7 +82,6 @@ namespace CIAO
/// Local map for DAMs, to save expensive UUID lookups.
Execution_Manager::DAM_Map map_;
-
};
}
diff --git a/TAO/CIAO/ciao/Deployment.idl b/TAO/CIAO/ciao/Deployment.idl
index 11eabc058c9..a5534b06517 100644
--- a/TAO/CIAO/ciao/Deployment.idl
+++ b/TAO/CIAO/ciao/Deployment.idl
@@ -40,6 +40,10 @@ module Deployment {
exception InvalidReference {
};
+ // Below exception types are CIAO specific
+ exception PlanNotExist {
+ };
+
interface ApplicationManager {
Application startLaunch (in Properties configProperty,
out Connections providedReference,
@@ -72,9 +76,11 @@ module Deployment {
void start ()
raises (StartError);
+ // CIAO speicifc extension
void destroyApplication ()
raises (StopError);
+ // CIAO specific extension to destroy NodeApplicationManager
void destroyManager ()
raises (StopError);
@@ -95,7 +101,12 @@ module Deployment {
DomainApplicationManager preparePlan (in DeploymentPlan plan,
in boolean commitResources)
raises (ResourceNotAvailable, PlanError, StartError);
+
DomainApplicationManagers getManagers ();
+
+ DomainApplicationManager getManager (in string plan_uuid)
+ raises (PlanNotExist);
+
void destroyManager (in DomainApplicationManager manager)
raises (StopError);
@@ -162,11 +173,22 @@ module Deployment {
void joinDomain (in Domain ciao_domain,
in TargetManager manager,
in Logger log);
+
void leaveDomain ();
+
NodeApplicationManager preparePlan (in DeploymentPlan plan)
raises (StartError, PlanError);
+
void destroyManager (in NodeApplicationManager appManager)
raises (StopError, InvalidReference);
+
+ // CIAO specific extension
+ // Destroy the NAM and all the associated NAs with this child_plan
+ // We can guarantee that the input DeploymentPlan is valid, since it
+ // is fetched from the cached DeploymentPlan of DAM, which has been
+ // validated before.
+ void destroyPlan (in DeploymentPlan plan)
+ raises (StopError);
};
interface RepositoryManager {