Ejemplo n.º 1
0
  private void downloadTemplateToStorage(VMTemplateVO template, HostVO sserver) {
    boolean downloadJobExists = false;
    VMTemplateHostVO vmTemplateHost = null;

    vmTemplateHost = _vmTemplateHostDao.findByHostTemplate(sserver.getId(), template.getId());
    if (vmTemplateHost == null) {
      vmTemplateHost =
          new VMTemplateHostVO(
              sserver.getId(),
              template.getId(),
              new Date(),
              0,
              VMTemplateStorageResourceAssoc.Status.NOT_DOWNLOADED,
              null,
              null,
              "jobid0000",
              null,
              template.getUrl());
      _vmTemplateHostDao.persist(vmTemplateHost);
    } else if ((vmTemplateHost.getJobId() != null) && (vmTemplateHost.getJobId().length() > 2)) {
      downloadJobExists = true;
    }

    Long maxTemplateSizeInBytes = getMaxTemplateSizeInBytes();
    String secUrl = sserver.getStorageUrl();
    if (vmTemplateHost != null) {
      start();
      DownloadCommand dcmd = new DownloadCommand(secUrl, template, maxTemplateSizeInBytes);
      if (downloadJobExists) {
        dcmd =
            new DownloadProgressCommand(
                dcmd, vmTemplateHost.getJobId(), RequestType.GET_OR_RESTART);
      }
      dcmd.setProxy(getHttpProxy());
      if (vmTemplateHost.isCopy()) {
        dcmd.setCreds(TemplateConstants.DEFAULT_HTTP_AUTH_USER, _copyAuthPasswd);
      }
      HostVO ssAhost = _ssvmMgr.pickSsvmHost(sserver);
      if (ssAhost == null) {
        s_logger.warn(
            "There is no secondary storage VM for secondary storage host " + sserver.getName());
        return;
      }
      DownloadListener dl =
          new DownloadListener(
              ssAhost,
              sserver,
              template,
              _timer,
              _vmTemplateHostDao,
              vmTemplateHost.getId(),
              this,
              dcmd,
              _templateDao,
              _resourceLimitMgr,
              _alertMgr,
              _accountMgr);
      if (downloadJobExists) {
        dl.setCurrState(vmTemplateHost.getDownloadState());
      }
      DownloadListener old = null;
      synchronized (_listenerMap) {
        old = _listenerMap.put(vmTemplateHost, dl);
      }
      if (old != null) {
        old.abandon();
      }

      try {
        send(ssAhost.getId(), dcmd, dl);
      } catch (AgentUnavailableException e) {
        s_logger.warn(
            "Unable to start /resume download of template "
                + template.getUniqueName()
                + " to "
                + sserver.getName(),
            e);
        dl.setDisconnected();
        dl.scheduleStatusCheck(RequestType.GET_OR_RESTART);
      }
    }
  }