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); }
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); } } }
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); } } } }
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(); }