def _do_migrate_nodes(self, migration_plan, delay): self.logger.info("Migration: starting with plan %s and delay %s." % (migration_plan, delay)) # TODO: use instead collections.Counter with Python 2.7 clouds = [dest_cloud for (_node, dest_cloud) in migration_plan] new_vm_nb = collections.defaultdict(int) for cloud in clouds: new_vm_nb[cloud] += 1 try: new_nodes = [] # TODO: make it parallel for cloud, count in new_vm_nb.iteritems(): self.controller.add_context_replacement(dict(mysql_username='******', mysql_password=self.root_pass), cloud=cloud) new_nodes.extend(self.controller.create_nodes(count, agent.check_agent_process, self.config.AGENT_PORT, cloud)) self._start_mysqld(new_nodes, cloud) self.config.addMySQLServiceNodes(new_nodes) except Exception, ex: # error happened: rolling back... for node in new_nodes: agent.stop(node.ip, self.config.AGENT_PORT) self.controller.delete_nodes(new_nodes) self.config.remove_nodes(new_nodes) self.logger.exception('_do_migrate_nodes: Could not' ' start nodes: %s' % ex) self.state = self.S_RUNNING raise ex
def _do_migrate_finalize(self, old_nodes): self.state = self.S_ADAPTING for node in old_nodes: agent.stop(node.ip, self.config.AGENT_PORT) self.controller.delete_nodes(old_nodes) self.config.remove_nodes(old_nodes) self.state = self.S_RUNNING self.logger.info("Migration: old nodes %s have been removed." " END of migration." % old_nodes)
def _do_remove_nodes(self,rm_reg_nodes,rm_glb_nodes): glb_nodes = self.config.get_glb_nodes() nodesIp = ["%s:%s" % (node.ip, self.config.MYSQL_PORT) # FIXME: find real mysql port instead of default 3306 for node in rm_reg_nodes] for glb in glb_nodes: agent.remove_glbd_nodes(glb.ip, self.config.AGENT_PORT, nodesIp) nodes = rm_reg_nodes + rm_glb_nodes for node in nodes: agent.stop(node.ip, self.config.AGENT_PORT) for node in rm_reg_nodes: volume_id=self.volumes_dict[node.ip] self.detach_volume(volume_id) self.destroy_volume(volume_id) self.controller.delete_nodes(nodes) self.config.remove_nodes(nodes) if (len(self.config.get_nodes()) +len(self.config.get_glb_nodes())==0 ): self.state=self.S_STOPPED else : self.state = self.S_RUNNING
def _do_add_nodes(self, node_type, count, cloud=None): try: start_cloud = self._init_cloud(cloud) self.controller.add_context_replacement(dict(mysql_username='******', mysql_password=self.root_pass), cloud=start_cloud) node_instances = self.controller.create_nodes(count, agent.check_agent_process, self.config.AGENT_PORT, start_cloud) if node_type == self.REGULAR_NODE: self._start_mysqld(node_instances, start_cloud) self.config.addMySQLServiceNodes(node_instances) elif node_type == self.GLB_NODE: self._start_glbd(node_instances) self.config.addGLBServiceNodes(node_instances) except Exception, ex: # rollback for node in node_instances: agent.stop(node.ip, self.config.AGENT_PORT) self.controller.delete_nodes(node_instances) self.logger.exception('Could not add nodes: %s' % ex)
def _do_remove_nodes(self, nodes): for node in nodes: agent.stop(node.ip, self.config.AGENT_PORT) self.controller.delete_nodes(nodes) self.config.remove_nodes(nodes) self.state = self.S_RUNNING