From 7a6b9fc9756722c64f8e474e974b7e02d09713d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Wed, 4 Aug 2010 18:14:59 +0200 Subject: [PATCH] feature #282: Scheduler now builds objects from the pool dump xmls, instead of querying the core for each one individually. --- src/scheduler/include/HostXML.h | 6 ++- src/scheduler/include/VirtualMachineXML.h | 8 +++ src/scheduler/src/pool/HostPoolXML.cc | 39 +-------------- .../src/pool/VirtualMachinePoolXML.cc | 49 +++---------------- src/scheduler/src/pool/VirtualMachineXML.cc | 10 ++++ 5 files changed, 32 insertions(+), 80 deletions(-) diff --git a/src/scheduler/include/HostXML.h b/src/scheduler/include/HostXML.h index 18f4b97939..50515daaaf 100644 --- a/src/scheduler/include/HostXML.h +++ b/src/scheduler/include/HostXML.h @@ -25,12 +25,16 @@ using namespace std; class HostXML : public ObjectXML { public: - HostXML(const string &xml_doc):ObjectXML(xml_doc) { init_attributes(); }; + HostXML(const xmlNodePtr node):ObjectXML(node) + { + init_attributes(); + }; + int get_hid() const { return oid; diff --git a/src/scheduler/include/VirtualMachineXML.h b/src/scheduler/include/VirtualMachineXML.h index 96428fdab9..4d7672ff67 100644 --- a/src/scheduler/include/VirtualMachineXML.h +++ b/src/scheduler/include/VirtualMachineXML.h @@ -28,8 +28,11 @@ using namespace std; class VirtualMachineXML : public ObjectXML { public: + VirtualMachineXML(const string &xml_doc); + VirtualMachineXML(const xmlNodePtr node); + ~VirtualMachineXML(); @@ -94,6 +97,11 @@ public: protected: + /** + * For constructors + */ + void init(); + //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- struct Host diff --git a/src/scheduler/src/pool/HostPoolXML.cc b/src/scheduler/src/pool/HostPoolXML.cc index ddaccb64ce..4b1e8aaa32 100644 --- a/src/scheduler/src/pool/HostPoolXML.cc +++ b/src/scheduler/src/pool/HostPoolXML.cc @@ -55,44 +55,9 @@ void HostPoolXML::add_object(xmlNodePtr node) return; } - xmlChar * str_ptr = xmlNodeGetContent(node->children); - istringstream iss(reinterpret_cast(str_ptr)); + HostXML* host = new HostXML( node ); - int hid; - xmlrpc_c::value result; - - iss >> hid; - xmlFree(str_ptr); - - client->call(client->get_endpoint(), // serverUrl - "one.host.info", // methodName - "si", // arguments format - &result, // resultP - client->get_oneauth().c_str(), // argument 0 - hid); // argument 1 - - vector values = - xmlrpc_c::value_array(result).vectorValueValue(); - - bool success = xmlrpc_c::value_boolean( values[0] ); - string message = xmlrpc_c::value_string( values[1] ); - - if( !success ) - { - ostringstream oss; - - oss << "ONE returned error while retrieving info for Host " << hid; - oss << ":" << endl; - oss << message; - - NebulaLog::log("HOST",Log::ERROR,oss); - } - else - { - HostXML* host = new HostXML( message ); - - objects.insert( pair(hid, host) ); - } + objects.insert( pair(host->get_hid(), host) ); } /* -------------------------------------------------------------------------- */ diff --git a/src/scheduler/src/pool/VirtualMachinePoolXML.cc b/src/scheduler/src/pool/VirtualMachinePoolXML.cc index 93667fd186..0714926e7e 100644 --- a/src/scheduler/src/pool/VirtualMachinePoolXML.cc +++ b/src/scheduler/src/pool/VirtualMachinePoolXML.cc @@ -55,53 +55,18 @@ void VirtualMachinePoolXML::add_object(xmlNodePtr node) return; } - xmlChar * str_ptr = xmlNodeGetContent(node->children); - istringstream iss(reinterpret_cast(str_ptr)); - - int vid; - xmlrpc_c::value result; - - iss >> vid; - xmlFree(str_ptr); - - client->call(client->get_endpoint(), // serverUrl - "one.vm.info", // methodName - "si", // arguments format - &result, // resultP - client->get_oneauth().c_str(), // argument 0 - vid); // argument 1 - - vector values = - xmlrpc_c::value_array(result).vectorValueValue(); - - bool success = xmlrpc_c::value_boolean( values[0] ); - string message = xmlrpc_c::value_string( values[1] ); - - if( !success ) + try { - ostringstream oss; + VirtualMachineXML* vm = new VirtualMachineXML( node ); - oss << "ONE returned error while retrieving info for VM " << vid; - oss << ":" << endl; - oss << message; - - NebulaLog::log("VM",Log::ERROR,oss); + objects.insert( pair(vm->get_oid(), vm) ); } - else + catch(runtime_error& re) { - try - { - VirtualMachineXML* vm = new VirtualMachineXML( message ); + ostringstream oss_re; - objects.insert( pair(vid, vm) ); - } - catch(runtime_error& re) - { - ostringstream oss_re; - - oss_re << re.what(); - NebulaLog::log("VM",Log::ERROR,oss_re); - } + oss_re << re.what(); + NebulaLog::log("VM",Log::ERROR,oss_re); } } diff --git a/src/scheduler/src/pool/VirtualMachineXML.cc b/src/scheduler/src/pool/VirtualMachineXML.cc index cae51e9ea4..673557f198 100644 --- a/src/scheduler/src/pool/VirtualMachineXML.cc +++ b/src/scheduler/src/pool/VirtualMachineXML.cc @@ -19,6 +19,16 @@ #include "VirtualMachineXML.h" VirtualMachineXML::VirtualMachineXML(const string &xml_doc):ObjectXML(xml_doc) +{ + init(); +} + +VirtualMachineXML::VirtualMachineXML(const xmlNodePtr node):ObjectXML(node) +{ + init(); +} + +void VirtualMachineXML::init() { vector result;