Hi Debraj,

I think what Joakim told you is exactly what you need to do:  start by
removing all dependencies to commons-fileupload and work your way from
there.

If you don`t, you'll end up wasting a lot of time only to create patchwork.

Regards,

*Nicolas Therrien*

Senior Software Developer

*[image:
https://www.motorolasolutions.com/content/dam/msi/images/logos/corporate/msiemailsignature.png]*

*o*: +1.819.931.2053


On Sat, Oct 13, 2018 at 12:19 PM Debraj Manna <subharaj.ma...@gmail.com>
wrote:

> Thanks Joakim for a detailed response.
>
> I don't think there is a problem in http-client as I can see that about
> 3.5-3.8 GB out 5 GB is written to disk and then it gets stuck. I will
> verify your other suggestions. But the problem is the issue does not come
> always. It is intermittent.
>
> On Sat, Oct 13, 2018 at 5:49 PM Joakim Erdfelt <joa...@webtide.com> wrote:
>
>> The relevant stacktrace ...
>>
>> "dw-150 - POST /management/upgrade/uploadbundle" #150 prio=5 os_prio=0
>> tid=0x00007ffff0f7e800 nid=0x3a46 in Object.wait() [0x00007ffee0728000]
>>    java.lang.Thread.State: WAITING (on object monitor)
>> at java.lang.Object.wait(Native Method)
>> at java.lang.Object.wait(Object.java:502)
>> at org.eclipse.jetty.server.HttpInput.blockForContent(HttpInput.java:565)
>> at
>> org.eclipse.jetty.server.HttpInput$1.blockForContent(HttpInput.java:1084)
>> at org.eclipse.jetty.server.HttpInput.read(HttpInput.java:306)
>> - locked <0x0000000677a5d220> (a java.util.ArrayDeque)
>> at
>> org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:999)
>> at
>> org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:903)
>> at java.io.InputStream.read(InputStream.java:101)
>> at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1488)
>> at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1465)
>> at
>> com.vnera.restapilayer.ManagementResource.flushFileToDisk(ManagementResource.java:2515)
>> at
>> com.vnera.restapilayer.ManagementResource.storeFileToDisk(ManagementResource.java:2441)
>> at
>> com.vnera.restapilayer.ManagementResource.uploadBundle(ManagementResource.java:2366)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>> 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$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
>> at
>> org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144)
>> at
>> org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161)
>> at
>> org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:205)
>> at
>> org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)
>> at
>> org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
>> at
>> org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
>> at
>> org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
>> at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326)
>> at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
>> at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
>> at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
>> at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
>> at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
>> at
>> org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
>> at
>> org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
>> at
>> org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
>> at
>> org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
>> at
>> org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
>> at
>> org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
>> at
>> org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
>> at
>> org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
>> at
>> io.dropwizard.jetty.NonblockingServletHolder.handle(NonblockingServletHolder.java:49)
>> at
>> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650)
>> at
>> io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:34)
>> at
>> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
>> at
>> io.dropwizard.jersey.filter.AllowedMethodsFilter.handle(AllowedMethodsFilter.java:45)
>> at
>> io.dropwizard.jersey.filter.AllowedMethodsFilter.doFilter(AllowedMethodsFilter.java:39)
>> at
>> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
>> at
>> org.eclipse.jetty.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:308)
>> at
>> org.eclipse.jetty.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:262)
>> at
>> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
>> at
>> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
>> at
>> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
>> at
>> org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
>> at
>> org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
>> at
>> org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
>> at
>> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
>> at
>> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
>> at
>> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
>> at
>> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
>> at
>> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
>> at
>> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
>> at
>> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
>> at
>> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
>> at
>> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
>> at
>> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
>> at
>> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
>> at
>> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
>> at
>> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
>> at
>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
>> at
>> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
>> at
>> com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:241)
>> at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:52)
>> at
>> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:455)
>> at io.dropwizard.jetty.BiDiGzipHandler.handle(BiDiGzipHandler.java:69)
>> at
>> org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:56)
>> at
>> org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:169)
>> at
>> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
>> at org.eclipse.jetty.server.Server.handle(Server.java:530)
>> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:347)
>> at
>> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:256)
>> at
>> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
>> at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
>> at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
>> at
>> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247)
>> at
>> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140)
>> at
>> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
>> at
>> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:382)
>> at
>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)
>> at
>> org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)
>> at java.lang.Thread.run(Thread.java:748)
>>
>> Looks like you are using dropwizard + jersey + com.vnera.restapilayer +
>> commons-fileupload to handle your file upload.
>>
>> Your setup isn't using Jetty for multipart/form-data upload in the way
>> you think.
>>
>> First, don't use commons-fileupload, that's for Servlet 2.4 (and older)
>> environments.
>> Support for multipart/form-data parsing is built into the Servlet spec as
>> HttpServletRequest.getParts() and getPart(name) since Servlet 3.0
>> See:
>> https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletRequest.html#getPart-java.lang.String-
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__docs.oracle.com_javaee_7_api_javax_servlet_http_HttpServletRequest.html-23getPart-2Djava.lang.String-2D&d=DwMFaQ&c=q3cDpHe1hF8lXU5EFjNM_A&r=P3_1pTtMQK06fFymYIWbyyzVU6nc0CcwfuZhLhexammvaiCaU0ieHeI7BWvfbbjE&m=v4n059clZKEoxfRB9GdzFxy5fdVagerkzRukYEqXuGY&s=4cpaDgQbjItJZ6eUBOhoEvyZ5xcl-UEJyicVNSwKaQs&e=>
>>
>> If your code, or ANY of its Filters or 3rd party libraries uses any one
>> of the HttpServletRequest.getParameter*() methods before your attempt at
>> using commons-fileupload then your code will not work and fail.
>> Why?  That's because the Servlet spec says we have to read the Request
>> URI query and Request form data (Input Stream) to generate the the
>> parameter list and Parts list (if request is a multipart/form)
>>
>> Right now, based on your stacktrace, Jetty is only involved in giving you
>> a HttpServletRequest InputStream which is blocked waiting for more content
>> from the client.
>> This could be a bug in commons-fileupload (a common scenario)
>> A bug in your use of the servlet spec (based on the number of layers you
>> have going on, this is a high probability, try putting a breakpoint on
>> Jetty's org.eclipse.jetty.server.Request.getParameters() method to see if
>> the above example is going on)
>> Or a bug in your http client (a common scenario where the client says
>> `Content-Length: <big-number>` but never sends the complete <big-number> of
>> bytes, hence the blocking for content)
>>
>> You can test Jetty's behavior in isolation easily enough.
>>
>> $ mkdir jetty-downloads
>> $ cd jetty-downloads
>> $ curl -O
>> http://central.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.12.v20180830/jetty-distribution-9.4.12.v20180830.tar.gz
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__central.maven.org_maven2_org_eclipse_jetty_jetty-2Ddistribution_9.4.12.v20180830_jetty-2Ddistribution-2D9.4.12.v20180830.tar.gz&d=DwMFaQ&c=q3cDpHe1hF8lXU5EFjNM_A&r=P3_1pTtMQK06fFymYIWbyyzVU6nc0CcwfuZhLhexammvaiCaU0ieHeI7BWvfbbjE&m=v4n059clZKEoxfRB9GdzFxy5fdVagerkzRukYEqXuGY&s=_xubfGKK_hd_3C7SVWVrgcXmXZXXNcRILUISoABgvng&e=>
>> $ tar -zxf tar -zxvf jetty-distribution-9.4.12.v20180830.tar.gz
>> $ cd jetty-distribution-9.4.12.v20180830/demo-base/
>> $ java -jar ../start.jar
>>
>> now open a web browser to http://localhost:8080/test/dump/info
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A8080_test_dump_info&d=DwMFaQ&c=q3cDpHe1hF8lXU5EFjNM_A&r=P3_1pTtMQK06fFymYIWbyyzVU6nc0CcwfuZhLhexammvaiCaU0ieHeI7BWvfbbjE&m=v4n059clZKEoxfRB9GdzFxy5fdVagerkzRukYEqXuGY&s=djwkat47OBQtJYqNahL2TBoMQ0DKwuigizKTa_M-ktI&e=>
>> scroll down to "Form to generate UPLOAD content"
>> use "File 1" or "File 2" on that form to select your 5gb data file.
>> then "submit"
>>
>> On chrome you'll see an "Uploading" percentage at the bottom of the
>> window.
>>
>> when it's done uploading, you'll get a "Dump Servlet" response.
>> scroll down to "Parts:" (about 1/3rd down the page)
>> you'll see the results of HttpSerletRequest.getParts() here.
>>
>> example (for mine):
>> Parts:
>> Action:  Part{n=Action,fn=null,ct=null,s=6,tmp=true,file=null}
>> file2:
>> Part{n=file2,fn=,ct=application/octet-stream,s=0,tmp=true,file=null}
>> TextField:  Part{n=TextField,fn=null,ct=null,s=7,tmp=true,file=null}
>> file1:  Part{n=file1,fn=bigger.iso,ct=application/octet-stream,s=
>> *6806166040*
>> ,tmp=true,file=/private/var/folders/gm/676mvm6j6131h37d0msqk1k40000gn/T/jetty-0.0.0.0-8080-test.war-_test-any-432009796042963862.dir/upload/MultiPart7642561650112679943}
>>
>> That tells me that 6806166040 bytes were sent as part of "file1".
>>
>> If I look at the original (pre-uploaded) file, I have ...
>>
>> $ ls -la bigger.iso
>> -rw-r--r--  1 joakim  staff  6806166040 Oct 13 07:09 bigger.iso
>>
>> I can see that the upload completed, the entire 6GB file was sent.
>>
>> Joakim Erdfelt / joa...@webtide.com
>>
>>
>> On Sat, Oct 13, 2018 at 6:17 AM Debraj Manna <subharaj.ma...@gmail.com>
>> wrote:
>>
>>> POST /management/upgrade/uploadbundle is the api in context
>>>
>>> On Sat, Oct 13, 2018 at 4:26 PM Debraj Manna <subharaj.ma...@gmail.com>
>>> wrote:
>>>
>>>> I am using a jetty-server behind nginx reverse proxy. On trying to
>>>> upload a big file about 5 GB via Multi-part I am seeing sometimes the
>>>> upload is getting stuck. Please find attached the full thread dump when the
>>>> jetty server was stuck.
>>>>
>>>> I have also placed the thread dump in the below gist
>>>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__gist.github.com_debraj-2Dmanna_20b62dd3cbc9e7badb05fdb01e513fcd&d=DwMFaQ&c=q3cDpHe1hF8lXU5EFjNM_A&r=P3_1pTtMQK06fFymYIWbyyzVU6nc0CcwfuZhLhexammvaiCaU0ieHeI7BWvfbbjE&m=v4n059clZKEoxfRB9GdzFxy5fdVagerkzRukYEqXuGY&s=hv6TjDnnkkwY-eeWVqCmgwMyVrNGLjbU6jABfarQVp4&e=>
>>>>
>>>> https://gist.github.com/debraj-manna/20b62dd3cbc9e7badb05fdb01e513fcd
>>>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__gist.github.com_debraj-2Dmanna_20b62dd3cbc9e7badb05fdb01e513fcd&d=DwMFaQ&c=q3cDpHe1hF8lXU5EFjNM_A&r=P3_1pTtMQK06fFymYIWbyyzVU6nc0CcwfuZhLhexammvaiCaU0ieHeI7BWvfbbjE&m=v4n059clZKEoxfRB9GdzFxy5fdVagerkzRukYEqXuGY&s=hv6TjDnnkkwY-eeWVqCmgwMyVrNGLjbU6jABfarQVp4&e=>
>>>>
>>>> Can someone let me know if this is some known issue in Jetty?
>>>>
>>>> Environment
>>>> Ubuntu 14.04
>>>> Java 8
>>>> Jetty Server - 9.4.10, 9.4.8.v20171121
>>>>
>>> _______________________________________________
>>> jetty-users mailing list
>>> jetty-users@eclipse.org
>>> To change your delivery options, retrieve your password, or unsubscribe
>>> from this list, visit
>>> https://dev.eclipse.org/mailman/listinfo/jetty-users
>>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__dev.eclipse.org_mailman_listinfo_jetty-2Dusers&d=DwMFaQ&c=q3cDpHe1hF8lXU5EFjNM_A&r=P3_1pTtMQK06fFymYIWbyyzVU6nc0CcwfuZhLhexammvaiCaU0ieHeI7BWvfbbjE&m=v4n059clZKEoxfRB9GdzFxy5fdVagerkzRukYEqXuGY&s=Hpubhy2jdJWf-a4vF37_8cj4qCx0buzb-3pjfuFprfQ&e=>
>>
>> _______________________________________________
>> jetty-users mailing list
>> jetty-users@eclipse.org
>> To change your delivery options, retrieve your password, or unsubscribe
>> from this list, visit
>> https://dev.eclipse.org/mailman/listinfo/jetty-users
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__dev.eclipse.org_mailman_listinfo_jetty-2Dusers&d=DwMFaQ&c=q3cDpHe1hF8lXU5EFjNM_A&r=P3_1pTtMQK06fFymYIWbyyzVU6nc0CcwfuZhLhexammvaiCaU0ieHeI7BWvfbbjE&m=v4n059clZKEoxfRB9GdzFxy5fdVagerkzRukYEqXuGY&s=Hpubhy2jdJWf-a4vF37_8cj4qCx0buzb-3pjfuFprfQ&e=>
>
> _______________________________________________
> jetty-users mailing list
> jetty-users@eclipse.org
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
>
> https://urldefense.proofpoint.com/v2/url?u=https-3A__dev.eclipse.org_mailman_listinfo_jetty-2Dusers&d=DwICAg&c=q3cDpHe1hF8lXU5EFjNM_A&r=P3_1pTtMQK06fFymYIWbyyzVU6nc0CcwfuZhLhexammvaiCaU0ieHeI7BWvfbbjE&m=v4n059clZKEoxfRB9GdzFxy5fdVagerkzRukYEqXuGY&s=Hpubhy2jdJWf-a4vF37_8cj4qCx0buzb-3pjfuFprfQ&e=
_______________________________________________
jetty-users mailing list
jetty-users@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to