Skip to content

Commit 223ee63

Browse files
committed
srm,srm-client: Report failure for failed SRM v1 transfers
Fixes the following bugs: - The srm client ignored failures to set the file status to 'Done'. - The srm client changed the file status to 'Done' even when the transfer failed. - The srm server did not accept 'Failed' as a file status even though the spec lists it as a valid status for setFileStatus. I am requesting a merge to stable branches as this bug may report failed uploads as having been successful. Target: master Request: 2.8 Request: 2.7 Request: 2.6 Require-notes: yes Require-book: no Acked-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de> Patch: http://rb.dcache.org/r/6629/ (cherry picked from commit 7e516df)
1 parent 1b8b0c8 commit 223ee63

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

modules/srm/src/main/java/org/dcache/srm/SRM.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -938,7 +938,7 @@ public RequestStatus setFileStatus(SRMUser user, RequestCredential credential,
938938
int requestId, int fileRequestId, String state) {
939939
try {
940940
logger.debug(" setFileStatus(" + requestId + "," + fileRequestId + "," + state + ");");
941-
if (!state.equalsIgnoreCase("done") && !state.equalsIgnoreCase("running")) {
941+
if (!state.equalsIgnoreCase("done") && !state.equalsIgnoreCase("running") && !state.equalsIgnoreCase("failed")) {
942942
return createFailedRequestStatus("setFileStatus(): incorrect state " + state);
943943
}
944944

modules/srm/src/main/java/org/dcache/srm/request/FileRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ public void setStatus(String status) throws SRMException, SQLException {
248248
else if(status.equalsIgnoreCase("Running")) {
249249
setState(State.TRANSFERRING,"set by setStatus to \"Running\"");
250250
}
251+
else if(status.equalsIgnoreCase("Failed")) {
252+
setState(State.FAILED, "SRM client set state to Failed.");
253+
}
251254
else {
252255
String error = "Can't set Status to "+status;
253256
logger.error(error);

modules/srmclient/src/main/java/gov/fnal/srm/util/SRMV1CopyJob.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
7676
import org.globus.util.GlobusURL;
7777

7878
import diskCacheV111.srm.ISRM;
79+
import diskCacheV111.srm.RequestStatus;
7980

8081
import org.dcache.srm.Logger;
8182
/**
@@ -154,6 +155,24 @@ public void done(boolean success, String error) {
154155
return;
155156
}
156157
}
158+
159+
if(srm != null) {
160+
if (success) {
161+
logger.log("setting file request "+fileID +" status to Done");
162+
RequestStatus status = srm.setFileStatus(requestID, fileID, "Done");
163+
if (!status.state.equalsIgnoreCase("Done")) {
164+
success = false;
165+
error = status.errorMessage;
166+
logger.elog(error);
167+
}
168+
}
169+
else
170+
{
171+
logger.log("setting file request "+fileID +" status to Failed");
172+
srm.setFileStatus(requestID,fileID, "Failed");
173+
}
174+
}
175+
157176
if(success) {
158177
if(isSrmPrepareToGet) {
159178
client.setReportSucceeded(surl,null);
@@ -172,11 +191,6 @@ public void done(boolean success, String error) {
172191
}
173192

174193
}
175-
176-
if(srm != null) {
177-
logger.log("setting file request "+fileID +" status to Done");
178-
srm.setFileStatus(requestID,fileID,"Done");
179-
}
180194
synchronized(this) {
181195
isDone = true;
182196
}

0 commit comments

Comments
 (0)