示例#1
1
  public void turlRetrievalFailed(
      String surl, String reason, String remoteRequestId, String remoteFileId) {
    synchronized (remoteSurlToFileReqIds) {
      Collection<Long> fileRequestSet = remoteSurlToFileReqIds.get(surl);
      if (fileRequestSet == null || fileRequestSet.isEmpty()) {
        LOG.error("turlArrived for unknown SURL = " + surl);
        return;
      }
      for (long id : fileRequestSet) {
        CopyFileRequest cfr = getFileRequest(id);

        try {
          String type = isSourceSrm() && !isSourceLocal() ? "source" : "destination";
          String error = "retrieval of " + type + " TURL failed with error " + reason;
          LOG.error(error);
          cfr.setState(State.FAILED, error);
        } catch (IllegalStateTransition ist) {
          LOG.error("Illegal State Transition : " + ist.getMessage());
        }
        cfr.saveJob();

        remoteSurlToFileReqIds.remove(surl, id);
      }
    }
    remoteFileRequestDone(surl, remoteRequestId, remoteFileId);
  }
示例#2
0
  public void turlArrived(
      String surl, String turl, String remoteRequestId, String remoteFileId, Long size) {
    synchronized (remoteSurlToFileReqIds) {
      Collection<Long> fileRequestIds = remoteSurlToFileReqIds.get(surl);
      if (fileRequestIds == null || fileRequestIds.isEmpty()) {
        LOG.error("turlArrived for unknown SURL = " + surl + " !!!!!!!");
        return;
      }
      for (long id : fileRequestIds) {
        CopyFileRequest cfr = getFileRequest(id);
        if (getQosPlugin() != null && cfr.getQOSTicket() != null) {
          getQosPlugin().sayStatus(cfr.getQOSTicket());
        }

        if (isSourceSrm() && !isSourceLocal()) {
          cfr.setSourceTurl(URI.create(turl));
        } else {
          cfr.setDestinationTurl(URI.create(turl));
        }
        if (size != null) {
          cfr.setSize(size);
        }
        cfr.setRemoteRequestId(remoteRequestId);
        cfr.setRemoteFileId(remoteFileId);
        cfr.saveJob();

        try {
          String theSchedulerId = getSchedulerId();
          State state = cfr.getState();
          if (theSchedulerId != null && !state.isFinal()) {
            cfr.scheduleWith(Scheduler.getScheduler(theSchedulerId));
          }
        } catch (IllegalStateException
            | IllegalArgumentException
            | IllegalStateTransition
            | InterruptedException e) {
          LOG.error("failed to schedule CopyFileRequest {}: {}", cfr, e.toString());
          try {
            cfr.setState(State.FAILED, "Failed to schedule request: " + e.getMessage());
          } catch (IllegalStateTransition ist) {
            LOG.error("Illegal State Transition : {}" + ist.getMessage());
          }
        }
        remoteSurlToFileReqIds.remove(surl, id);
      }
    }
  }
示例#3
0
 public void turlsRetrievalFailed(Object reason) {
   synchronized (remoteSurlToFileReqIds) {
     for (String surl : remoteSurlToFileReqIds.keySet()) {
       for (long id : remoteSurlToFileReqIds.get(surl)) {
         CopyFileRequest cfr = getFileRequest(id);
         try {
           String type = isSourceSrm() && !isSourceLocal() ? "source" : "destination";
           String error = "retrieval of " + type + " TURL failed with error " + reason;
           LOG.error(error);
           cfr.setState(State.FAILED, error);
         } catch (IllegalStateTransition ist) {
           LOG.error("Illegal State Transition : " + ist.getMessage());
         }
         cfr.saveJob();
         remoteSurlToFileReqIds.remove(surl, id);
       }
     }
   }
 }
