示例#1
0
    def ActivateDisks(self, cl):
        """Encapsulates the activation of all disks of an instance.

    """
        op = opcodes.OpInstanceActivateDisks(instance_name=self.name)
        op.reason = [(constants.OPCODE_REASON_SRC_WATCHER,
                      "Activating disks for instance %s" % self.name,
                      utils.EpochNano())]
        cli.SubmitOpCode(op, cl=cl)
示例#2
0
def _VerifyDisks(cl, uuid, nodes, instances):
    """Run a per-group "gnt-cluster verify-disks".

  """
    op = opcodes.OpGroupVerifyDisks(group_name=uuid,
                                    priority=constants.OP_PRIO_LOW)
    op.reason = [(constants.OPCODE_REASON_SRC_WATCHER,
                  "Verifying disks of group %s" % uuid, utils.EpochNano())]
    job_id = cl.SubmitJob([op])
    ((_, offline_disk_instances, _), ) = \
      cli.PollJob(job_id, cl=cl, feedback_fn=logging.debug)
    try:
        cl.ArchiveJob(job_id)
    except Exception as err:
        logging.exception("Error while archiving job %d" % job_id)

    if not offline_disk_instances:
        # nothing to do
        logging.debug("Verify-disks reported no offline disks, nothing to do")
        return

    logging.debug("Will activate disks for instance(s) %s",
                  utils.CommaJoin(offline_disk_instances))

    # We submit only one job, and wait for it. Not optimal, but this puts less
    # load on the job queue.
    job = []
    for name in offline_disk_instances:
        try:
            inst = instances[name]
        except KeyError:
            logging.info("Can't find instance '%s', maybe it was ignored",
                         name)
            continue

        if inst.status in HELPLESS_STATES or _CheckForOfflineNodes(
                nodes, inst):
            logging.info(
                "Skipping instance '%s' because it is in a helpless state"
                " or has offline secondaries", name)
            continue

        op = opcodes.OpInstanceActivateDisks(instance_name=name)
        op.reason = [(constants.OPCODE_REASON_SRC_WATCHER,
                      "Activating disks for instance %s" % name,
                      utils.EpochNano())]
        job.append(op)

    if job:
        job_id = cli.SendJob(job, cl=cl)

        try:
            cli.PollJob(job_id, cl=cl, feedback_fn=logging.debug)
        except Exception:  # pylint: disable=W0703
            logging.exception("Error while activating disks")
示例#3
0
 def BurnActivateDisks(self):
   """Activate and deactivate disks of the instances."""
   Log("Activating/deactivating disks")
   for instance in self.instances:
     Log("instance %s", instance, indent=1)
     op_start = self.StartInstanceOp(instance)
     op_act = opcodes.OpInstanceActivateDisks(instance_name=instance)
     op_deact = opcodes.OpInstanceDeactivateDisks(instance_name=instance)
     op_stop = self.StopInstanceOp(instance)
     Log("activate disks when online", indent=2)
     Log("activate disks when offline", indent=2)
     Log("deactivate disks (when offline)", indent=2)
     self.ExecOrQueue(instance, [op_act, op_stop, op_act, op_deact, op_start])
示例#4
0
    def ActivateDisks(self, cl):
        """Encapsulates the activation of all disks of an instance.

    """
        op = opcodes.OpInstanceActivateDisks(instance_name=self.name)
        cli.SubmitOpCode(op, cl=cl)