GlenGeng commented on a change in pull request #1228:
URL: https://github.com/apache/hadoop-ozone/pull/1228#discussion_r503653865



##########
File path: 
hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java
##########
@@ -562,13 +562,18 @@ private Response createMultipartKey(String bucket, String 
key, long length,
 
       OmMultipartCommitUploadPartInfo omMultipartCommitUploadPartInfo =
           ozoneOutputStream.getCommitUploadPartInfo();
-      String eTag = omMultipartCommitUploadPartInfo.getPartName();
+      if (omMultipartCommitUploadPartInfo != null) {

Review comment:
       Hey @bharatviswa504
   
   Seems this NPE in S3G occurred again, I got some clue, but haven't found the 
root cause yet.
   
   OM side, `S3MultipartUploadCommitPartRequest` failed due to upload id not 
found.
   S3G side, 
   ```
         } finally {
           IOUtils.closeQuietly(ozoneOutputStream);
         }
   ```
   `OzoneOutputStream.close()` will call   `OmMultipartCommitUploadPartInfo 
commitMultipartUploadPart(
         OmKeyArgs omKeyArgs, long clientID) throws IOException;` to commit the 
key, but `IOUtils.closeQuietly()` will swallow IOException that relates to this 
error, thus 
   ```
         OmMultipartCommitUploadPartInfo omMultipartCommitUploadPartInfo =
             ozoneOutputStream.getCommitUploadPartInfo();
   ```
   will return null, trigger the NPE issue.
   
   OM Trace
   > 2020-10-10 21:29:26,644 ERROR 
org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadCommitPartRequest:
 MultipartUpload Commit is failed for Key:python_1_1G.dat in Volume/Bucket 
s325d55ad283aa400af464c76d713c07ad/pythonbucket
   NO_SUCH_MULTIPART_UPLOAD_ERROR 
org.apache.hadoop.ozone.om.exceptions.OMException: No such Multipart upload is 
with specified uploadId fc5051bf-97a7-454b-9761-18669f7d3b02-105010697301721222
       at 
org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadCommitPartRequest.validateAndUpdateCache(S3MultipartUploadCommitPartRequest.java:174)
       at 
org.apache.hadoop.ozone.protocolPB.OzoneManagerRequestHandler.handleWriteRequest(OzoneManagerRequestHandler.java:227)
       at 
org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.submitRequestDirectlyToOM(OzoneManagerProtocolServerSideTranslatorPB.java:224)
       at 
org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.processRequest(OzoneManagerProtocolServerSideTranslatorPB.java:145)
       at 
org.apache.hadoop.hdds.server.OzoneProtocolMessageDispatcher.processRequest(OzoneProtocolMessageDispatcher.java:87)
       at 
org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.submitRequest(OzoneManagerProtocolServerSideTranslatorPB.java:113)
       at 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos$OzoneManagerService$2.callBlockingMethod(OzoneManagerProtocolProtos.java)
       at 
org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:528)
       at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1070)
       at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:999)
       at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:927)
       at java.security.AccessController.doPrivileged(Native Method)
       at javax.security.auth.Subject.doAs(Subject.java:422)
       at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730)
       at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2915)
   
   
   S3G Trace
   > 2020-10-10 21:29:26,544 WARN 
org.apache.ratis.metrics.impl.MetricRegistriesImpl: First MetricRegistry has 
been created without registering reporters. You may need to call 
MetricRegistries.global().addReportRegistration(...) before.
   2020-10-10 21:29:26,648 WARN org.eclipse.jetty.server.HttpChannel: 
/pythonbucket/python_1_1G.dat
   javax.servlet.ServletException: javax.servlet.ServletException: 
java.lang.NullPointerException
       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:500)
       at 
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
       at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547)
       at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
       at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270)
       at 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
       at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
       at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
       at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
       at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
       at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
       at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
       at 
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388)
       at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
       at 
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
       at java.lang.Thread.run(Thread.java:748)
   Caused by: javax.servlet.ServletException: java.lang.NullPointerException
       at 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:432)
       at 
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)
       at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
       at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
       at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
       at 
org.eclipse.jetty.servlet.ServletHolder$NotAsyncServlet.service(ServletHolder.java:1395)
       at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:755)
       at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1617)
       at 
org.apache.hadoop.ozone.s3.RootPageDisplayFilter.doFilter(RootPageDisplayFilter.java:53)
       at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1596)
       at 
org.apache.hadoop.hdds.server.http.HttpServer2$QuotingInputFilter.doFilter(HttpServer2.java:1666)
       at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
       at 
org.apache.hadoop.hdds.server.http.NoCacheFilter.doFilter(NoCacheFilter.java:48)
       at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
       at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545)
       at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
       at 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:590)
       at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
       at 
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
       at 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1607)
       at 
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
       at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1297)
       at 
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
       at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485)
       at 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1577)
       at 
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
       at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1212)
       at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
       at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
       ... 17 more
       ... 17 more
   Caused by: java.lang.NullPointerException
       at 
org.apache.hadoop.ozone.s3.endpoint.ObjectEndpoint.createMultipartKey(ObjectEndpoint.java:606)
       at 
org.apache.hadoop.ozone.s3.endpoint.ObjectEndpoint.put(ObjectEndpoint.java:156)
       at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
       at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:498)
       at 
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76)
       at 
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148)
       at 
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191)
       at 
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:200)
       at 
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103)
       at 
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493)
       at 
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:415)
       at 
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:104)
       at 
org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:277)
       at org.glassfish.jersey.internal.Errors$1.call(Errors.java:272)
       at org.glassfish.jersey.internal.Errors$1.call(Errors.java:268)
       at org.glassfish.jersey.internal.Errors.process(Errors.java:316)
       at org.glassfish.jersey.internal.Errors.process(Errors.java:298)
       at org.glassfish.jersey.internal.Errors.process(Errors.java:268)
       at 
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289)
       at 
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256)
       at 
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703)
       at 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416)
   
   How about we avoid call `IOUtils.closeQuietly(ozoneOutputStream);` to throw 
out the `NO_SUCH_MULTIPART_UPLOAD_ERROR` ? 




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: ozone-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: ozone-issues-h...@hadoop.apache.org

Reply via email to