diff options
Diffstat (limited to 'CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp')
-rw-r--r-- | CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp | 548 |
1 files changed, 235 insertions, 313 deletions
diff --git a/CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp b/CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp index 8482e036a32..14bae91a2b9 100644 --- a/CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp +++ b/CIAO/DAnCE/TM_Daemon/DomainDataManager.cpp @@ -4,376 +4,298 @@ #include "tools/Config_Handlers/DD_Handler.h" #include "tools/Config_Handlers/DnC_Dump.h" #include "ciao/CIAO_common.h" - -#include "Profile_Code.h" - #include <orbsvcs/CosNamingC.h> +#include "utils/Exceptions.h" -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) +namespace CIAO { - if (global_data_manager_ == 0) + DomainDataManager::DomainDataManager (CORBA::ORB_ptr orb, + const char* dat_file) + : orb_ (CORBA::ORB::_duplicate (orb)), + deployment_config_ (orb_.in()), + delay_ (utils::Timer ("delay")), + dat_file_ (dat_file) { - global_data_manager_ = new DomainDataManager (orb , target, dat_file); - } - return global_data_manager_; -} - -// Returns the pointer to the static variable -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 update_kind) -{ - // Update the subset of the domain which the above - // parameter corresponds to - - // ACE_DEBUG ((LM_DEBUG, "[TM] Update domain called\n")); - - //check the type of update .. - - this->update_dynamic (domainSubset); + // @@ TODO need to make the domain filename as a command param. + CIAO::Config_Handlers::DD_Handler dd ("Domain.cdd"); + ::Deployment::Domain* dmn = dd.domain_idl (); + current_domain_ = *dmn; + initial_domain_ = current_domain_; -// switch (update_kind) -// { -// case ::Deployment::UpdateAll: -// case ::Deployment::UpdateDynamic: -// this->update_dynamic (domainSubset); -// break; + //this->current_domain_ = *dd.domain_idl (); + //this->initial_domain_ = *dd.domain_idl (); -// case ::Deployment::Add: -// ex_occur = true; -// break; -// default: -// return 1; -// } - return 0; - -} - -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]; - - int temp_count; + // set up the profile timers for each node + for (CORBA::ULong i = 0; i < this->current_domain_.node.length (); ++i) + { - this->mutex_.acquire (); - this->response_count_++; - temp_count = this->response_count_; - this->mutex_.release (); +// utils::Timer temp (this->current_domain_.node[i].name.in ()); +// std::pair <std::string, utils::Timer> pair; +// pair.first = this->current_domain_.node[i].name.in (); +// pair.second = temp; +// this->node_timers_.insert (pair); - if (temp_count == current_domain_.node.length ()) - { - // 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++) + this->node_timers_ [this->current_domain_.node[i].name.in ()] = + new utils::Timer (this->current_domain_.node[i].name.in ()); + } + if (this->call_all_node_managers () != 0) { - (*itr).second->dump (); + throw new utils::Initialization_Exception (); } - this->got_all_response_ = true; + // Wait for all the monitors to upload their obj. refs + sleep (10); + this->get_monitor_obj_ref (); } -// CORBA::Double load; -// domainSubset.node[0].resource[0].property[0].value >>= load; -// ACE_DEBUG ((LM_DEBUG, "The current load is %f\n", load)); - - - profile_nodes_[domainSubset.node[0].name.in ()]->stop (); - - -// CORBA::ULong response_time; - -// domainSubset.node[0].qos_seq[0].value >>= response_time; - -// ACE_DEBUG ((LM_DEBUG, "The response time is %u\n", response_time)); - - return 0; -} - -CIAO::DomainDataManager:: -DomainDataManager (CORBA::ORB_ptr orb, - ::Deployment::TargetManager_ptr target, - const char* dat_file) - : orb_ (CORBA::ORB::_duplicate (orb)), - deployment_config_ (orb_.in()), - dat_file_ (dat_file), - profile_ (new Profile_Code ("Tst")) -{ - CIAO::Config_Handlers::DD_Handler dd (domain_file_name); - ::Deployment::Domain* dmn = dd.domain_idl (); - - if (CIAO::debug_level () > 9) - ::Deployment::DnC_Dump::dump (*dmn); - - current_domain_ = *dmn; - initial_domain_ = current_domain_; - - // update_node_status (); - - // 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 ()); - } - - call_all_node_managers (); -} - -int CIAO::DomainDataManager::readin_domain_data () -{ - // here read in Domain data ... - // - return 0; -} - -int CIAO::DomainDataManager::call_all_node_managers () -{ - if ( this->deployment_config_.init (this->dat_file_.c_str ()) == -1 ) + int + DomainDataManager::call_all_node_managers () { - ACE_ERROR ((LM_ERROR, - "TargetM (%P|%t) DomainDataManager.cpp -" - "CIAO::DomainDataManager::call_all_node_managers -" - "ERROR while trying to initialize after reading " - "node details DAT file \n")); - return 0; - } - - CORBA::ULong const length = initial_domain_.node.length (); - - for (CORBA::ULong 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&) + if (this->deployment_config_.init (this->dat_file_.c_str ()) == -1 ) { - ACE_ERROR ((LM_ERROR, "DANCE::TM (%P|%t) DomainDataManager.cpp: " - "Error trying to contact NodeManager %s\n", - initial_domain_.node[i].name.in ())); - continue; + ACE_ERROR ((LM_ERROR, + "TM::DomainDataManager.cpp:" + "call_all_node_managers(): " + "ERROR while trying to initialize after reading " + "node details DAT file \n")); + return -1; } - - if (!CORBA::is_nil (node_manager.in ())) + for (CORBA::ULong i = 0; i < this->initial_domain_.node.length (); ++i) { - Deployment::Logger_ptr log = - Deployment::Logger::_nil (); - ::Deployment::Domain sub_domain; - sub_domain.UUID = CORBA::string_dup("Node-Level-domain"); - sub_domain.label = CORBA::string_dup("Node-level-domain"); - sub_domain.sharedResource.length(0); - sub_domain.interconnect.length(0); - sub_domain.bridge.length(0); - sub_domain.infoProperty.length(0); - sub_domain.node.length (1); - sub_domain.node[0] = initial_domain_.node[i]; + ::Deployment::NodeManager_var node_manager; try { - ACE_DEBUG ((LM_DEBUG, "CAlling Join DOmain\n")); - node_manager->joinDomain (sub_domain, - NULL, - log); + node_manager = + deployment_config_.get_node_manager (this->initial_domain_.node[i].name.in ()); } catch (CORBA::Exception& ex) { - ACE_ERROR ((LM_ERROR , "TM::Error in calling Join Domain==\n")); - ex._tao_print_exception ( - "Exception caught in ""DomainDataManager::joinDomain"); + std::string msg = "TM::DomainDataManager.cpp:call_all_node_managers(): " + "Error trying to contact nodemanager "; + msg += this->initial_domain_.node[i].name.in (); + msg += "\n"; + ACE_PRINT_EXCEPTION (ex, msg.c_str ()); + return -1; } - } - } - return 0; -} + if (!CORBA::is_nil (node_manager.in ())) + { + Deployment::Logger_ptr log = + Deployment::Logger::_nil (); + ::Deployment::Domain sub_domain; + sub_domain.UUID = CORBA::string_dup("Node-Level-domain"); + sub_domain.label = CORBA::string_dup("Node-level-domain"); + sub_domain.sharedResource.length(0); + sub_domain.interconnect.length(0); + sub_domain.bridge.length(0); + sub_domain.infoProperty.length(0); + sub_domain.node.length (1); + sub_domain.node[0] = initial_domain_.node[i]; + try + { + node_manager->joinDomain (sub_domain, NULL, log); + } + catch (CORBA::Exception& ex) + { + std::string msg = "TM::DomainDataManager.cpp:call_all_node_managers(): " + "Error in invoking join domaintrying on "; + msg += this->initial_domain_.node[i].name.in (); + msg += "\n"; + ACE_PRINT_EXCEPTION (ex, msg.c_str ()); + return -1; + } + } + else + { + ACE_ERROR ((LM_ERROR, + "TM::DomainDataManager.cpp:" + "call_all_node_managers(): " + "Object ref. for %s is nil!\n", + this->initial_domain_.node[i].name.in ())); + return -1; + } + } + return 0; + } -void CIAO::DomainDataManager::stop_monitors () -{ - - CORBA::ULong length = initial_domain_.node.length (); - for (CORBA::ULong i=0;i < length;i++) + int + DomainDataManager::update_domain (const ::CORBA::StringSeq &, + const ::Deployment::Domain & domainSubset, + ::Deployment::DomainUpdateKind /*update_kind*/) { - ::Deployment::NodeManager_var node_manager; + // Update the subset of the domain which the above + // parameter corresponds to + // ACE_DEBUG ((LM_DEBUG, "[TM] Update domain called\n")); + + //check the type of update .. + + return 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; + // } + } - try - { - node_manager = - deployment_config_.get_node_manager - (initial_domain_.node[i].name.in ()); - } - catch (CORBA::Exception&) - { - 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; - } + int + 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]; + this->mutex_.acquire (); + this->response_count_++; + CORBA::ULong temp_count = this->response_count_; + this->mutex_.release (); - if (!CORBA::is_nil (node_manager.in ())) + if (temp_count == this->current_domain_.node.length ()) { - try + // all responses have come in .... now timestamp the event + this->delay_.stop (); + this->delay_.dump (); + for (std::map<std::string, utils::Timer*>::iterator itr = this->node_timers_.begin (); + itr != this->node_timers_.end (); + itr++) { - node_manager->leaveDomain (); - } - catch (CORBA::Exception& ex) - { - ACE_ERROR ((LM_ERROR , "TM::Error in calling Leave Domain\n")); - ex._tao_print_exception ( - "Exception caught in ""DomainDataManager::leaveDomain"); + (*itr).second->dump (); + } } - } - return; - -} - -int CIAO::DomainDataManager::get_monitor_obj_ref () -{ - // here we have to extract the monitors from the NS - CORBA::Object_var naming_context_object = - orb_->resolve_initial_references ("NameService"); - - CosNaming::NamingContext_var naming_context = - CosNaming::NamingContext::_narrow (naming_context_object.in ()); - - for (CORBA::ULong i = 0;i < initial_domain_.node.length ();i++) - { - CosNaming::Name name (2); - name.length (2); - name[0].id = CORBA::string_dup ("Node_Monitor"); - name[1].id = CORBA::string_dup (initial_domain_.node[i].name); - - CORBA::Object_var object = - naming_context->resolve (name); - node_monitors_.push_back (Onl_Monitor::NM_Monitor::_narrow (object.in ())); - } - return 0; + // CORBA::Double load; + // domainSubset.node[0].resource[0].property[0].value >>= load; + // ACE_DEBUG ((LM_DEBUG, "The current load is %f\n", load)); + this->node_timers_[domainSubset.node[0].name.in ()]->stop (); + // CORBA::ULong response_time; + // domainSubset.node[0].qos_seq[0].value >>= response_time; + // ACE_DEBUG ((LM_DEBUG, "The response time is %u\n", response_time)); -} + return 0; + } -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 (); - this->profile_->start (); + void + CIAO::DomainDataManager::stop_monitors () + { - for (int i = 0;i < node_monitors_.size ();i++) - { + for (CORBA::ULong i = 0; i < this->initial_domain_.node.length (); i++) + { + ::Deployment::NodeManager_var node_manager; + try + { + node_manager = + this->deployment_config_.get_node_manager + (this->initial_domain_.node[i].name.in ()); + } + catch (CORBA::Exception& ex) + { + std::string msg = "TM::DomainDataManager.cpp:call_all_node_managers(): " + "Error trying to contact nodemanager "; + msg += this->initial_domain_.node[i].name.in (); + msg += "\n"; + ACE_PRINT_EXCEPTION (ex, msg.c_str ()); + continue; + } + + + if (!CORBA::is_nil (node_manager.in ())) + { + try + { + node_manager->leaveDomain (); + } + catch (CORBA::Exception& ex) + { + std::string msg = "TM::DomainDataManager.cpp:call_all_node_managers(): " + "Error in invoking leavedomain on "; + msg += this->initial_domain_.node[i].name.in (); + msg += "\n"; + ACE_PRINT_EXCEPTION (ex, msg.c_str ()); + } + } + } + return; + } - profile_nodes_[current_domain_.node[i].name.in ()]->start (); - node_monitors_[i]->sendc_get_resource_data (handler); - } -} -bool CIAO::DomainDataManager::got_all_response () -{ - return got_all_response_; -} + int + CIAO::DomainDataManager::get_monitor_obj_ref () + { + try + { -int -CIAO::DomainDataManager:: -start_monitor_qos (Onl_Monitor::AMI_NM_MonitorHandler_ptr handler, - ::Deployment::DeploymentPlan& plan) -{ - for (int i = 0;i < node_monitors_.size ();i++) - { - node_monitors_[i]->sendc_monitor_app_QoS (handler, plan); - } - return 0; + // here we have to extract the monitors from the NS + CORBA::Object_var naming_context_object = + this->orb_->resolve_initial_references ("NameService"); -} + CosNaming::NamingContext_var naming_context = + CosNaming::NamingContext::_narrow (naming_context_object.in ()); -void -CIAO::DomainDataManager:: -write_snapshot () -{ + for (CORBA::ULong i = 0; i < this->initial_domain_.node.length (); ++i) + { + CosNaming::Name name (2); + name.length (2); + name[0].id = CORBA::string_dup ("Node_Monitor"); + name[1].id = CORBA::string_dup (initial_domain_.node[i].name); + CORBA::Object_var object = + naming_context->resolve (name); + this->node_monitors_.push_back (Onl_Monitor::NM_Monitor::_narrow (object.in ())); + } + return 0; + } + catch (CORBA::Exception &ex) + { - if (ex_occur) - return; - std::ofstream out ("Snapshot", std::ios::app); + ACE_PRINT_EXCEPTION (ex, "TM::DomainDataManager.cpp:get_monitor_obj_ref(): " + "Exception caught."); + return -1; + } + } - out << "----------------------------------------------------" - << std::endl; - for (CORBA::ULong i = 0; - i < this->current_domain_.node.length (); - i++) + void + CIAO::DomainDataManager::get_all_data (Onl_Monitor::AMI_NM_MonitorHandler_ptr + handler) { - out << "Node" - << "\t" - << this->current_domain_.node[i].name.in () - << std::endl; + this->mutex_.acquire (); + this->response_count_ = 0; + this->mutex_.release (); - CORBA::ULong response_time; + this->delay_.start (); - current_domain_.node[i].qos_seq[0].value >>= response_time; + for (CORBA::ULong i = 0; i < this->node_monitors_.size (); ++i) + { - CORBA::Double cpu_load; - CORBA::Double na_load; + this->node_timers_[this->current_domain_.node[i].name.in ()]->start (); + this->node_monitors_[i]->sendc_get_resource_data (handler); + } + } - for (CORBA::ULong j =0; - j < current_domain_.node[i].resource.length (); - j++) - { - if (!strcmp (current_domain_.node[0].resource[j].name.in (), "NA_Monitor")) - current_domain_.node[i].resource[j].property[0].value >>= na_load; - if (!strcmp (current_domain_.node[0].resource[j].name.in (), "Processor")) - current_domain_.node[i].resource[j].property[0].value >>= cpu_load; + int + CIAO::DomainDataManager:: + start_monitor_qos (Onl_Monitor::AMI_NM_MonitorHandler_ptr handler, + ::Deployment::DeploymentPlan& plan) + { + for (CORBA::ULong i = 0; i < this->node_monitors_.size (); ++i) + { + this->node_monitors_[i]->sendc_monitor_app_QoS (handler, plan); } + return 0; - out << cpu_load - << "\t" - << na_load - << "\t" - << response_time - << std::endl; } - - out.close (); -} + } |