From 9e231f4e576ea43684df553f38aaa583edd78d73 Mon Sep 17 00:00:00 2001 From: Lucia Guevgeozian Odizzio Date: Mon, 27 Jan 2014 10:39:22 +0100 Subject: [PATCH] Removing querying PLC for alive nodes, optimizing waitings --- src/nepi/resources/planetlab/node.py | 55 +++------------------------- 1 file changed, 6 insertions(+), 49 deletions(-) diff --git a/src/nepi/resources/planetlab/node.py b/src/nepi/resources/planetlab/node.py index 9ce3e3bb..00f9ae96 100644 --- a/src/nepi/resources/planetlab/node.py +++ b/src/nepi/resources/planetlab/node.py @@ -233,10 +233,9 @@ class PlanetlabNode(LinuxNode): hostname = self._get_hostname() if hostname: # the user specified one particular node to be provisioned - # check with PLCAPI if it is alive self._hostname = True - node_id = self._query_if_alive(hostname=hostname) - node_id = node_id.pop() + node_id = self._get_nodes_id({'hostname':hostname}) + node_id = node_id.pop()['node_id'] # check that the node is not blacklisted or being provisioned # by other RM @@ -263,12 +262,11 @@ class PlanetlabNode(LinuxNode): # the user specifies constraints based on attributes, zero, one or # more nodes can match these constraints nodes = self._filter_based_on_attributes() - nodes_alive = self._query_if_alive(nodes) # nodes that are already part of user's slice have the priority to # provisioned - nodes_inslice = self._check_if_in_slice(nodes_alive) - nodes_not_inslice = list(set(nodes_alive) - set(nodes_inslice)) + nodes_inslice = self._check_if_in_slice(nodes) + nodes_not_inslice = list(set(nodes) - set(nodes_inslice)) node_id = None if nodes_inslice: @@ -413,13 +411,11 @@ class PlanetlabNode(LinuxNode): nodes_id = self._filter_by_range_attr(attr_name, attr_value, filters, nodes_id) if not filters: - nodes = self.plapi.get_nodes() + nodes = self._get_nodes_id() for node in nodes: nodes_id.append(node['node_id']) - return nodes_id - def _filter_by_fixed_attr(self, filters, nodes_id): """ Query PLCAPI for nodes ids matching fixed attributes defined by the @@ -503,45 +499,6 @@ class PlanetlabNode(LinuxNode): return nodes_id - def _query_if_alive(self, nodes_id=None, hostname=None): - """ - Query PLCAPI for nodes that register activity recently, using filters - related to the state of the node, e.g. last time it was contacted - """ - if nodes_id is None and hostname is None: - msg = "Specify nodes_id or hostname" - raise RuntimeError, msg - - if nodes_id is not None and hostname is not None: - msg = "Specify either nodes_id or hostname" - raise RuntimeError, msg - - # define PL filters to check the node is alive - filters = dict() - filters['run_level'] = 'boot' - filters['boot_state'] = 'boot' - filters['node_type'] = 'regular' - #filters['>last_contact'] = int(time.time()) - 2*3600 - - # adding node_id or hostname to the filters to check for the particular - # node - if nodes_id: - filters['node_id'] = list(nodes_id) - alive_nodes_id = self._get_nodes_id(filters) - elif hostname: - filters['hostname'] = hostname - alive_nodes_id = self._get_nodes_id(filters) - - if len(alive_nodes_id) == 0: - self.fail_node_not_alive(hostname) - else: - nodes_id = list() - for node_id in alive_nodes_id: - nid = node_id['node_id'] - nodes_id.append(nid) - - return nodes_id - def _choose_random_node(self, nodes): """ From the possible nodes for provision, choose randomly to decrese the @@ -572,7 +529,7 @@ class PlanetlabNode(LinuxNode): self._put_node_in_provision(node_id) return node_id - def _get_nodes_id(self, filters): + def _get_nodes_id(self, filters=None): return self.plapi.get_nodes(filters, fields=['node_id']) def _add_node_to_slice(self, node_id): -- 2.47.0