Add a timeout to the update center refresh http calls DownloadService loadJSON and loadJSONHTML
Author: gbhat618Created Sep 11, 2026Updated Sep 11, 2026
The response reading doesn't have any timeouts configured, we (CloudBees) noticed in one of our tests getting stuck with the following thread dump,
thread stuck in reading DownloadService.loadJSON"Update site data downloader [#3]" Id=256 Group=main RUNNABLE (in native)
at [email protected]/sun.nio.ch.Net.poll(Native Method)
at [email protected]/sun.nio.ch.NioSocketImpl.park(NioSocketImpl.java:190)
at [email protected]/sun.nio.ch.NioSocketImpl.park(NioSocketImpl.java:200)
at [email protected]/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:307)
at [email protected]/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:354)
at [email protected]/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:798)
at [email protected]/java.net.Socket$SocketInputStream.implRead(Socket.java:974)
at [email protected]/java.net.Socket$SocketInputStream.read(Socket.java:964)
at [email protected]/java.io.BufferedInputStream.fill(BufferedInputStream.java:289)
at [email protected]/java.io.BufferedInputStream.read1(BufferedInputStream.java:330)
at [email protected]/java.io.BufferedInputStream.read(BufferedInputStream.java:388)
- locked java.io.BufferedInputStream@76396509
at [email protected]/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:795)
at [email protected]/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:727)
at [email protected]/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1392)
at [email protected]/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1302)
at app//hudson.model.DownloadService.loadJSON(DownloadService.java:122)
at app//hudson.model.UpdateSite.updateDirectlyNow(UpdateSite.java:235)
at app//hudson.model.UpdateSite.lambda$updateDirectly$0(UpdateSite.java:196)
at app//hudson.model.UpdateSite$$Lambda/0x000000006cdd7b48.call(Unknown Source)
at [email protected]/java.util.concurrent.FutureTask.run(FutureTask.java:328)
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at [email protected]/java.lang.Thread.runWith(Thread.java:1487)
at [email protected]/java.lang.Thread.run(Thread.java:1474)
Number of locked synchronizers = 3
- java.util.concurrent.locks.ReentrantLock$NonfairSync@637c840d
- java.util.concurrent.locks.ReentrantLock$NonfairSync@51ac12ac
- java.util.concurrent.ThreadPoolExecutor$Worker@1caffe35"Jetty (JavaNetReverseProxy)-152" Id=152 Group=main RUNNABLE (in native)
at [email protected]/sun.nio.ch.Net.connect0(Native Method)
at [email protected]/sun.nio.ch.Net.connect(Net.java:546)
at [email protected]/sun.nio.ch.Net.connect(Net.java:535)
at [email protected]/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:585)
at [email protected]/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:284)
at [email protected]/java.net.Socket.connect(Socket.java:659)
at [email protected]/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:304)
at [email protected]/sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:181)
at [email protected]/sun.net.NetworkClient.doConnect(NetworkClient.java:166)
at [email protected]/sun.net.www.http.HttpClient.openServer(HttpClient.java:516)
at [email protected]/sun.net.www.http.HttpClient.openServer(HttpClient.java:604)
at [email protected]/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:206)
at [email protected]/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:288)
at [email protected]/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:193)
at [email protected]/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:963)
at [email protected]/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:899)
at [email protected]/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:179)
at [email protected]/sun.net.www.protocol.http.HttpURLConnection.followRedirect0(HttpURLConnection.java:2540)
at [email protected]/sun.net.www.protocol.http.HttpURLConnection.followRedirect(HttpURLConnection.java:2456)
at [email protected]/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1631)
at [email protected]/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1302)
at [email protected]/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:223)
at [email protected]/java.net.URL.openStream(URL.java:1263)
at app//org.jvnet.hudson.test.JavaNetReverseProxy2.service(JavaNetReverseProxy2.java:82)
at app//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
at app//org.eclipse.jetty.ee9.servlet.ServletHolder.handle(ServletHolder.java:781)
at app//org.eclipse.jetty.ee9.servlet.ServletHandler.doHandle(ServletHandler.java:528)
at app//org.eclipse.jetty.ee9.nested.ScopedHandler.nextHandle(ScopedHandler.java:193)
at app//org.eclipse.jetty.ee9.nested.ContextHandler.doHandle(ContextHandler.java:1047)
at app//org.eclipse.jetty.ee9.nested.ScopedHandler.nextScope(ScopedHandler.java:162)
at app//org.eclipse.jetty.ee9.servlet.ServletHandler.doScope(ServletHandler.java:483)
at app//org.eclipse.jetty.ee9.nested.ScopedHandler.nextScope(ScopedHandler.java:160)
at app//org.eclipse.jetty.ee9.nested.ContextHandler.doScope(ContextHandler.java:962)
at app//org.eclipse.jetty.ee9.nested.ScopedHandler.handle(ScopedHandler.java:123)
at app//org.eclipse.jetty.ee9.nested.ContextHandler.handle(ContextHandler.java:1729)
at app//org.eclipse.jetty.ee9.nested.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1581)
at app//org.eclipse.jetty.ee9.nested.HttpChannel.dispatch(HttpChannel.java:733)
at app//org.eclipse.jetty.ee9.nested.HttpChannel.handle(HttpChannel.java:520)
at app//org.eclipse.jetty.ee9.nested.ContextHandler$CoreContextHandler$CoreToNestedHandler.handle(ContextHandler.java:3054)
at app//org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1224)
at app//org.eclipse.jetty.server.Server.handle(Server.java:197)
at app//org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:787)
at app//org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:420)
at app//org.eclipse.jetty.server.internal.HttpConnection$FillableCallback.succeeded(HttpConnection.java:1809)
at app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at app//org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:54)
at app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009)
at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239)
at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194)
at [email protected]/java.lang.Thread.runWith(Thread.java:1487)
at [email protected]/java.lang.Thread.run(Thread.java:1474)
Number of locked synchronizers = 3
- java.util.concurrent.locks.ReentrantLock$NonfairSync@77a0dd63
- java.util.concurrent.locks.ReentrantLock$NonfairSync@543fe698
- java.util.concurrent.locks.ReentrantLock$NonfairSync@6b2fdffcAdd a system property (SystemProperties.getDuration of here) with some sensible default, so if someone want to configure a higher timeout they have an option to do so.
Source: jenkinsci/jenkins