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