[ 
https://issues.apache.org/jira/browse/HDDS-6903?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Duong updated HDDS-6903:
------------------------
    Description: 
Today, the handling of user related exceptions, i.e. OMException, is 
inconsistent across endpoints. Sometimes, OMException are "manually" converted 
to OS3Exception, .e.g. [here|#L261-L261] or 
[here|https://github.com/duongnguyen0/ozone/blob/master/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java#L654-L654],
 then correctly mapped to 4xx responses by 
[OS3ExceptionMapper|https://github.com/duongnguyen0/ozone/blob/master/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java#L35-L35].

Yet occasionally, OS3Exceptions are left unhandled and by default resolved to 
500 - Internal Server Errors. For instance:
{code:java}
sh-4.2$ aws s3api --endpoint http://localhost:9878 list-objects --bucket 
bucket_3
An error occurred (500) when calling the ListObjects operation (reached max 
retries: 4): Internal Server Error {code}
{code:java}
2022-06-17 02:33:19,466 [qtp1912821769-23] WARN server.HttpChannel: 
handleException /bucket_3 INVALID_BUCKET_NAME 
org.apache.hadoop.ozone.om.exceptions.OMException: Bucket or Volume name has an 
unsupported character : _2022-06-17 02:33:19,466 [qtp1912821769-23] WARN 
server.HttpChannelState: unhandled due to prior 
sendErrorjavax.servlet.ServletException: javax.servlet.ServletException: 
org.glassfish.jersey.server.ContainerException: INVALID_BUCKET_NAME 
org.apache.hadoop.ozone.om.exceptions.OMException: Bucket or Volume name has an 
unsupported character : _at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:162)at
 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)at
 org.eclipse.jetty.server.Server.handle(Server.java:516)at 
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)at 
org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)at 
org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)at 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)at
 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)at 
org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)at
 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)at
 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)at
 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)at
 
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386)at
 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)at
 
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)at
 java.base/java.lang.Thread.run(Thread.java:829)Caused by: 
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: 
INVALID_BUCKET_NAME org.apache.hadoop.ozone.om.exceptions.OMException: Bucket 
or Volume name has an unsupported character : _at 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:410)at 
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
 {code}
We need to implement an exception mapper to convert all OMException to correct 
response codes.  ...

The complete mapping can be built based on the Exception/ResultCode and 
matching them with the [error codes from S3 
API|https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList].

 

 

  was:
Today, handling of user related exceptions, i.e. OMException, is inconsistent 
across endpoints. Sometimes, OMException are "manually" converted to 
OS3Exception, .e.g. [here|#L261-L261] or 
[here|https://github.com/duongnguyen0/ozone/blob/master/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java#L654-L654],
 then correctly mapped to 4xx responses by 
[OS3ExceptionMapper|https://github.com/duongnguyen0/ozone/blob/master/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java#L35-L35].

Yet in many case, OS3Exception are left unhandled and by default resolved to 
500 - Internal Server Errors. For instance:
{code:java}
sh-4.2$ aws s3api --endpoint http://localhost:9878 list-objects --bucket 
bucket_3
An error occurred (500) when calling the ListObjects operation (reached max 
retries: 4): Internal Server Error {code}
{code:java}
2022-06-17 02:33:19,466 [qtp1912821769-23] WARN server.HttpChannel: 
handleException /bucket_3 INVALID_BUCKET_NAME 
org.apache.hadoop.ozone.om.exceptions.OMException: Bucket or Volume name has an 
unsupported character : _2022-06-17 02:33:19,466 [qtp1912821769-23] WARN 
server.HttpChannelState: unhandled due to prior 
sendErrorjavax.servlet.ServletException: javax.servlet.ServletException: 
org.glassfish.jersey.server.ContainerException: INVALID_BUCKET_NAME 
org.apache.hadoop.ozone.om.exceptions.OMException: Bucket or Volume name has an 
unsupported character : _at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:162)at
 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)at
 org.eclipse.jetty.server.Server.handle(Server.java:516)at 
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)at 
org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)at 
org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)at 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)at
 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)at 
org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)at
 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)at
 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)at
 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)at
 
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386)at
 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)at
 
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)at
 java.base/java.lang.Thread.run(Thread.java:829)Caused by: 
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: 
INVALID_BUCKET_NAME org.apache.hadoop.ozone.om.exceptions.OMException: Bucket 
or Volume name has an unsupported character : _at 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:410)at 
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
 {code}
We need to implement an exception mapper to convert all OMException to correct 
response codes.  ...

The complete mapping can be built based on the Exception/ResultCode and 
matching them with the [error codes from S3 
API|https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList].

 

 


> Correct mapping of exceptions to HTTP codes 
> --------------------------------------------
>
>                 Key: HDDS-6903
>                 URL: https://issues.apache.org/jira/browse/HDDS-6903
>             Project: Apache Ozone
>          Issue Type: Improvement
>          Components: S3
>            Reporter: Duong
>            Priority: Major
>
> Today, the handling of user related exceptions, i.e. OMException, is 
> inconsistent across endpoints. Sometimes, OMException are "manually" 
> converted to OS3Exception, .e.g. [here|#L261-L261] or 
> [here|https://github.com/duongnguyen0/ozone/blob/master/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java#L654-L654],
>  then correctly mapped to 4xx responses by 
> [OS3ExceptionMapper|https://github.com/duongnguyen0/ozone/blob/master/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java#L35-L35].
> Yet occasionally, OS3Exceptions are left unhandled and by default resolved to 
> 500 - Internal Server Errors. For instance:
> {code:java}
> sh-4.2$ aws s3api --endpoint http://localhost:9878 list-objects --bucket 
> bucket_3
> An error occurred (500) when calling the ListObjects operation (reached max 
> retries: 4): Internal Server Error {code}
> {code:java}
> 2022-06-17 02:33:19,466 [qtp1912821769-23] WARN server.HttpChannel: 
> handleException /bucket_3 INVALID_BUCKET_NAME 
> org.apache.hadoop.ozone.om.exceptions.OMException: Bucket or Volume name has 
> an unsupported character : _2022-06-17 02:33:19,466 [qtp1912821769-23] WARN 
> server.HttpChannelState: unhandled due to prior 
> sendErrorjavax.servlet.ServletException: javax.servlet.ServletException: 
> org.glassfish.jersey.server.ContainerException: INVALID_BUCKET_NAME 
> org.apache.hadoop.ozone.om.exceptions.OMException: Bucket or Volume name has 
> an unsupported character : _at 
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:162)at
>  
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)at
>  org.eclipse.jetty.server.Server.handle(Server.java:516)at 
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)at 
> org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)at 
> org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)at 
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)at 
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)at
>  org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)at 
> org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)at
>  
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)at
>  
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)at
>  
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)at
>  
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386)at
>  
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)at
>  
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)at
>  java.base/java.lang.Thread.run(Thread.java:829)Caused by: 
> javax.servlet.ServletException: 
> org.glassfish.jersey.server.ContainerException: INVALID_BUCKET_NAME 
> org.apache.hadoop.ozone.om.exceptions.OMException: Bucket or Volume name has 
> an unsupported character : _at 
> org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:410)at
>  org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)at 
> org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
>  {code}
> We need to implement an exception mapper to convert all OMException to 
> correct response codes.  ...
> The complete mapping can be built based on the Exception/ResultCode and 
> matching them with the [error codes from S3 
> API|https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList].
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to