def mark_instance(self, endpoint_name, instance_id, label): # Increment the mark counter. remove_instance = False mark_counters = \ self.zk_conn.read(paths.marked_instance(endpoint_name, instance_id), '{}') mark_counters = json.loads(mark_counters) mark_counter = mark_counters.get(label, 0) mark_counter += 1 if mark_counter >= self.config.mark_maximum(label): # This instance has been marked too many times. There is likely # something really wrong with it, so we'll clean it up. logging.warning("Instance %s for endpoint %s has been marked too many times and" " will be removed. (count=%s)" % (instance_id, endpoint_name, mark_counter)) remove_instance = True self.zk_conn.delete(paths.marked_instance(endpoint_name, instance_id)) else: # Just save the mark counter. logging.info("Instance %s for endpoint %s has been marked (count=%s)" % (instance_id, endpoint_name, mark_counter)) mark_counters[label] = mark_counter self.zk_conn.write(paths.marked_instance(endpoint_name, instance_id), json.dumps(mark_counters)) return remove_instance
def drop_marked_instance(self, endpoint_name, instance_id): """ Delete the marked instance data. """ self.zk_conn.delete(paths.marked_instance(endpoint_name, instance_id))