summaryrefslogtreecommitdiff
path: root/TAO/CIAO/DAnCE/TargetManager
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/CIAO/DAnCE/TargetManager')
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/CmpClient.cpp83
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/DomainDataManager.cpp467
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h157
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/TM_Client.mpc8
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc21
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/TargetManagerExt.idl25
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.cpp53
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.h11
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/descriptors/Domain.cdd4
-rw-r--r--TAO/CIAO/DAnCE/TargetManager/descriptors/flattened_deploymentplan.cdp10
10 files changed, 783 insertions, 56 deletions
diff --git a/TAO/CIAO/DAnCE/TargetManager/CmpClient.cpp b/TAO/CIAO/DAnCE/TargetManager/CmpClient.cpp
index d695ab38062..b10bf6fd51d 100644
--- a/TAO/CIAO/DAnCE/TargetManager/CmpClient.cpp
+++ b/TAO/CIAO/DAnCE/TargetManager/CmpClient.cpp
@@ -9,6 +9,7 @@
* TM to getAllResources and getAvailable resources
*/
+#include "Deployment_DataC.h"
#include "TargetManagerC.h"
#include "ace/streams.h"
#include "Config_Handlers/DnC_Dump.h"
@@ -63,6 +64,88 @@ int main (int argc, char* argv[])
ACE_DEBUG((LM_DEBUG ,"Error:TargetManager:Exception in TargetManager call\n"));
}
+
+ // make a call to the commit resources .....
+
+
+ Deployment::DeploymentPlan plan;
+
+ plan.instance.length (1);
+
+ ::Deployment::InstanceDeploymentDescription instance_;
+ instance_.node = CORBA::string_dup ("Delta");
+ instance_.deployedResource.length (1);
+ instance_.deployedResource[0].requirementName =
+ CORBA::string_dup ("Processor");
+ instance_.deployedResource[0].resourceName =
+ CORBA::string_dup ("CPULoad");
+
+ instance_.deployedResource[0].property.length (1);
+ instance_.deployedResource[0].property[0].name =
+ CORBA::string_dup ("LoadAverage");
+ CORBA::Double d = 20;
+ instance_.deployedResource[0].property[0].value <<= d;
+
+ plan.instance[0] = instance_;
+
+ bool resource_available = 1;
+
+ try
+ {
+ targetI->commitResources(plan);
+ ACE_DEBUG ((LM_DEBUG , "\n\ncommitResources Returned \n"));
+ }
+ catch(CORBA::NO_IMPLEMENT &)
+ {
+ cerr << "Error:TargetManager:CORBA::NO_IMPLEMENT thrown" << endl;
+ }
+ catch (Deployment::ResourceNotAvailable & e)
+ {
+ resource_available = 0;
+ cout << "TargetManager commitResources ResourceNotAvailable Exception" <<endl;
+
+ ACE_DEBUG ((LM_DEBUG ,
+ "ResourceNotAvailable\n name=[%s]\n elementName=[%s]\n resourceName=[%s]\n \
+ resourceType= [%s]\n propertyName=[%s]\n",
+ e.name.in (),
+ e.elementName.in (),
+ e.resourceName.in (),
+ e.resourceType.in (),
+ e.propertyName.in ()));
+ }
+ catch(CORBA::Exception & ex)
+ {
+ cout << "Error:TargetManager:commitResources Exception" <<endl;
+ cout << "Error:TargetManager:CORBA Generic Exception " << endl;
+ cerr << "Error:TargetManager:Exception in TargetManager call" << ex << endl;
+ }
+
+
+ // Make a call to release resources , if resource < 0
+ try
+ {
+ if (resource_available == 0)
+ {
+ targetI->releaseResources(plan);
+ ACE_DEBUG ((LM_DEBUG , "\n\nreleaseResources Returned \n"));
+ }
+ }
+ catch(CORBA::NO_IMPLEMENT &)
+ {
+ cerr << "Error:TargetManager:CORBA::NO_IMPLEMENT thrown" << endl;
+ }
+ catch (Deployment::ResourceNotAvailable & e)
+ {
+ cout << "Error:TargetManager releaseResources ResourceNotAvailable Exception" <<endl;
+ }
+ catch(CORBA::Exception & ex)
+ {
+ cout << "Error:TargetManager:releaseResources Exception" <<endl;
+ cout << "Error:TargetManager:CORBA Generic Exception " << endl;
+ cerr << "Error:TargetManager:Exception in TargetManager call" << ex << endl;
+ }
+
+
// Now make a call of getAvailableResources on the TargetManager ...
try
{
diff --git a/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.cpp b/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.cpp
index 57130b90fa4..8ed23efe863 100644
--- a/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.cpp
+++ b/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.cpp
@@ -19,9 +19,37 @@
const char * domain_file_name = "Domain.cdd";
+CIAO::DomainDataManager* CIAO::DomainDataManager::global_data_manager_ = 0;
+
+CIAO::DomainDataManager * CIAO::DomainDataManager::create (CORBA::ORB_ptr orb,
+ ::Deployment::TargetManager_ptr target
+ )
+{
+ if (global_data_manager_ == 0)
+ {
+ global_data_manager_ = new DomainDataManager (orb , target);
+ }
+ return global_data_manager_;
+}
+
+
+CIAO::DomainDataManager* CIAO::DomainDataManager::get_data_manager ()
+{
+ return global_data_manager_;
+}
+
+
+void CIAO::DomainDataManager::delete_data_manger ()
+{
+ if (global_data_manager_)
+ delete global_data_manager_;
+}
+
+
+
int CIAO::DomainDataManager::update_domain (const ::CORBA::StringSeq &,
- const ::Deployment::Domain & domainSubset,
- ::Deployment::DomainUpdateKind )
+ const ::Deployment::Domain & domainSubset,
+ ::Deployment::DomainUpdateKind )
{
// Update the subset of the domain which the above
// parameter corresponds to
@@ -29,16 +57,23 @@ int CIAO::DomainDataManager::update_domain (const ::CORBA::StringSeq &,
// for now consider only nodes
if (CIAO::debug_level () > 9)
{
- ACE_DEBUG ((LM_DEBUG , "Inside The update Domain of Manager\n"));
- ACE_DEBUG ((LM_DEBUG , "the length of domain is [%d]",
- current_domain_.node.length ()));
- ACE_DEBUG ((LM_DEBUG , "domainSubsetNode is \n" ));
+ /*
+ ACE_DEBUG ((LM_DEBUG ,
+ "TM::update_domain::Inside The update Domain of Manager\n"));
+ ACE_DEBUG ((LM_DEBUG ,
+ "TM::update_domain_::The length of domain is [%d]",
+ current_domain_.node.length ()));
+ ACE_DEBUG ((LM_DEBUG ,
+ "TM::update_domain::domainSubsetNode is \n" ));
+ */
}
int size = current_domain_.node.length ();
+
int i;
for (i=0;i < size;i++)
{
- if (!strcmp (domainSubset.node[0].name , current_domain_.node[i].name))
+ if (!strcmp (domainSubset.node[0].name ,
+ current_domain_.node[i].name))
{
// found a match
// for now overwrite the entire Node info ...
@@ -46,7 +81,7 @@ int CIAO::DomainDataManager::update_domain (const ::CORBA::StringSeq &,
// only the specific part ...
if (CIAO::debug_level () > 9)
{
- ACE_DEBUG ((LM_DEBUG , "Changed the memory Value\n"));
+ ACE_DEBUG ((LM_DEBUG , "TM::Changed the cpu Value\n"));
}
current_domain_.node[i] = domainSubset.node[0];
break; // finished job ...break
@@ -62,7 +97,8 @@ int CIAO::DomainDataManager::update_domain (const ::CORBA::StringSeq &,
}
if (CIAO::debug_level () > 9)
{
- ACE_DEBUG ((LM_DEBUG , "Inside The update Domain of Manager\n"));
+ ACE_DEBUG ((LM_DEBUG ,
+ "TM::Inside The update Domain of Manager\n"));
}
return 0;
}
@@ -74,25 +110,33 @@ DomainDataManager (CORBA::ORB_ptr orb,
deployment_config_ (orb_.in()),
target_mgr_ (::Deployment::TargetManager::_duplicate(target))
{
+ // ACE_DEBUG((LM_DEBUG , "Calling DD_HANDLER\n"));
CIAO::Config_Handlers::DD_Handler dd (domain_file_name);
+ // ACE_DEBUG((LM_DEBUG , "After DD_HANDLER Constructor\n"));
::Deployment::Domain* dmn = dd.domain_idl ();
- ::Deployment::DnC_Dump::dump (*dmn);
+ // ACE_DEBUG((LM_DEBUG , "After DD_HANDLER domain_idl\n"));
+
+ if (CIAO::debug_level () > 9)
+ ::Deployment::DnC_Dump::dump (*dmn);
+
current_domain_ = *dmn;
initial_domain_ = current_domain_;
+ // initialize the provisioning domain
+ provisioned_data_ = initial_domain_;
+
call_all_node_managers ();
+
}
::Deployment::Domain* CIAO::DomainDataManager::get_current_domain ()
{
- ::Deployment::Domain * retval = new ::Deployment::Domain (current_domain_);
- return retval;
+ return new ::Deployment::Domain (provisioned_data_);
}
::Deployment::Domain* CIAO::DomainDataManager::get_initial_domain ()
{
- ::Deployment::Domain * retval = new ::Deployment::Domain (initial_domain_);
- return retval;
+ return new ::Deployment::Domain (initial_domain_);
}
int CIAO::DomainDataManager::readin_domain_data ()
@@ -115,12 +159,39 @@ int CIAO::DomainDataManager::call_all_node_managers ()
}
int length = initial_domain_.node.length ();
+ if (CIAO::debug_level () > 9)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Number of nodes in domain.cdd is : %d\n", length));
+ }
+
for (int i=0;i < length;i++)
{
- ::Deployment::NodeManager_var node_manager =
- deployment_config_.get_node_manager (initial_domain_.node[i].name);
- if (node_manager.in () != 0)
+
+ ::Deployment::NodeManager_var node_manager;
+
+
+ try
+ {
+ node_manager =
+ deployment_config_.get_node_manager
+ (initial_domain_.node[i].name.in ());
+ }
+ catch (CORBA::Exception& ex)
+ {
+ ACE_ERROR ((LM_ERROR, "DANCE::TM (%P|%t) DomainDataManager.cpp: "
+ "Error trying to contact NodeManager %s\n",
+ initial_domain_.node[i].name.in ()));
+ continue;
+ }
+
+
+ if (!CORBA::is_nil (node_manager.in ()))
{
+ if (CIAO::debug_level () > 9)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Trying to contact nodemanager on %s\n",
+ initial_domain_.node[i].name.in ()));
+ }
Deployment::Logger_ptr log =
Deployment::Logger::_nil ();
::Deployment::Domain sub_domain;
@@ -134,14 +205,370 @@ int CIAO::DomainDataManager::call_all_node_managers ()
sub_domain.node[0] = initial_domain_.node[i];
try
{
- node_manager->joinDomain (sub_domain , target_mgr_.in (), log);
+ node_manager->joinDomain (sub_domain,
+ target_mgr_.in (),
+ log);
}
- catch (CORBA::Exception&)
+ catch (CORBA::Exception& ex)
{
- ACE_DEBUG ((LM_DEBUG , "Error in calling Join Domain==\n"));
+ ACE_DEBUG ((LM_DEBUG , "TM::Error in calling Join Domain==\n"));
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught in "
+ "DomainDataManager::joinDomain");
}
}
}
return 0;
}
+
+CIAO::Host_NodeManager_seq * CIAO::DomainDataManager::get_node_managers ()
+{
+ ::CIAO::Host_NodeManager_seq* node_mgr_seq =
+ new ::CIAO::Host_NodeManager_seq ();
+ node_mgr_seq->length (initial_domain_.node.length ());
+ for (unsigned int i=0;i < initial_domain_.node.length ();i++)
+ {
+ (*node_mgr_seq)[i].host_ =
+ CORBA::string_dup (initial_domain_.node[i].name);
+ ::Deployment::NodeManager_var node_manager =
+ deployment_config_.get_node_manager (initial_domain_.node[i].name);
+ // if (node_manager.in () != 0)
+ {
+ (*node_mgr_seq)[i].node_mgr_ = ::CIAO::NodeManager::_narrow (node_manager.in ());
+ }
+ }
+ return node_mgr_seq;
+}
+
+CIAO::Host_Infos* CIAO::DomainDataManager::get_cpu_info ()
+{
+ CIAO::Host_Infos* host_info_seq = new CIAO::Host_Infos ();
+ host_info_seq->length (current_domain_.node.length ());
+
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG , "TM:: The node length is [%d]",
+ current_domain_.node.length ()));
+
+ for (unsigned int i=0;i < current_domain_.node.length ();i++)
+ {
+ (*host_info_seq)[i].hostname =
+ CORBA::string_dup (current_domain_.node[i].name);
+ // ACE_DEBUG ((LM_DEBUG , "The resource length is [%d]",
+ // current_domain_.node[i].resource.length ()));
+
+ for (unsigned int j = 0;j < current_domain_.node[i].resource.length ();j++)
+ {
+ if (!strcmp(
+ current_domain_.node[i].resource[j].name,
+ "Processor"))
+ {
+ current_domain_.node[i].resource[j].property[0].value
+ >>= (*host_info_seq)[i].cpu_util;
+ CORBA::Double d;
+ current_domain_.node[i].resource[j].property[0].value
+ >>= d;
+ // ACE_DEBUG ((LM_DEBUG, "TM::The current cpu util is [%f]\n", d));
+ }
+ }
+ }
+
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG , "TM::Returning from get_cpu_info"));
+
+ return host_info_seq;
+}
+
+CORBA::Long CIAO::DomainDataManager::get_pid (ACE_CString cmp)
+{
+ CORBA::Long pid;
+
+ // This is really ineffiecient this is O(n) ; searching all the nodes
+ // all the resources for a particular component.
+ // It needs to be stored in some other data structure
+
+ for (unsigned int i=0;i < current_domain_.node.length ();i++)
+ {
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG , "TM::The resource length is [%d]",
+ current_domain_.node[i].resource.length ()));
+
+ for (unsigned int j = 0;j < current_domain_.node[i].resource.length ();j++)
+ {
+ // The resource
+ if (!strcmp(
+ current_domain_.node[i].resource[j].name,
+ "Component") &&
+ ACE_CString (current_domain_.node[i].resource[j].property[0].name) ==
+ cmp)
+ {
+ current_domain_.node[i].resource[j].property[0].value
+ >>= pid;
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG,
+ "TM::getpid::The current pid is [%d]\n", pid));
+
+ }
+ } // resources
+ }// nodes
+
+ return pid;
+}
+
+void CIAO::DomainDataManager
+::commitResources (
+ const ::Deployment::DeploymentPlan & plan)
+{
+ // commit the resources
+ // parse into the plan and commit resources ...
+
+ // set the action value
+ current_action_ = commit;
+
+ for (unsigned int i = 0;i < plan.instance.length ();i++)
+ {
+ for (unsigned int j = 0;j < provisioned_data_.node.length ();j++)
+ {
+ if (!strcmp (plan.instance[i].node.in () ,
+ provisioned_data_.node[j].name.in ()))
+ {
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG ,
+ "TM::commitResource::Host name matched\n"));
+ try {
+ match_requirement_resource (
+ plan.instance[i].deployedResource,
+ provisioned_data_.node[j].resource);
+ }
+ catch (::Deployment::ResourceNotAvailable& ex)
+ {
+ // catch the exception and add parameters
+ ex.elementName =
+ CORBA::string_dup (provisioned_data_.node[j].name);
+
+ throw ex;
+ }
+ }
+ }
+ }
+}
+
+
+void CIAO::DomainDataManager::
+releaseResources (
+ const ::Deployment::DeploymentPlan& plan)
+{
+ // release the resources
+
+
+ // set the action value
+ current_action_ = release;
+
+ for (unsigned int i = 0;i < plan.instance.length ();i++)
+ {
+ for (unsigned int j = 0;j < provisioned_data_.node.length ();j++)
+ {
+ if (!strcmp (plan.instance[i].node.in () ,
+ provisioned_data_.node[j].name.in ()))
+ {
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG ,
+ "TM::commitResource::Host name matched\n"));
+
+ match_requirement_resource (
+ plan.instance[i].deployedResource,
+ provisioned_data_.node[j].resource);
+
+ }
+ }
+ }
+
+}
+
+
+void CIAO::DomainDataManager::
+match_requirement_resource (
+ ::Deployment::InstanceResourceDeploymentDescriptions deployed,
+ ::Deployment::Resources & available
+ )
+{
+ // here match the deployed to the available
+
+ for (unsigned int i = 0;i < deployed.length ();i++)
+ {
+ // for each deployed resource ....search the corresponding
+ // available resource
+ for (unsigned int j = 0;j < available.length ();j++)
+ {
+ if (!strcmp (deployed[i].requirementName, available[j].name))
+ {
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG ,
+ "TM::commitResource::Requirement name matched\n"));
+ // search for the resourcename in the resourceType
+ for (unsigned int k = 0;k < available[j].resourceType.length ();k++)
+ {
+ if (!strcmp (deployed[i].resourceName,
+ available[j].resourceType[k]))
+ {
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG ,
+ "TM::commitResource::Resource name matched\n"));
+
+ try {
+ match_properties (deployed[i].property,
+ available[j].property);
+ }
+ catch (::Deployment::ResourceNotAvailable& ex)
+ {
+ // catch the exception and add parameters
+ ex.resourceType =
+ CORBA::string_dup (available[j].resourceType[k]);
+ ex.resourceName =
+ CORBA::string_dup (available[j].name);
+ throw ex;
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
+
+void CIAO::DomainDataManager::
+match_properties (
+ ::Deployment::Properties deployed,
+ ::Deployment::SatisfierProperties & available)
+{
+ for (unsigned int i = 0;i < deployed.length ();i++)
+ {
+ for (unsigned int j = 0;j < available.length ();j++)
+ if (!strcmp (deployed[i].name , available[j].name))
+ {
+ // check kind here ....and then subtract ....
+ // accordingly , ..this is complex ... better to write
+ // some specialised algo
+ // for now assuming Capacity ....
+ // and tk_double ....
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG ,
+ "TM::commitResource::Property name matched\n"));
+
+ commit_release_resource (deployed[i] , available[j]);
+
+ }
+ }
+}
+
+void CIAO::DomainDataManager::commit_release_resource (
+ ::Deployment::Property & deployed,
+ ::Deployment::SatisfierProperty & available)
+{
+ if (current_action_ == commit)
+ {
+
+ CORBA::Double required_d;
+
+ if ((deployed.value >>= required_d) == false)
+ ACE_ERROR ((LM_ERROR, "Failed to extract required amount\n"));
+
+ CORBA::Double available_d;
+
+ if ((available.value >>= available_d) == false)
+ ACE_ERROR ((LM_ERROR, "failed to extract available amount\n"));
+
+ if (available_d >= required_d)
+ {
+ available_d = available_d - required_d;
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG, "TM::The available is [%f]",
+ available_d));
+
+ available.value <<= available_d;
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG, "Insufficient resources! Available: %d, Required %d\n",
+ available_d, required_d));
+ throw ::Deployment::ResourceNotAvailable ("",
+ "",
+ deployed.name.in (),
+ "",
+ "");
+ }
+
+
+ }
+ else
+ {
+ //must be release
+ CORBA::Double required_d;
+ deployed.value >>= required_d;
+ CORBA::Double available_d;
+ available.value >>= available_d;
+
+ available_d = available_d + required_d;
+
+
+ // Should we check for bin > 100 ??????
+
+ if (CIAO::debug_level () > 9)
+ ACE_DEBUG ((LM_DEBUG, "TM::The available is [%f]",
+ available_d));
+
+ available.value <<= available_d;
+ }
+}
+
+void CIAO::DomainDataManager::stop_monitors ()
+{
+
+ int length = initial_domain_.node.length ();
+ if (CIAO::debug_level () > 9)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Number of nodes in domain.cdd is : %d\n", length));
+ }
+
+ for (int i=0;i < length;i++)
+ {
+
+ ::Deployment::NodeManager_var node_manager;
+
+
+ try
+ {
+ node_manager =
+ deployment_config_.get_node_manager
+ (initial_domain_.node[i].name.in ());
+ }
+ catch (CORBA::Exception& ex)
+ {
+ ACE_ERROR ((LM_ERROR, "DANCE::TM (%P|%t) DomainDataManager.cpp: "
+ "Error in get Node Manager from Deployment Config %s\n",
+ initial_domain_.node[i].name.in ()));
+ continue;
+ }
+
+
+ if (!CORBA::is_nil (node_manager.in ()))
+ {
+ if (CIAO::debug_level () > 9)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Trying to contact nodemanager on %s\n",
+ initial_domain_.node[i].name.in ()));
+ }
+ try
+ {
+ node_manager->leaveDomain ();
+ }
+ catch (CORBA::Exception& ex)
+ {
+ ACE_DEBUG ((LM_DEBUG , "TM::Error in calling Leave Domain\n"));
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught in "
+ "DomainDataManager::leaveDomain");
+ }
+ }
+ }
+ return;
+
+}
diff --git a/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h b/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h
index 6d3e8772c87..84e50a5fabf 100644
--- a/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h
+++ b/TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h
@@ -70,16 +70,112 @@ namespace CIAO
/**
+ * @operation create
+ * @brief This function is called to create the Datamanager
+ * @param orb The orb pointer
+ * @param target The Target Manager Object Reference
+ *
+ * @description This function calls the constructor of the
+ * class Domain Data Manager
+ */
+ static DomainDataManager * create (CORBA::ORB_ptr orb,
+ ::Deployment::TargetManager_ptr target
+ );
+
+ /**
+ * @operation get_data_manager
+ * @brief Returns the static pointer to the
+ * data manager.
+ * @return DomainDataManager*
+ * @description The staic get_data_manger function returning
+ * the data_manager pointer
+ */
+ static DomainDataManager* get_data_manager ();
+
+ /**
+ * @operation delete_data_manager
+ * @brief deletes the data manager
+ */
+
+ static void delete_data_manger ();
+
+ /**
+ * @operation get_node_managers
+ * @brief returns the sequence of node managers
+ * object reference
+ */
+
+ CIAO::Host_NodeManager_seq *
+ get_node_managers ();
+
+ /**
+ * @operation get_cpu_info
+ * @brief returns the node specific cpu utilization
+ *
+ * @return CIAO::Host_Infos*
+ */
+
+ CIAO::Host_Infos* get_cpu_info ();
+
+ /**
+ * @operation get_pid
+ * @brief returns the pid of the component id submitted
+ * @param cmp The component id
+ *
+ * @return process id
+ */
+ CORBA::Long get_pid (ACE_CString cmp);
+
+ /**
+ * @operation commitResources
+ * @brief commits the resources that are specified
+ * in the plan.
+ * @param plan ::Deployment::DeploymentPlan
+ * @exception ::Deployment::ResourceNotAvailable thrown
+ * when the resources mentioned in the plan exceeds
+ * the current resource.
+ * @exception ::Deployment::PlanError thrown if the plan has any
+ * error
+ *
+ */
+ void commitResources (
+ const ::Deployment::DeploymentPlan & plan);
+
+ /**
+ * @operation releaseResources
+ * @brief The function releases the resources held by a plan
+ *
+ * @param argname ::Deployment::DeploymentPlan the plan whose
+ * resources are to be released
+ */
+ void releaseResources (
+ const ::Deployment::DeploymentPlan& plan);
+
+ /**
+ * @operation stop_monitors
+ * @brief The function makes a call on the leaveDomain on the
+ * NodeManager
+ *
+ * @description The node manager in turn stops the monitor
+ *
+ */
+
+ void stop_monitors ();
+
+ protected:
+
+
+ /**
* @operation Constructor
* @param orb The orb pointer
* @param target The Target Manager Object Reference
+ * @description The constructor made proteccted so that no one can create
+ * it.
*/
DomainDataManager (CORBA::ORB_ptr orb,
::Deployment::TargetManager_ptr target
);
- protected:
-
/**
* @operation readinDomainData
* @brief It will read the initial Domain data from
@@ -88,6 +184,49 @@ namespace CIAO
int readin_domain_data ();
/**
+ * @operation match_requirement_resource
+ * @brief Match the deployed resources to the
+ * available resource
+ */
+ void match_requirement_resource (
+ ::Deployment::InstanceResourceDeploymentDescriptions deployed,
+ ::Deployment::Resources& available
+ );
+
+ /**
+ * @operation match_properties
+ * @brief Match the properties of a Requirement to the
+ * properties of available resource
+ * @param deployed The deployed Properties
+ * @param available The available Properties
+ */
+
+ void CIAO::DomainDataManager::
+ match_properties (
+ ::Deployment::Properties deployed,
+ ::Deployment::SatisfierProperties& available);
+
+
+ /// The different actiona that can take place
+ enum Action {commit , release};
+
+ /**
+ * @operation commit_release_resource
+ * @brief Either commits or releases the given resource
+ * based on the current Action set.
+ * @param deployed ::Deployment::Property is the resource
+ * to be commited/released
+ * @param available ::Deployment::SatisfierProperty is the
+ * available resource from which committed/released.
+ * @exception ::Deployment::ResourceNotAvailable thrown
+ * when the deployed resources exceeds
+ * the available resource.
+ */
+
+ void commit_release_resource ( ::Deployment::Property & deployed,
+ ::Deployment::SatisfierProperty & available);
+
+ /**
* @operation call_all_node_managers
* @brief This function calls all NM and gives them
* the sub-domain
@@ -111,6 +250,20 @@ namespace CIAO
/// The Target Manager Context
::Deployment::TargetManager_var target_mgr_;
+
+ /**
+ * The staic data manager pointer implementing
+ * singleton pattern
+ */
+ static DomainDataManager* global_data_manager_;
+
+ /**
+ * The static provisioned Domain data
+ */
+ ::Deployment::Domain provisioned_data_;
+
+ ///The current action
+ Action current_action_;
};
} // CIAO
diff --git a/TAO/CIAO/DAnCE/TargetManager/TM_Client.mpc b/TAO/CIAO/DAnCE/TargetManager/TM_Client.mpc
index 40904b1585d..aba5c8737d3 100644
--- a/TAO/CIAO/DAnCE/TargetManager/TM_Client.mpc
+++ b/TAO/CIAO/DAnCE/TargetManager/TM_Client.mpc
@@ -5,7 +5,7 @@
project(TMClient): ciao_client_dnc,ciao_deployment_stub, ciao_config_handlers {
after += CIAO_TargetManager_stub
- includes += $(CIAO_ROOT)/DAnCE $(TAO_ROOT)/orbsvcs
+ includes += $(CIAO_ROOT)/DAnCE $(TAO_ROOT)/orbsvcs
includes += $(CIAO_ROOT)/DAnCE/TargetManager
libs += TargetManager_stub
@@ -14,12 +14,12 @@ project(TMClient): ciao_client_dnc,ciao_deployment_stub, ciao_config_handlers {
}
Source_Files {
- CmpClient.cpp
+ CmpClient.cpp
}
-
+
Header_Files {
}
-
+
Inline_Files {
}
diff --git a/TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc b/TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc
index 2add70e94e3..ef22db4924f 100644
--- a/TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc
+++ b/TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc
@@ -1,11 +1,14 @@
// $Id$
-// generate_component_mpc.pl,v
+// generate_component_mpc.pl,v
project(CIAO_TargetManager_stub): ciao_client_dnc, ciao_deployment_stub {
+ after += NodeManager_stub
sharedname = TargetManager_stub
idlflags += -Wb,stub_export_macro=TARGETMANAGER_STUB_Export -Wb,stub_export_include=TargetManager_stub_export.h -Wb,skel_export_macro=TARGETMANAGER_SVNT_Export -Wb,skel_export_include=TargetManager_svnt_export.h
dynamicflags = TARGETMANAGER_STUB_BUILD_DLL
+ libs += NodeManager_stub
+
IDL_Files {
TargetManager.idl
TargetManagerExt.idl
@@ -20,8 +23,8 @@ project(CIAO_TargetManager_stub): ciao_client_dnc, ciao_deployment_stub {
project(CIAO_TargetManager_svnt) : ciao_servant_dnc {
after += CIAO_TargetManager_stub
sharedname = TargetManager_svnt
- libs += TargetManager_stub
-
+ libs += TargetManager_stub
+
idlflags += -Wb,export_macro=TARGETMANAGER_SVNT_Export -Wb,export_include=TargetManager_svnt_export.h
dynamicflags = TARGETMANAGER_SVNT_BUILD_DLL
@@ -45,15 +48,19 @@ project(CIAO_TargetManager_svnt) : ciao_servant_dnc {
project(CIAO_TargetManager_exec) : namingexe, ciao_component_dnc , ciao_config_handlers {
after += CIAO_TargetManager_svnt DomainApplicationManager
sharedname = TargetManager_exec
- libs += TargetManager_stub TargetManager_svnt DomainApplicationManager
-
+ libs += TargetManager_stub \
+ TargetManager_svnt \
+ DomainApplicationManager \
+ NodeManager_stub
+
+
includes += $(CIAO_ROOT)/DomainApplicationManager
-
+
idlflags += -Wb,export_macro=TARGETMANAGER_EXEC_Export -Wb,export_include=TargetManager_exec_export.h
dynamicflags = TARGETMANAGER_EXEC_BUILD_DLL
Source_Files {
- DomainDataManager.cpp
+ DomainDataManager.cpp
TargetManager_exec.cpp
}
diff --git a/TAO/CIAO/DAnCE/TargetManager/TargetManagerExt.idl b/TAO/CIAO/DAnCE/TargetManager/TargetManagerExt.idl
index cc9443b3c51..17311a60120 100644
--- a/TAO/CIAO/DAnCE/TargetManager/TargetManagerExt.idl
+++ b/TAO/CIAO/DAnCE/TargetManager/TargetManagerExt.idl
@@ -1,20 +1,26 @@
// $Id$
-/**
+/**
* @file TargetManagerExt.idl
*
* @brief The Extensions to the TM interface for ARMS demo
*
+ * @author Nilabja R <nilabjar@dre.vanderbilt.edu>
+ * @author Nishanth Shankaran <nshankar@dre.vanderbilt.edu>
+ *
* This file declares a interface which will be implemented as
* a facet by the TargetManager component
*/
/**
* @module CIAO
- *
+ *
* @brief The CIAO module
*/
+//#include <ciao/Deployment.idl>
+#include <DAnCE/Interfaces/NodeManager.idl>
+
module CIAO
{
/**
@@ -43,6 +49,20 @@ module CIAO
/// The sequence of component cpu utilization
typedef sequence <Component_Info> Component_Infos;
+
+ /**
+ * @struct Host_NodeManager
+ * @brief Contains the node manager to host reference
+ */
+ struct Host_NodeManager
+ {
+ string host_;
+ ::CIAO::NodeManager node_mgr_;
+ };
+
+ /// Sequence of NodeManager.
+ typedef sequence <Host_NodeManager> Host_NodeManager_seq;
+
/**
* @interface TargetManagerExt
* @brief The Target Manager Extension
@@ -55,5 +75,6 @@ module CIAO
long get_pid (in string component_uuid);
Host_Infos get_host_cpu ();
Component_Infos get_component_cpu ();
+ Host_NodeManager_seq get_all_node_managers ();
};
};
diff --git a/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.cpp b/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.cpp
index 552197adf0e..7fe8f24a707 100644
--- a/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.cpp
+++ b/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.cpp
@@ -41,7 +41,8 @@ namespace CIDL_TargetManager_i
CIAO::TargetManagerImpl::_narrow (object.in ());
::Deployment::TargetManager_var target =
target_impl->provide_targetMgr ();
- dataManager_.reset (new CIAO::DomainDataManager (orb, target.in ()));
+ // dataManager_.reset (new CIAO::DomainDataManager (orb, target.in ()));
+ CIAO::DomainDataManager::create (orb, target.in());
}
TargetManager_exec_i::~TargetManager_exec_i (void)
@@ -55,7 +56,8 @@ namespace CIDL_TargetManager_i
ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- return dataManager_->get_initial_domain ();
+ return CIAO::DomainDataManager::
+ get_data_manager ()->get_initial_domain ();
}
::Deployment::Domain *
@@ -63,28 +65,31 @@ namespace CIDL_TargetManager_i
ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- return dataManager_->get_current_domain ();
+ return CIAO::DomainDataManager::
+ get_data_manager ()->get_current_domain ();
}
void
TargetManager_exec_i::commitResources (
- const ::Deployment::DeploymentPlan & /* plan */
+ const ::Deployment::DeploymentPlan & plan
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((
::CORBA::SystemException,
::Deployment::ResourceNotAvailable,
::Deployment::PlanError))
{
- throw CORBA::NO_IMPLEMENT ();
+ return CIAO::DomainDataManager::
+ get_data_manager ()->commitResources (plan);
}
void
TargetManager_exec_i::releaseResources (
- const ::Deployment::DeploymentPlan & /* argname */
+ const ::Deployment::DeploymentPlan & plan
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- throw CORBA::NO_IMPLEMENT ();
+ return CIAO::DomainDataManager::
+ get_data_manager ()->releaseResources (plan);
}
void
@@ -100,7 +105,8 @@ namespace CIDL_TargetManager_i
{
ACE_DEBUG ((LM_DEBUG , ".. Update Domain called ...\n"));
}
- dataManager_->update_domain (
+ CIAO::DomainDataManager::
+ get_data_manager ()->update_domain (
elements,
domainSubset,
updateKind
@@ -124,13 +130,14 @@ namespace CIDL_TargetManager_i
::CORBA::Long
TargetManagerExt_exec_i::get_pid (
- const char * /* component_uuid */
+ const char * component_uuid
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
// Your code here.
ACE_DEBUG ((LM_DEBUG, "Get PID :: Skeleton Impl"));
- return 0;
+ return CIAO::DomainDataManager::
+ get_data_manager ()->get_pid (component_uuid);
}
::CIAO::Host_Infos *
@@ -139,8 +146,9 @@ namespace CIDL_TargetManager_i
ACE_THROW_SPEC ((CORBA::SystemException))
{
// Your code here.
- ACE_DEBUG ((LM_DEBUG, "Get host cpu :: Skeleton Impl"));
- return 0;
+ ACE_DEBUG ((LM_DEBUG, "Get host cpu :: Skeleton Impl entering\n"));
+ return CIAO::DomainDataManager::
+ get_data_manager ()->get_cpu_info ();
}
::CIAO::Component_Infos *
@@ -153,6 +161,15 @@ namespace CIDL_TargetManager_i
return 0;
}
+ ::CIAO::Host_NodeManager_seq *
+ TargetManagerExt_exec_i::get_all_node_managers
+ (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+ {
+ return CIAO::DomainDataManager::
+ get_data_manager ()->get_node_managers ();
+ }
+
//==================================================================
// Component Executor Implementation Class: TargetManagerImpl_exec_i
//==================================================================
@@ -198,7 +215,11 @@ namespace CIDL_TargetManager_i
ACE_ENV_SINGLE_ARG_DECL_NOT_USED
) ACE_THROW_SPEC ((CORBA::SystemException))
{
- return new TargetManagerExt_exec_i ();
+ if (this->exec_ext_object_.in () == 0)
+ {
+ this->exec_ext_object_ = new TargetManagerExt_exec_i();
+ }
+ return this->exec_ext_object_.in ();
}
// Operations from Components::SessionComponent
@@ -277,6 +298,10 @@ namespace CIDL_TargetManager_i
::Components::CCMException))
{
// Your code here.
+ ACE_DEBUG ((LM_DEBUG , "TM::ccm_remove , calling LeaveDomain\n"));
+ return CIAO::DomainDataManager::
+ get_data_manager ()->stop_monitors ();
+ ACE_DEBUG ((LM_DEBUG , "TM::ccm_remove , After calling LeaveDomain\n"));
}
@@ -322,7 +347,7 @@ namespace CIDL_TargetManager_i
}
extern "C" TARGETMANAGER_EXEC_Export ::Components::HomeExecutorBase_ptr
- createTargetManagerHome_Impl (void)
+ create_CIAO_TargetManagerHome_Impl (void)
{
::Components::HomeExecutorBase_ptr retval =
::Components::HomeExecutorBase::_nil ();
diff --git a/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.h b/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.h
index a756f67ec5e..1b3b7b0e470 100644
--- a/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.h
+++ b/TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.h
@@ -47,7 +47,7 @@ namespace CIDL_TargetManager_i
ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException));
- virtual ::CIAO::CCM_TargetManagerExt_ptr
+ virtual ::CIAO::CCM_TargetManagerExt_ptr
get_target_manager_ext (
ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
)
@@ -104,6 +104,8 @@ namespace CIDL_TargetManager_i
/// The exec Object
::Deployment::CCM_TargetManager_var exec_object_;
+
+ ::CIAO::CCM_TargetManagerExt_var exec_ext_object_;
};
class TARGETMANAGER_EXEC_Export TargetManagerExt_exec_i
@@ -131,6 +133,11 @@ namespace CIDL_TargetManager_i
get_component_cpu (
ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual ::CIAO::Host_NodeManager_seq *
+ get_all_node_managers (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
};
class TARGETMANAGER_EXEC_Export TargetManager_exec_i
@@ -221,7 +228,7 @@ namespace CIDL_TargetManager_i
};
extern "C" TARGETMANAGER_EXEC_Export ::Components::HomeExecutorBase_ptr
- createTargetManagerHome_Impl (void);
+ create_CIAO_TargetManagerHome_Impl (void);
}
#include /**/ "ace/post.h"
diff --git a/TAO/CIAO/DAnCE/TargetManager/descriptors/Domain.cdd b/TAO/CIAO/DAnCE/TargetManager/descriptors/Domain.cdd
index 382f7f6b83b..fe21a4b48f5 100644
--- a/TAO/CIAO/DAnCE/TargetManager/descriptors/Domain.cdd
+++ b/TAO/CIAO/DAnCE/TargetManager/descriptors/Domain.cdd
@@ -18,6 +18,7 @@
<property>
<name>LoadAverage</name>
<kind>Quantity</kind>
+ <dynamic>true</dynamic>
<value>
<type>
<kind>tk_long</kind>
@@ -36,6 +37,7 @@
<property>
<name>LoadAverage</name>
<kind>Quantity</kind>
+ <dynamic>true</dynamic>
<value>
<type>
<kind>tk_long</kind>
@@ -57,6 +59,7 @@
<property>
<name>LoadAverage</name>
<kind>Quantity</kind>
+ <dynamic>true</dynamic>
<value>
<type>
<kind>tk_long</kind>
@@ -81,6 +84,7 @@
<property>
<name>LoadAverage</name>
<kind>Quantity</kind>
+ <dynamic>true</dynamic>
<value>
<type>
<kind>tk_long</kind>
diff --git a/TAO/CIAO/DAnCE/TargetManager/descriptors/flattened_deploymentplan.cdp b/TAO/CIAO/DAnCE/TargetManager/descriptors/flattened_deploymentplan.cdp
index be10e2254bf..fae71c39fa1 100644
--- a/TAO/CIAO/DAnCE/TargetManager/descriptors/flattened_deploymentplan.cdp
+++ b/TAO/CIAO/DAnCE/TargetManager/descriptors/flattened_deploymentplan.cdp
@@ -10,7 +10,7 @@
<label>BasicSP-realizes-cid</label>
<UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID>
<specificType><!-- @@ What does here? --></specificType>
- <supportedType>IDL:BasicSP/EC:1.0</supportedType>
+ <supportedType>IDL:BasicSP/EC:1.0</supportedType>
<port>
<name>read_message</name>
<specificType>IDL:Hello/ReadMessage:1.0</specificType>
@@ -53,7 +53,7 @@
</instance>
<!-- @@ Runtime library name must match exactly in "location" tag -->
-
+
<artifact id="TargetManager_exec">
<name>TargetManager_exec</name>
<source><!-- @@ Not sure about this--></source>
@@ -66,12 +66,12 @@
<kind>tk_string</kind>
</type>
<value>
- <string>createTargetManagerHome_Impl</string>
+ <string>create_CIAO_TargetManagerHome_Impl</string>
</value>
</value>
</execParameter>
</artifact>
-
+
<artifact id="TargetManager_svnt">
<name>TargetManager_svnt</name>
<source><!-- @@ Not sure --></source>
@@ -89,4 +89,4 @@
</value>
</execParameter>
</artifact>
-</Deployment:deploymentPlan>
+</Deployment:deploymentPlan>