summaryrefslogtreecommitdiff
path: root/CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp')
-rw-r--r--CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp614
1 files changed, 64 insertions, 550 deletions
diff --git a/CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp b/CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp
index 45f1de77f7a..a3b24bd1c99 100644
--- a/CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp
+++ b/CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp
@@ -9,16 +9,14 @@
#include <orbsvcs/CosNamingC.h>
-#include <fstream>
-
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,
- const char* dat_file
- )
+CIAO::DomainDataManager *
+CIAO::DomainDataManager::create (CORBA::ORB_ptr orb,
+ ::Deployment::TargetManager_ptr target,
+ const char* dat_file)
{
if (global_data_manager_ == 0)
{
@@ -50,116 +48,72 @@ int CIAO::DomainDataManager::update_domain (
// Update the subset of the domain which the above
// parameter corresponds to
- ACE_DEBUG ((LM_DEBUG, "THe update domain called\n"));
+ // ACE_DEBUG ((LM_DEBUG, "[TM] Update domain called\n"));
//check the type of update ..
- ex_occur = false;
+ this->update_dynamic (domainSubset);
+
+// switch (update_kind)
+// {
+// case ::Deployment::UpdateAll:
+// case ::Deployment::UpdateDynamic:
+// this->update_dynamic (domainSubset);
+// break;
+
+// case ::Deployment::Add:
+// ex_occur = true;
+// break;
+// default:
+// return 1;
+// }
+ return 0;
- switch (update_kind)
- {
- case ::Deployment::UpdateAll:
- case ::Deployment::UpdateDynamic:
- break;
- case ::Deployment::Add:
- ex_occur = true;
- //add_to_domain (domainSubset);
- break;
- case ::Deployment::Delete:
- delete_from_domain (domainSubset);
- break;
- default:
- break;
- }
+}
+int
+CIAO::DomainDataManager::update_dynamic (const ::Deployment::Domain
+ &domainSubset)
+{
CORBA::ULong const size = current_domain_.node.length ();
+ this->node_info_map_ [domainSubset.node[0].name.in ()] = domainSubset.node[0];
- if (ex_occur == false)
- {
- ACE_GUARD_RETURN (ACE_Thread_Mutex, guard, lock, 0);
-
- Profile_Code prfTagg ("Tagg");
-
- prfTagg.start ();
-
- CORBA::ULong i;
- for (i=0;i < size;i++)
- {
- if (!ACE_OS::strcmp (domainSubset.node[0].name ,
- current_domain_.node[i].name))
- {
- // found a match
- // for now overwrite the entire Node info ...
- // but later , this has to be changed to overwrite
- // only the specific part ...
- current_domain_.node[i] = domainSubset.node[0];
-
- CORBA::Double load;
- current_domain_.node[i].resource[0].property[0].value >>= load;
- ACE_DEBUG ((LM_DEBUG, "The current load is %f\n", load));
- break; // finished job ...break
- }
- }
- if (i == size)
- {
- // thus the node is new .. add it to current_domain_
- // later change it ...
- current_domain_.node.length (size+1);
- current_domain_.node[size]=domainSubset.node[0];
- }
- prfTagg.stop ();
-
- }
-
-
- profile_nodes_[domainSubset.node[0].name.in ()]->stop ();
+ int temp_count;
+ this->mutex_.acquire ();
this->response_count_++;
+ temp_count = this->response_count_;
+ this->mutex_.release ();
- if (this->response_count_ == current_domain_.node.length ())
+ if (temp_count == current_domain_.node.length ())
{
- this->got_all_response_ = true;
-
// all responses have come in .... now time stamp the event
this->profile_->stop ();
+ this->profile_->dump ();
+ for (std::map<std::string, Profile_Code*>::iterator itr = this->profile_nodes_.begin ();
+ itr != this->profile_nodes_.end ();
+ itr++)
+ {
+ (*itr).second->dump ();
- // now delete the object then file will be closed ..
- delete this->profile_;
- }
+ }
+ this->got_all_response_ = true;
- if (ex_occur = true)
- return 0;
+ }
- CORBA::ULong response_time;
+ // CORBA::Double load;
+ // domainSubset.node[0].resource[0].property[0].value >>= load;
+ // ACE_DEBUG ((LM_DEBUG, "The current load is %f\n", load));
- domainSubset.node[0].qos_seq[0].value >>= response_time;
- ACE_DEBUG ((LM_DEBUG, "The response time is %u\n", response_time));
+ profile_nodes_[domainSubset.node[0].name.in ()]->stop ();
-/*
- CORBA::Double cpu_load;
- CORBA::Double na_load;
- for (CORBA::ULong i =0;
- i < domainSubset.node[0].resource.length ();
- i++)
- {
- if (!strcmp (domainSubset.node[0].resource[i].name.in (), "NA_Monitor"))
- domainSubset.node[0].resource[i].property[0].value >>= na_load;
+ // CORBA::ULong response_time;
- if (!strcmp (domainSubset.node[0].resource[i].name.in (), "Processor"))
- domainSubset.node[0].resource[i].property[0].value >>= cpu_load;
- }
-*/
-// std::ofstream out (domainSubset.node[0].name.in (), std::ios::app);
-// out << cpu_load
-// << "\t"
-// << na_load
-// << "\t"
-// << response_time
-// << std::endl;
+ // domainSubset.node[0].qos_seq[0].value >>= response_time;
-// out.close ();
+ // ACE_DEBUG ((LM_DEBUG, "The response time is %u\n", response_time));
return 0;
}
@@ -170,8 +124,8 @@ DomainDataManager (CORBA::ORB_ptr orb,
const char* dat_file)
: orb_ (CORBA::ORB::_duplicate (orb)),
deployment_config_ (orb_.in()),
- target_mgr_ (::Deployment::TargetManager::_duplicate(target)),
- dat_file_ (dat_file)
+ dat_file_ (dat_file),
+ profile_ (new Profile_Code ("Tst"))
{
CIAO::Config_Handlers::DD_Handler dd (domain_file_name);
::Deployment::Domain* dmn = dd.domain_idl ();
@@ -182,34 +136,19 @@ DomainDataManager (CORBA::ORB_ptr orb,
current_domain_ = *dmn;
initial_domain_ = current_domain_;
- // initialize the provisioning domain
- provisioned_data_ = initial_domain_;
-
- update_node_status ();
+ // update_node_status ();
- // set up the profile timers for each node
+ // set up the profile timers for each node
for (int i = 0;i < current_domain_.node.length ();i++)
{
profile_nodes_[current_domain_.node[i].name.in ()] =
- new Profile_Code (current_domain_.node[i].name.in ());
+ new Profile_Code (current_domain_.node[i].name.in ());
}
-
-
call_all_node_managers ();
}
-::Deployment::Domain* CIAO::DomainDataManager::get_current_domain ()
-{
- return new ::Deployment::Domain (provisioned_data_);
-}
-
-::Deployment::Domain* CIAO::DomainDataManager::get_initial_domain ()
-{
- return new ::Deployment::Domain (initial_domain_);
-}
-
int CIAO::DomainDataManager::readin_domain_data ()
{
// here read in Domain data ...
@@ -268,7 +207,7 @@ int CIAO::DomainDataManager::call_all_node_managers ()
{
ACE_DEBUG ((LM_DEBUG, "CAlling Join DOmain\n"));
node_manager->joinDomain (sub_domain,
- target_mgr_.in (),
+ NULL,
log);
}
catch (CORBA::Exception& ex)
@@ -284,207 +223,6 @@ int CIAO::DomainDataManager::call_all_node_managers ()
}
-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;
-
- // temporary created to guard against exceptions
- ::Deployment::Domain temp_provisioned_data =
- provisioned_data_;
-
- for (CORBA::ULong i = 0;i < plan.instance.length ();i++)
- {
- for (CORBA::ULong j = 0;j < temp_provisioned_data.node.length ();j++)
- {
- if (!ACE_OS::strcmp (plan.instance[i].node.in () ,
- temp_provisioned_data.node[j].name.in ()))
- {
- try {
- match_requirement_resource (
- plan.instance[i].deployedResource,
- temp_provisioned_data.node[j].resource);
- }
- catch (::Deployment::ResourceCommitmentFailure& ex)
- {
- // catch the exception and add parameters
- throw ex;
- }
- }
- }
- }
-
- // here commit the commitresources
- provisioned_data_ = temp_provisioned_data;
-}
-
-
-void CIAO::DomainDataManager::
-releaseResources (
- const ::Deployment::DeploymentPlan& plan)
-{
- // release the resources
-
-
- // set the action value
- current_action_ = release;
-
- for (CORBA::ULong i = 0;i < plan.instance.length ();i++)
- {
- for (CORBA::ULong j = 0;j < provisioned_data_.node.length ();j++)
- {
- if (!ACE_OS::strcmp (plan.instance[i].node.in () ,
- provisioned_data_.node[j].name.in ()))
- {
- 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 (CORBA::ULong i = 0;i < deployed.length ();i++)
- {
- // for each deployed resource ....search the corresponding
- // available resource
- for (CORBA::ULong j = 0;j < available.length ();j++)
- {
- if (!ACE_OS::strcmp (deployed[i].requirementName, available[j].name))
- {
- if (CIAO::debug_level () > 9)
- // search for the resourcename in the resourceType
- for (CORBA::ULong k = 0;k < available[j].resourceType.length ();k++)
- {
- if (!ACE_OS::strcmp (deployed[i].resourceName,
- available[j].resourceType[k]))
- {
- try {
- match_properties (deployed[i].property,
- available[j].property);
- }
- catch (::Deployment::ResourceCommitmentFailure& ex)
- {
- // catch the exception and add parameters
- throw ex;
- }
- }
- }
- }
- }
- }
-
-}
-
-void CIAO::DomainDataManager::
-match_properties (
- ::Deployment::Properties deployed,
- ::Deployment::SatisfierProperties & available)
-{
- bool property_found;
-
- for (CORBA::ULong i = 0;i < deployed.length ();i++)
- {
- property_found = false;
-
- for (CORBA::ULong j = 0;j < available.length ();j++)
- {
- if (!ACE_OS::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 ....
-
- commit_release_resource (deployed[i] , available[j]);
- property_found = true;
- }
- } // internal for ....
-
- // check if property was found or not
- if (property_found == false)
- {
- // throw an error since property was not found in the Resource
- ::Deployment::ResourceCommitmentFailure failure;
-
- failure.reason = CORBA::string_dup ("Property Not Found\n");
- failure.propertyName = CORBA::string_dup (deployed[i].name);
- failure.propertyValue.length (0);
-
- throw failure;
- }
- } // outside for ...
-}
-
-void CIAO::DomainDataManager::commit_release_resource (
- ::Deployment::Property & deployed,
- ::Deployment::SatisfierProperty & available)
-{
- if (current_action_ == commit)
- {
-
- CORBA::Long required_d;
-
- if ((deployed.value >>= required_d) == false)
- ACE_ERROR ((LM_ERROR, "Failed to extract required amount\n"));
-
- CORBA::Long 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;
-
- available.value <<= available_d;
- }
- else
- {
- ::Deployment::ResourceCommitmentFailure failure;
-
- failure.reason = CORBA::string_dup ("Insufficient resources!");
- failure.propertyName = CORBA::string_dup (available.name);
- failure.propertyValue.length (1);
- failure.propertyValue[0] = available.value;
-
- throw failure;
- }
- }
- else
- {
- //must be release
- // @todo check return value of >>=
- CORBA::Long required_d;
- deployed.value >>= required_d;
- CORBA::Long available_d;
- available.value >>= available_d;
-
- available_d = available_d + required_d;
-
- // Should we check for bin > 100 ??????
-
- available.value <<= available_d;
- }
-}
-
void CIAO::DomainDataManager::stop_monitors ()
{
@@ -527,230 +265,6 @@ void CIAO::DomainDataManager::stop_monitors ()
}
-int CIAO::DomainDataManager::add_to_domain (
- const ::Deployment::Domain& domain)
-{
- // here add the domain to the Domain
- // right now use only a node
-
- // got to take care of the fact , that a node can be added ,
- // while it is still in the domain
-
- //iterate through the supplied domain
- //for each node
- // find it in the pristine domain
- // and copy it back to the provisioned_domain
-
- for (CORBA::ULong i = 0;i < domain.node.length ();i++)
- {
- //find in the pristine domain
- ::Deployment::Node a_node;
-
- if (!this->find_in_initial_domain (domain.node[i].name.in (),
- a_node))
- continue; // dont know this node
-
- //check if already present
- if (!this->find_in_provisioned_domain (domain.node[i].name.in (),
- a_node))
- {
- // add the node to the domain ...
- provisioned_data_.node.length (provisioned_data_.node.length () + 1);
- provisioned_data_.node[provisioned_data_.node.length () - 1] =
- a_node;
- }
- }
-
- return 0;
-}
-
-bool CIAO::DomainDataManager::
-find_in_initial_domain (const char* node_name,
- ::Deployment::Node& node)
-{
- for (CORBA::ULong i =0;
- i < this->initial_domain_.node.length ();
- i++)
- {
- if (ACE_OS::strcmp (node_name, this->initial_domain_.node[i].name.in ()) == 0)
- {
- node = this->initial_domain_.node[i];
- return true;
- }
- }
-
- // not found the node , return a node with an empty name
- return false;
-}
-
-
-bool CIAO::DomainDataManager::
-find_in_provisioned_domain (const char* node_name,
- ::Deployment::Node& node)
-{
- for (CORBA::ULong i =0;
- i < this->provisioned_data_.node.length ();
- i++)
- {
- if (ACE_OS::strcmp (node_name, this->provisioned_data_.node[i].name.in ()) == 0)
- {
- node = this->provisioned_data_.node[i];
- return true;
- }
- }
-
- // not found the node , return a node with an empty name
- return false;
-}
-
-int CIAO::DomainDataManager::delete_from_domain (
- const ::Deployment::Domain& domain)
-{
- // validate input
- if (domain.node.length () == 0)
- return 1;
-
- if (domain.node.length () >
- this->provisioned_data_.node.length ())
- return 0;
-
- //algo : parse through the provisioned_data
- // for each node , find in the deleted domain list
- // if not found add it to the updated nodes list
-
- ::Deployment::Nodes updated_nodes;
- bool found = false;
-
- for (CORBA::ULong j = 0;
- j < this->provisioned_data_.node.length ();
- j++)
- {
- found = false;
-
- for (CORBA::ULong i = 0;i < domain.node.length ();i++)
- {
- if (ACE_OS::strcmp (domain.node[i].name.in (),
- this->provisioned_data_.node[j].name.in ()) == 0)
- {
- found = true;
- break; // found the node
- }
- }
- if (found)
- continue;
-
- // not found in the deleted list
-
- // update the length of the list
- updated_nodes.length (updated_nodes.length () + 1);
-
- // copy the node info
- updated_nodes[updated_nodes.length () - 1] =
- this->provisioned_data_.node[j];
-
- } // for provisioned_data
-
- // here update the provisioned data
- this->provisioned_data_.node = updated_nodes;
-
- return 1;
-}
-
-int CIAO::DomainDataManager::intimate_planner (
- const ::Deployment::Domain& domain)
-{
- // use the connection with the planner and get a reference to the planner
- // make a call top the planner
- Deployment::Domain d = domain;
- return 0;
-
-}
-
-bool CIAO::DomainDataManager::update_node_status ()
-{
- // update the node status here ...
- return 0;
-}
-
-void CIAO::DomainDataManager::commitResourceAllocation (
- const ::Deployment::ResourceAllocations & resources)
-{
- // commit the resources
- // parse into the plan and commit resources ...
-
- // set the action value
- current_action_ = commit;
-
- this->commit_release_RA (resources);
-}
-
-void CIAO::DomainDataManager::releaseResourceAllocation (
- const ::Deployment::ResourceAllocations & resources)
-{
- // set the action value
- current_action_ = release;
-
- this->commit_release_RA (resources);
-}
-
-
-int CIAO::DomainDataManager::
-commit_release_RA (const ::Deployment::ResourceAllocations& resources)
-{
- // temporary used to guard against exceptions
- temp_provisioned_data_ = provisioned_data_;
-
-
- for (CORBA::ULong i = 0;i < resources.length ();i++)
- {
- try
- {
- ::Deployment::Resource& res = find_resource (resources[i]);
-
- match_properties (resources[i].property , res.property);
- }
- catch (::Deployment::ResourceCommitmentFailure& ex)
- {
- // catch the exception and add parameters
- ACE_ERROR ((LM_ERROR, "Caught the Exception in releaseResourceAllocation\n"));
- ex.index = i;
- throw ex;
- }
- }
-
- // here commit the commitresources
- provisioned_data_ = temp_provisioned_data_;
-
- return 0;
-}
-
-::Deployment::Resource&
-CIAO::DomainDataManager::find_resource (
- const ::Deployment::ResourceAllocation& resource)
-{
- // for now search the resource in the Node sequence; Later need
- // to add it to the Bridges and Interconnects too according to the
- // spec
- for (CORBA::ULong j = 0;j < this->temp_provisioned_data_.node.length ();j++)
- {
- if (!ACE_OS::strcmp (resource.elementName.in () ,
- this->temp_provisioned_data_.node[j].name.in ()))
- {
- for (CORBA::ULong k =0;
- k < this->temp_provisioned_data_.node[j].resource.length ();
- k++)
- {
- if (!ACE_OS::strcmp (this->temp_provisioned_data_.node[j].resource[k].name.in (),
- resource.resourceName.in ()))
- return this->temp_provisioned_data_.node[j].resource[k];//resource found here, return
- }
-
- // resource not found
- throw ::Deployment::ResourceCommitmentFailure ().reason = CORBA::string_dup ("Resource Not Found\n");
- }
- }
- throw ::Deployment::ResourceCommitmentFailure ().reason = CORBA::string_dup ("Resource Not Found\n");
-}
int CIAO::DomainDataManager::get_monitor_obj_ref ()
{
@@ -772,29 +286,27 @@ int CIAO::DomainDataManager::get_monitor_obj_ref ()
naming_context->resolve (name);
node_monitors_.push_back (Onl_Monitor::NM_Monitor::_narrow (object.in ()));
}
+ return 0;
+
}
-void CIAO::DomainDataManager::get_all_data (Onl_Monitor::AMI_NM_MonitorHandler_ptr handler)
+void
+CIAO::DomainDataManager::get_all_data (Onl_Monitor::AMI_NM_MonitorHandler_ptr
+ handler)
{
this->got_all_response_ = false;
+ this->mutex_.acquire ();
this->response_count_ = 0;
+ this->mutex_.release ();
- Profile_Code profiler ("Tout");
-
- this->profile_ = new Profile_Code ("Tst");
this->profile_->start ();
-
-
for (int i = 0;i < node_monitors_.size ();i++)
{
- profiler.start ();
-
+
profile_nodes_[current_domain_.node[i].name.in ()]->start ();
node_monitors_[i]->sendc_get_resource_data (handler);
-
- profiler.stop ();
}
}
@@ -812,6 +324,8 @@ start_monitor_qos (Onl_Monitor::AMI_NM_MonitorHandler_ptr handler,
{
node_monitors_[i]->sendc_monitor_app_QoS (handler, plan);
}
+ return 0;
+
}
void