示例#1
0
  /**
   * lock Vms which has db entity i.e they are managed by a VmManager
   *
   * @param pair
   * @return true if lock acquired
   */
  private boolean tryLockVmForUpdate(Pair<VM, VmInternalData> pair) {
    Guid vmId = getVmId(pair);

    if (vmId != null) {
      VmManager vmManager = getResourceManager().getVmManager(vmId);

      if (vmManager.trylock()) {
        if (!vmManager.isLatestData(pair.getSecond(), vdsManager.getVdsId())) {
          log.warn(
              "skipping VM '{}' from this monitoring cycle"
                  + " - newer VM data was already processed",
              vmId);
          vmManager.unlock();
        } else if (vmManager.getVmDataChangedTime() != null
            && fetchTime - vmManager.getVmDataChangedTime() <= 0) {
          log.warn(
              "skipping VM '{}' from this monitoring cycle"
                  + " - the VM data has changed since fetching the data",
              vmId);
          vmManager.unlock();
        } else {
          // store the locked managers to finally release them at the end of the cycle
          vmManagers.put(vmId, vmManager);
          return true;
        }
      } else {
        log.debug(
            "skipping VM '{}' from this monitoring cycle" + " - the VM is locked by its VmManager ",
            getVmId(pair));
      }
    }
    return false;
  }
示例#2
0
 /**
  * gets VM full information for the given list of VMs
  *
  * @param vmsToUpdate
  * @return
  */
 protected Map[] getVmInfo(List<String> vmsToUpdate) {
   // TODO refactor commands to use vdsId only - the whole vds object here is useless
   VDS vds = new VDS();
   vds.setId(vdsManager.getVdsId());
   Map[] result = {};
   VDSReturnValue vdsReturnValue =
       getResourceManager()
           .runVdsCommand(
               VDSCommandType.FullList, new FullListVDSCommandParameters(vds, vmsToUpdate));
   if (vdsReturnValue.getSucceeded()) {
     result = (Map[]) (vdsReturnValue.getReturnValue());
   }
   return result;
 }
示例#3
0
  private void afterVMsRefreshTreatment() {
    Collection<Guid> movedToDownVms = new ArrayList<>();
    List<Guid> succeededToRunVms = new ArrayList<>();

    // now loop over the result and act
    for (VmAnalyzer vmAnalyzer : vmAnalyzers) {

      // rerun all vms from rerun list
      if (vmAnalyzer.isRerun()) {
        log.error(
            "Rerun VM '{}'. Called from VDS '{}'",
            vmAnalyzer.getDbVm().getId(),
            vdsManager.getVdsName());
        ResourceManager.getInstance()
            .rerunFailedCommand(vmAnalyzer.getDbVm().getId(), vdsManager.getVdsId());
      }

      if (vmAnalyzer.isSuccededToRun()) {
        vdsManager.succeededToRunVm(vmAnalyzer.getDbVm().getId());
        succeededToRunVms.add(vmAnalyzer.getDbVm().getId());
      }

      // Refrain from auto-start HA VM during its re-run attempts.
      if (vmAnalyzer.isAutoVmToRun() && !vmAnalyzer.isRerun()) {
        autoVmsToRun.add(vmAnalyzer.getDbVm().getId());
      }

      // process all vms that their ip changed.
      if (vmAnalyzer.isClientIpChanged()) {
        final VmDynamic vmDynamic = vmAnalyzer.getVdsmVm().getVmDynamic();
        getVdsEventListener().processOnClientIpChange(vmDynamic.getId(), vmDynamic.getClientIp());
      }

      // process all vms that powering up.
      if (vmAnalyzer.isPoweringUp()) {
        getVdsEventListener().processOnVmPoweringUp(vmAnalyzer.getVdsmVm().getVmDynamic().getId());
      }

      if (vmAnalyzer.isMovedToDown()) {
        movedToDownVms.add(vmAnalyzer.getDbVm().getId());
      }

      if (vmAnalyzer.isRemoveFromAsync()) {
        ResourceManager.getInstance().removeAsyncRunningVm(vmAnalyzer.getDbVm().getId());
      }

      if (vmAnalyzer.isHostedEngineUnmanaged()) {
        // @since 3.6 - we take existing HE VM and reimport it
        importHostedEngineVM(
            getVmInfo(
                Collections.singletonList(
                    vmAnalyzer.getVdsmVm().getVmDynamic().getId().toString()))[0]);
      }
    }

    getVdsEventListener().updateSlaPolicies(succeededToRunVms, vdsManager.getVdsId());

    // run all vms that crashed that marked with auto startup
    getVdsEventListener().runFailedAutoStartVMs(autoVmsToRun);

    // process all vms that went down
    getVdsEventListener().processOnVmStop(movedToDownVms, vdsManager.getVdsId());

    getVdsEventListener()
        .refreshHostIfAnyVmHasHostDevices(succeededToRunVms, vdsManager.getVdsId());
  }