diff options
Diffstat (limited to 'TAO/CIAO/DAnCE/TargetManager')
-rw-r--r-- | TAO/CIAO/DAnCE/TargetManager/CmpClient.cpp | 83 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/TargetManager/DomainDataManager.cpp | 467 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/TargetManager/DomainDataManager.h | 157 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/TargetManager/TM_Client.mpc | 8 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/TargetManager/TargetManager.mpc | 21 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/TargetManager/TargetManagerExt.idl | 25 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.cpp | 53 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/TargetManager/TargetManager_exec.h | 11 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/TargetManager/descriptors/Domain.cdd | 4 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/TargetManager/descriptors/flattened_deploymentplan.cdp | 10 |
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> |