示例#4
0
  private void getTURLs()
      throws SRMException, IOException, InterruptedException, IllegalStateTransition,
          DataAccessException {
    if (isSourceSrm() && !isSourceLocal()) { // implying destination is local
      if (getStorageType() != null && !storageType.equals(TFileStorageType.PERMANENT)) {
        throw new SRMNotSupportedException(
            "TargetFileStorageType " + getStorageType() + " is not supported");
      }
      RequestCredential credential = RequestCredential.getRequestCredential(credentialId);
      LOG.debug("obtained credential={} id={}", credential, credential.getId());

      for (int i = 0; i < getNumOfFileRequest(); ++i) {
        CopyFileRequest cfr = getFileRequests().get(i);
        if (cfr.getState() == State.UNSCHEDULED && cfr.getSchedulerId() == null) {
          if (cfr.getSourceTurl() != null) {
            cfr.scheduleWith(Scheduler.getScheduler(schedulerId));
          } else {
            // Since source SURLs are local, we can just set the path
            remoteSurlToFileReqIds.put(cfr.getSourceSurl().toASCIIString(), cfr.getId());
            String path = localPathFromSurl(cfr.getDestinationSurl());
            LOG.debug("setting destination path to {}", path);
            cfr.setLocalDestinationPath(path);
            cfr.saveJob();
          }
        }
      }
      String[] remoteSurlsUniqueArray =
          remoteSurlToFileReqIds.keySet().toArray(new String[remoteSurlToFileReqIds.size()]);
      if (LOG.isDebugEnabled()) {
        for (int i = 0; i < remoteSurlsUniqueArray.length; ++i) {
          LOG.debug("remoteSurlsUniqueArray[{}]={}", i, remoteSurlsUniqueArray[i]);
        }
      }
      // need to fetch files from remote SRM system
      setRemoteTurlClient(
          new RemoteTurlGetterV2(
              getStorage(),
              credential,
              remoteSurlsUniqueArray,
              getProtocols(),
              this,
              getConfiguration().getCopyMaxPollPeriod(),
              2,
              this.getRemainingLifetime(),
              getConfiguration().getCaCertificatePath(),
              clientTransport));
      getRemoteTurlClient().getInitialRequest();
      getRemoteTurlClient().run();
      return;
    }

    if (isSourceSrm()) { // source is this storage system
      for (int i = 0; i < getNumOfFileRequest(); ++i) {
        CopyFileRequest cfr = getFileRequests().get(i);

        if (cfr.getState() == State.UNSCHEDULED
            && cfr.getSchedulerId() == null
            && cfr.getLocalSourcePath() == null) {
          String path = localPathFromSurl(cfr.getSourceSurl());
          LOG.debug("setting source path to {}", path);
          cfr.setLocalSourcePath(path);
          cfr.saveJob();
        }
      }
    } else { // source is not SRM, so supplied values are the TURL(s)
      for (int i = 0; i < getNumOfFileRequest(); ++i) {
        CopyFileRequest cfr = getFileRequests().get(i);

        if (cfr.getState() == State.UNSCHEDULED
            && cfr.getSchedulerId() == null
            && cfr.getSourceTurl() == null) {
          LOG.debug("getTurlsArrived, setting \"from\" turl to {}", cfr.getSourceSurl());
          cfr.setSourceTurl(cfr.getSourceSurl());
          cfr.saveJob();
        }
      }
    }

    // now source is known, either as a TURL or a local path.

    if (isDestinationSrm() && isDestinationLocal()) { // destination is this system
      // As we have a source (either a path or a TURL) for all files and
      // the destination is local, we have all the information needed.
      for (int i = 0; i < getNumOfFileRequest(); ++i) {
        CopyFileRequest cfr = getFileRequests().get(i);
        if (cfr.getState() == State.UNSCHEDULED && cfr.getSchedulerId() == null) {
          String path = localPathFromSurl(cfr.getDestinationSurl());
          LOG.debug("setting local destination path to {}", path);
          cfr.setLocalDestinationPath(path);
          cfr.scheduleWith(Scheduler.getScheduler(schedulerId));
        }
      }
      return;
    }

    if (!isDestinationSrm()) { // destination is some TURL
      // As we have a source (either a path or a TURL) for all files and
      // the destination is a TURL, we have all the information needed.
      for (int i = 0; i < getNumOfFileRequest(); ++i) {
        CopyFileRequest cfr = getFileRequests().get(i);
        if (cfr.getState() == State.UNSCHEDULED && cfr.getSchedulerId() == null) {
          LOG.debug("setting destination to {}", cfr.getDestinationSurl());
          cfr.setDestinationTurl(cfr.getDestinationSurl());
          cfr.scheduleWith(Scheduler.getScheduler(schedulerId));
        }
      }
      return;
    }

    // The only possibility left is a remote destination SURLs, for which
    // we need to discover a TURLs.

    for (int i = 0; i < getNumOfFileRequest(); ++i) {
      CopyFileRequest cfr = getFileRequests().get(i);
      if (cfr.getState() != State.UNSCHEDULED || cfr.getSchedulerId() != null) {
        // copy file request has being canceled,failed or scheduled before
      } else if (cfr.getDestinationTurl() != null) {
        // destination TURL has arrived, but request has not been scheduled
        cfr.scheduleWith(Scheduler.getScheduler(schedulerId));
      } else {
        remoteSurlToFileReqIds.put(cfr.getDestinationSurl().toASCIIString(), cfr.getId());
      }
    }

    int uniqueCount = remoteSurlToFileReqIds.size();
    String[] uniqueSurls = remoteSurlToFileReqIds.keySet().toArray(new String[uniqueCount]);
    String[] destinationSurls = new String[uniqueCount];
    long[] sizes = new long[uniqueCount];
    for (int i = 0; i < uniqueCount; ++i) {
      long id = Iterables.get(remoteSurlToFileReqIds.get(uniqueSurls[i]), 0);
      CopyFileRequest cfr = getFileRequest(id);
      sizes[i] = getStorage().getFileMetaData(getUser(), cfr.getSourceSurl(), false).size;
      LOG.debug("local size is {}", sizes[i]);
      cfr.setSize(sizes[i]);
      destinationSurls[i] = cfr.getDestinationSurl().toString();
      if (getQosPlugin() != null) {
        makeQosReservation(i);
      }
    }

    // Now create an SRM client to fetch a TURL for each SURL.

    RequestCredential credential = RequestCredential.getRequestCredential(credentialId);
    setRemoteTurlClient(
        new RemoteTurlPutterV2(
            getStorage(),
            credential,
            destinationSurls,
            sizes,
            getProtocols(),
            this,
            getConfiguration().getCopyMaxPollPeriod(),
            2,
            this.getRemainingLifetime(),
            getStorageType(),
            getTargetRetentionPolicy(),
            getTargetAccessLatency(),
            getOverwriteMode(),
            getTargetSpaceToken(),
            getConfiguration().getCaCertificatePath(),
            clientTransport));
    getRemoteTurlClient().getInitialRequest();

    getRemoteTurlClient().run();
  }