Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jgit-dev] TransportException: Socket closed

I forgot to mention that we also tried (4) increasing the http postbuffer on the client side. This didn't have a noticeable effect in reducing the number of flakes.

- Grace

2016-05-23 13:21 GMT+02:00 Grace Wang <gracewang92@xxxxxxxxx>:
Sorry for the extra message, I sent my previous email a bit early with an incomplete last paragraph. Corrected below!

2016-05-23 13:18 GMT+02:00 Grace Wang <gracewang92@xxxxxxxxx>:
Hi,

My colleague Jared emailed this list a few months ago describing a mysterious "Socket closed" exception that we have been unable to repro reliably. Unfortunately we haven't managed to resolve the issue, so I thought I'd provide more details about the project.

You can see the original thread and exception here. I've also included up to date stack traces at the bottom of this email.

Things we have tried to resolve this issue:
  1. closing all repository references (based on Randall's reply)
  2. tuning jgit parameters, specifically WindowCacheConfig.setPackedGitOpenFiles (also increased ulimit accordingly)
  3. patching Jgit's FetchCommand and PushCommand to retry transport.push() for SocketExceptions
Of the above, only #3 was effective but it has an unwanted side effect where in the second retry, the PushCommand returns a PushResult of UP_TO_DATE, indicating that the first push command was successfully executed server-side.

Details about the project:
  • we are using GitServlet but with custom implementations of certain core JGit interfaces like Repository, RepositoryResolver, DfsObjDatabase, DfsRefDatabase
    • our implementation of Repository extends DfsRepository and only overrides the following methods: getObjectDatabase(), getRefDatabase()
  • we also have installed a filter onto the GitServlet that challenges the user for an Authorization header
  • we are using Docker for integration testing + benchmarks
    • 90 integration tests
      • each one will typically perform 1-5 clone/push operations
    • 20 benchmarks
      • each benchmark does 10-30 pushes
  • we're unable to repro the flakes locally (on OS X using docker machine). however, on Circle CI they are quite frequent (probably occur in > 20% of runs) — perhaps due to increased network traffic or some subtleties with Circle CI's docker fork. We're using Circle CI for enterprise, otherwise would include a link to the project's builds.
We're stumped for ideas on how to move forward other than running the integration test suite on the vanilla Docker distribution vs. Circle's fork. In particular, the fact that any PushCommand retries result in a PushResult.UP_TO_DATE seems fishy -- perhaps there are some aspects of the Git smart HTTP protocol + Jgit's implementation of it that are causing the HTTP connection to be prematurely severed. Any further insight you can provide would be much appreciated!

- Grace

Client side stack trace: 
ERROR [2016-05-20 20:12:38,606] com.palantir.remoting.http.server.JsonExceptionMapper: org.eclipse.jgit.api.errors.TransportException: https://stemma.palantir.dev:7333/stemma/git/ri.stemma.main.repository.3028d69a-c6dd-4acd-863a-91e3de1922ec: Socket closed
! java.net.SocketException: Socket closed
! at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_72]
! at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_72]
! at java.net.SocketInputStream.read(SocketInputStream.java:170) ~[na:1.8.0_72]
! at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_72]
! at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) ~[na:1.8.0_72]
! at sun.security.ssl.InputRecord.read(InputRecord.java:503) ~[na:1.8.0_72]
! at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) ~[na:1.8.0_72]
! at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:930) ~[na:1.8.0_72]
! at sun.security.ssl.AppInputStream.read(AppInputStream.java:105) ~[na:1.8.0_72]
! at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_72]
! at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) ~[na:1.8.0_72]
! at java.io.BufferedInputStream.read(BufferedInputStream.java:345) ~[na:1.8.0_72]
! at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:552) ~[na:1.8.0_72]
! at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:609) ~[na:1.8.0_72]
! at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:696) ~[na:1.8.0_72]
! at java.io.FilterInputStream.read(FilterInputStream.java:133) ~[na:1.8.0_72]
! at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3336) ~[na:1.8.0_72]
! at org.eclipse.jgit.util.io.UnionInputStream.read(UnionInputStream.java:145) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.util.IO.readFully(IO.java:247) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.PacketLineIn.readLength(PacketLineIn.java:186) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.SideBandInputStream.needDataPacket(SideBandInputStream.java:154) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.SideBandInputStream.read(SideBandInputStream.java:136) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.util.IO.readFully(IO.java:247) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.PacketLineIn.readLength(PacketLineIn.java:186) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.PacketLineIn.readString(PacketLineIn.java:138) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.BasePackPushConnection.readStringLongTimeout(BasePackPushConnection.java:375) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.BasePackPushConnection.readStatusReport(BasePackPushConnection.java:327) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.BasePackPushConnection.doPush(BasePackPushConnection.java:202) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! ... 73 common frames omitted
! Causing: org.eclipse.jgit.errors.TransportException: https://stemma.palantir.dev:7333/stemma/git/ri.stemma.main.repository.3028d69a-c6dd-4acd-863a-91e3de1922ec: Socket closed
! at org.eclipse.jgit.transport.BasePackPushConnection.doPush(BasePackPushConnection.java:219) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.TransportHttp$SmartHttpPushConnection.doPush(TransportHttp.java:786) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.BasePackPushConnection.push(BasePackPushConnection.java:154) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.PushProcess.execute(PushProcess.java:167) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.transport.Transport.push(Transport.java:1250) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:157) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! ... 68 common frames omitted
! Causing: org.eclipse.jgit.api.errors.TransportException: https://stemma.palantir.dev:7333/stemma/git/ri.stemma.main.repository.3028d69a-c6dd-4acd-863a-91e3de1922ec: Socket closed
! at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:164) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at com.palantir.stemma.workstate.ForkBasedWorkStateOperations.gitPush(ForkBasedWorkStateOperations.java:1154) ~[stemma-work-state-server-0.9.1-dev-2-g124d5f7.jar:na]
! ... 67 common frames omitted

