Beispiel #1
0
    def set_new_assignments(self, paths_assignment_info):
        logger.info("Set new assignment.")
        if self.get_current_reassignment() is not None:
            raise Exception("There is already running assignment.")

        config_api = ConfigAPI()
        consul_api = ConsulAPI()
        logger.info("Delete old assignments.")
        consul_api.delete_assignments()
        session = consul_api.get_new_session_ID(
            config_api.get_assignment_session_name(),
            configuration().get_node_name(), True)
        if consul_api.lock_key(config_api.get_consul_assignment_path(),
                               session, "root"):
            logger.info("Lock assignment root.")
            for path_assignment_info in paths_assignment_info:
                path_assignment_info.status = ReassignPathStatus.pending
                consul_api.set_path_assignment(
                    path_assignment_info,
                    self._get_node_session(path_assignment_info.target_node))
                logger.info(
                    "New assignment for {} ,disk {}, from node {}  and to node {} with status {}"
                    .format(path_assignment_info.ip,
                            path_assignment_info.disk_id,
                            path_assignment_info.node,
                            path_assignment_info.target_node,
                            path_assignment_info.status))
        else:
            logger.error("Can't lock paths assignment key.")
            raise Exception("Can't lock paths assignment key.")
Beispiel #2
0
 def remove_assignment(self):
     consul_api = ConsulAPI()
     if consul_api.get_assignments() is not None:
         consul_api.delete_assignments()