Example #1
0
 @Override
 public final TReturnStatus getTReturnStatus() {
   wlock();
   try {
     getRequestStatus();
     if (getStatusCode() != null) {
       return new TReturnStatus(getStatusCode(), getExplanation());
     }
     int len = getNumOfFileRequest();
     if (len == 0) {
       return new TReturnStatus(
           TStatusCode.SRM_INTERNAL_ERROR,
           "Could not find (deserialize) files in the request,  NumOfFileRequest is 0");
     }
     int failed_req = 0;
     int canceled_req = 0;
     int pending_req = 0;
     int running_req = 0;
     int done_req = 0;
     int got_exception = 0;
     int auth_failure = 0;
     for (LsFileRequest fr : getFileRequests()) {
       TReturnStatus fileReqRS = fr.getReturnStatus();
       TStatusCode fileReqSC = fileReqRS.getStatusCode();
       try {
         if (fileReqSC == TStatusCode.SRM_REQUEST_QUEUED) {
           pending_req++;
         } else if (fileReqSC == TStatusCode.SRM_REQUEST_INPROGRESS) {
           running_req++;
         } else if (fileReqSC == TStatusCode.SRM_ABORTED) {
           canceled_req++;
         } else if (fileReqSC == TStatusCode.SRM_AUTHORIZATION_FAILURE) {
           auth_failure++;
         } else if (RequestStatusTool.isFailedFileRequestStatus(fileReqRS)) {
           failed_req++;
         } else {
           done_req++;
         }
       } catch (Exception e) {
         logger.error(e.toString());
         got_exception++;
       }
     }
     boolean isFinalState = getState().isFinal();
     if (done_req == len) {
       if (!isFinalState) {
         try {
           setState(State.DONE, "Operation completed.");
         } catch (IllegalStateTransition ist) {
           logger.error("Illegal State Transition : " + ist.getMessage());
         }
       }
       return new TReturnStatus(TStatusCode.SRM_SUCCESS, null);
     }
     if (canceled_req == len) {
       return new TReturnStatus(TStatusCode.SRM_ABORTED, "All ls file requests were cancelled");
     }
     if ((pending_req == len) || (pending_req + running_req == len) || running_req == len) {
       return new TReturnStatus(
           TStatusCode.SRM_REQUEST_QUEUED, "All ls file requests are pending");
     }
     if (auth_failure == len) {
       return new TReturnStatus(
           TStatusCode.SRM_AUTHORIZATION_FAILURE,
           "Client is not authorized to request information");
     }
     if (got_exception == len) {
       return new TReturnStatus(
           TStatusCode.SRM_INTERNAL_ERROR,
           "SRM has an internal transient error, and client may try again");
     }
     if (running_req > 0 || pending_req > 0) {
       return new TReturnStatus(
           TStatusCode.SRM_REQUEST_INPROGRESS,
           "Some files are completed, and some files are still on the queue. Details are on the files status");
     } else {
       if (done_req > 0) {
         if (!isFinalState) {
           try {
             setState(State.DONE, State.DONE.toString());
           } catch (IllegalStateTransition ist) {
             logger.error("Illegal State Transition : " + ist.getMessage());
           }
         }
         return new TReturnStatus(
             TStatusCode.SRM_PARTIAL_SUCCESS,
             "Some SURL requests successfully completed, and some SURL requests failed. Details are on the files status");
       } else {
         if (!isFinalState) {
           try {
             setState(State.FAILED, State.FAILED.toString());
           } catch (IllegalStateTransition ist) {
             logger.error("Illegal State Transition : " + ist.getMessage());
           }
         }
         return new TReturnStatus(
             TStatusCode.SRM_FAILURE, "All ls requests failed in some way or another");
       }
     }
   } finally {
     wunlock();
   }
 }