Server side stack trace:
WARN  [2016-05-20 20:12:38,702] /stemma: Internal error during receive-pack to [3028d69a-c6dd-4acd-863a-91e3de1922ec]
! java.io.IOException: Broken pipe
! at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[na:1.8.0_72]
! at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[na:1.8.0_72]
! at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[na:1.8.0_72]
! at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[na:1.8.0_72]
! at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471) ~[na:1.8.0_72]
! at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:170) ~[jetty-io-9.2.13.v20150730.jar:9.2.13.v20150730]
! ... 70 common frames omitted
! Causing: org.eclipse.jetty.io.EofException: null
! at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:192) ~[jetty-io-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.flush(SslConnection.java:808) ~[jetty-io-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:408) ~[jetty-io-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:302) ~[jetty-io-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:129) ~[jetty-io-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.HttpConnection$SendCallback.process(HttpConnection.java:684) ~[jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:246) ~[jetty-util-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:208) ~[jetty-util-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.HttpConnection.send(HttpConnection.java:480) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:768) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.HttpChannel.write(HttpChannel.java:801) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:147) ~[jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:140) ~[jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.HttpOutput.flush(HttpOutput.java:242) ~[jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:141) ~[na:1.8.0_72]
! at org.eclipse.jgit.util.io.SafeBufferedOutputStream.close(SafeBufferedOutputStream.java:83) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.util.TemporaryBuffer.close(TemporaryBuffer.java:370) ~[org.eclipse.jgit-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.SmartOutputStream.close(SmartOutputStream.java:99) ~[org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.ReceivePackServlet.doPost(ReceivePackServlet.java:194) ~[org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [javax.servlet-api-3.1.0.jar:3.1.0]
! at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [javax.servlet-api-3.1.0.jar:3.1.0]
! at org.eclipse.jgit.http.server.glue.UrlPipeline$Chain.doFilter(UrlPipeline.java:237) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.ReceivePackServlet$Factory.doFilter(ReceivePackServlet.java:150) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.glue.UrlPipeline$Chain.doFilter(UrlPipeline.java:235) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.RepositoryFilter.doFilter(RepositoryFilter.java:151) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.glue.UrlPipeline$Chain.doFilter(UrlPipeline.java:235) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.NoCacheFilter.doFilter(NoCacheFilter.java:80) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.glue.UrlPipeline$Chain.doFilter(UrlPipeline.java:235) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.glue.UrlPipeline.service(UrlPipeline.java:215) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.glue.SuffixPipeline.service(SuffixPipeline.java:101) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.glue.MetaFilter.doFilter(MetaFilter.java:175) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at org.eclipse.jgit.http.server.glue.MetaServlet.service(MetaServlet.java:133) [org.eclipse.jgit.http.server-4.3.1.201605051710-r.jar:4.3.1.201605051710-r]
! at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [javax.servlet-api-3.1.0.jar:3.1.0]
! at io.dropwizard.jetty.NonblockingServletHolder.handle(NonblockingServletHolder.java:49) [dropwizard-jetty-0.9.1.jar:0.9.1]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:83) [jetty-servlets-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:300) [jetty-servlets-9.2.13.v20150730.jar:9.2.13.v20150730]
! at io.dropwizard.jetty.BiDiGzipFilter.doFilter(BiDiGzipFilter.java:128) [dropwizard-jetty-0.9.1.jar:0.9.1]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]
! at io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:29) [dropwizard-servlets-0.9.1.jar:0.9.1]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]
! at io.dropwizard.jersey.filter.AllowedMethodsFilter.handle(AllowedMethodsFilter.java:43) [dropwizard-jersey-0.9.1.jar:0.9.1]
! at io.dropwizard.jersey.filter.AllowedMethodsFilter.doFilter(AllowedMethodsFilter.java:38) [dropwizard-jersey-0.9.1.jar:0.9.1]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]
! at com.palantir.stemma.servlet.ChallengeForHttpAuthFilter.doFilter(ChallengeForHttpAuthFilter.java:67) [stemma-server-0.9.1-dev-2-g124d5f7.jar:na]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]
! at com.palantir.websecurity.filters.JerseyAwareWebSecurityFilter.doFilter(JerseyAwareWebSecurityFilter.java:63) [dropwizard-web-security-0.12.0.jar:na]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:256) [jetty-servlets-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:219) [jetty-servlets-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) [jetty-servlet-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:240) [metrics-jetty9-3.1.2.jar:3.1.2]
! at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:51) [dropwizard-jetty-0.9.1.jar:0.9.1]
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:159) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.Server.handle(Server.java:499) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) [jetty-server-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) [jetty-io-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [jetty-util-9.2.13.v20150730.jar:9.2.13.v20150730]
! at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [jetty-util-9.2.13.v20150730.jar:9.2.13.v20150730]
! at java.lang.Thread.run(Thread.java:745) [na:1.8.0_72]



Back to the top