forked from Alluxio/alluxio
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix the issue to get a tag of a non-existed in OSS/COS
### What changes are proposed in this pull request? Add exception handling for OSS and COS ufs in getting object tags and other apis. ### Why are the changes needed? When handling exceptions, we need to identify exceptions that can be allowed, and other errors need to be converted to an Alluxio exception. ### Does this PR introduce any user facing changes? Please list the user-facing changes introduced by your change, including 1. change in user-facing APIs 2. addition or removal of property keys 3. webui pr-link: Alluxio#18388 change-id: cid-2eb458f3ec6955321981dff350dacc9f33104c1b
- Loading branch information
1 parent
b9bf227
commit f311d36
Showing
5 changed files
with
136 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
100 changes: 100 additions & 0 deletions
100
dora/underfs/cos/src/main/java/alluxio/underfs/cos/AlluxioCosException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
/* | ||
* The Alluxio Open Foundation licenses this work under the Apache License, version 2.0 | ||
* (the "License"). You may not use this work except in compliance with the License, which is | ||
* available at www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, | ||
* either express or implied, as more fully set forth in the License. | ||
* | ||
* See the NOTICE file distributed with this work for information regarding copyright ownership. | ||
*/ | ||
|
||
package alluxio.underfs.cos; | ||
|
||
import alluxio.exception.runtime.AlluxioRuntimeException; | ||
import alluxio.grpc.ErrorType; | ||
|
||
import com.qcloud.cos.exception.CosClientException; | ||
import com.qcloud.cos.exception.CosServiceException; | ||
import io.grpc.Status; | ||
|
||
import java.net.HttpURLConnection; | ||
|
||
/** | ||
* Alluxio exception for cos. | ||
*/ | ||
public class AlluxioCosException extends AlluxioRuntimeException { | ||
private static final ErrorType ERROR_TYPE = ErrorType.External; | ||
|
||
/** | ||
* Converts an AmazonClientException to a corresponding AlluxioCosException. | ||
* @param cause cos exception | ||
* @return alluxio cos exception | ||
*/ | ||
public static AlluxioCosException from(CosClientException cause) { | ||
return from(null, cause); | ||
} | ||
|
||
/** | ||
* Converts an CosClientException with errormessage to a corresponding AlluxioCosException. | ||
* @param errorMessage error message | ||
* @param cause cos exception | ||
* @return alluxio cos exception | ||
*/ | ||
public static AlluxioCosException from(String errorMessage, CosClientException cause) { | ||
Status status = Status.UNKNOWN; | ||
String errorDescription = "ClientException:" + cause.getMessage(); | ||
if (cause instanceof CosServiceException) { | ||
CosServiceException exception = (CosServiceException) cause; | ||
status = httpStatusToGrpcStatus(exception.getStatusCode()); | ||
errorDescription = exception.getErrorCode() + ":" + exception.getErrorMessage(); | ||
} | ||
if (errorMessage == null) { | ||
errorMessage = errorDescription; | ||
} | ||
return new AlluxioCosException(status, errorMessage, cause, cause.isRetryable()); | ||
} | ||
|
||
private AlluxioCosException(Status status, String message, Throwable cause, boolean isRetryAble) { | ||
super(status, message, cause, ERROR_TYPE, isRetryAble); | ||
} | ||
|
||
private static Status httpStatusToGrpcStatus(int httpStatusCode) { | ||
if (httpStatusCode >= 100 && httpStatusCode < 200) { | ||
// 1xx. These headers should have been ignored. | ||
return Status.INTERNAL; | ||
} | ||
switch (httpStatusCode) { | ||
case HttpURLConnection.HTTP_BAD_REQUEST: // 400 | ||
return Status.INVALID_ARGUMENT; | ||
case HttpURLConnection.HTTP_UNAUTHORIZED: // 401 | ||
return Status.UNAUTHENTICATED; | ||
case HttpURLConnection.HTTP_FORBIDDEN: // 403 | ||
return Status.PERMISSION_DENIED; | ||
case HttpURLConnection.HTTP_NOT_FOUND: // 404 | ||
return Status.NOT_FOUND; | ||
case HttpURLConnection.HTTP_BAD_METHOD: // 405 | ||
case HttpURLConnection.HTTP_NOT_IMPLEMENTED: // 501 | ||
return Status.UNIMPLEMENTED; | ||
case HttpURLConnection.HTTP_CONFLICT: // 409 | ||
return Status.ABORTED; | ||
case HttpURLConnection.HTTP_LENGTH_REQUIRED: // 411 | ||
case HttpURLConnection.HTTP_PRECON_FAILED: // 412 | ||
return Status.FAILED_PRECONDITION; | ||
case 416: // Requested Range Not Satisfiable | ||
return Status.OUT_OF_RANGE; | ||
case HttpURLConnection.HTTP_INTERNAL_ERROR: //500 | ||
return Status.INTERNAL; | ||
case HttpURLConnection.HTTP_MOVED_PERM: // 301 | ||
case HttpURLConnection.HTTP_NOT_MODIFIED: //304 | ||
case 307: // Moved Temporarily | ||
case HttpURLConnection.HTTP_BAD_GATEWAY: // 502 | ||
case HttpURLConnection.HTTP_UNAVAILABLE: // 503 | ||
return Status.UNAVAILABLE; | ||
case HttpURLConnection.HTTP_GATEWAY_TIMEOUT: // 504 | ||
return Status.DEADLINE_EXCEEDED; | ||
default: | ||
return Status.UNKNOWN; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters