jenkinsci / jenkinsci/subversion-plugin

[JENKINS-19351] Connection timeouts

Open
#1,058 0 comments 0 reactions 0 assignees View on GitHub
component:subversion-plugin imported-jira-issue priority:minor resolution:unresolved
Dominant language
Java
Stars
131
Forks
275
Avg merge
12h 4m
Merged PRs (30d)
6

Description

I've been experiencing polling threads hanging (I've added the stack trace at the bottom of the mail). I've done a bit of tinkering under the hood/debugging and found that socket connect timeouts are set to 0, so a timeout never occurs when attempting to connect to the subversion repository. Looking at the code in SubversionSCM.java a new instance of FilterSVNAuthenticationManager is created (line 2060 - in method getRepository()) which has an override of getReadTimeout() to set a default timeout value if nothing is set. Though this is just for the read timeouts, the ISVNAuthenticationManager interface also has a getConnectTimeout(). I was wondering if it may be prudent to override it too (patch attached with suggested changes). SVNKit is currently returning a timeout value of 0 when getConnectTimeout() is being called.

I was also going to have a chat with the SVNKit guys too, the connect timeout probably should have a different default value too.

Cheers

Peter Ineson

Stuck polling job stack trace.

java.net.PlainSocketImpl.socketConnect(Native Method)

java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)

java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)

java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)

java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

java.net.Socket.connect(Socket.java:529)

com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:559)

org.tmatesoft.svn.core.internal.util.SVNSocketFactory.connect(SVNSocketFactory.java:112)

org.tmatesoft.svn.core.internal.util.SVNSocketFactory.createSSLSocket(SVNSocketFactory.java:85)

org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.connect(HTTPConnection.java:270)

org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection._request(HTTPConnection.java:435)

org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:373)

org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:364)

org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:352)

org.tmatesoft.svn.core.internal.io.dav.DAVConnection.performHttpRequest(DAVConnection.java:708)

org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:628)

org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:103)

org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:1018)

org.tmatesoft.svn.core.internal.io.dav.DAVRepository.testConnection(DAVRepository.java:99)

hudson.scm.SubversionSCM$DescriptorImpl.checkRepositoryPath(SubversionSCM.java:2038)

hudson.scm.SubversionSCM.repositoryLocationsNoLongerExist(SubversionSCM.java:2217)

hudson.scm.SubversionSCM.compareRemoteRevisionWith(SubversionSCM.java:1232)

hudson.scm.SCM._compareRemoteRevisionWith(SCM.java:356)

hudson.scm.SCM.poll(SCM.java:373)

hudson.model.AbstractProject._poll(AbstractProject.java:1487)

hudson.model.AbstractProject.poll(AbstractProject.java:1404)

hudson.triggers.SCMTrigger$Runner.runPolling(SCMTrigger.java:439)

hudson.triggers.SCMTrigger$Runner.run(SCMTrigger.java:468)

hudson.util.SequentialExecutionQueue$QueueEntry.run(SequentialExecutionQueue.java:118)

java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

java.util.concurrent.FutureTask.run(FutureTask.java:138)

java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

java.lang.Thread.run(Thread.java:662)

---
Originally reported by pineson, imported from: Connection timeouts


  • status: Open
  • priority: Minor
  • component(s): subversion-plugin
  • resolution: Unresolved
  • votes: 0
  • watchers: 1
  • imported: 20251212-090250

Raw content of original issue

I've been experiencing polling threads hanging (I've added the stack trace at the bottom of the mail). I've done a bit of tinkering under the hood/debugging and found that socket connect timeouts are set to 0, so a timeout never occurs when attempting to connect to the subversion repository. Looking at the code in SubversionSCM.java a new instance of FilterSVNAuthenticationManager is created (line 2060 - in method getRepository()) which has an override of getReadTimeout() to set a default timeout value if nothing is set. Though this is just for the read timeouts, the ISVNAuthenticationManager interface also has a getConnectTimeout(). I was wondering if it may be prudent to override it too (patch attached with suggested changes). SVNKit is currently returning a timeout value of 0 when getConnectTimeout() is being called.

I was also going to have a chat with the SVNKit guys too, the connect timeout probably should have a different default value too.

Cheers
Peter Ineson

Stuck polling job stack trace.

java.net.PlainSocketImpl.socketConnect(Native Method)
java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
java.net.Socket.connect(Socket.java:529)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:559)
org.tmatesoft.svn.core.internal.util.SVNSocketFactory.connect(SVNSocketFactory.java:112)
org.tmatesoft.svn.core.internal.util.SVNSocketFactory.createSSLSocket(SVNSocketFactory.java:85)
org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.connect(HTTPConnection.java:270)
org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection._request(HTTPConnection.java:435)
org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:373)
org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:364)
org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:352)
org.tmatesoft.svn.core.internal.io.dav.DAVConnection.performHttpRequest(DAVConnection.java:708)
org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:628)
org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:103)
org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:1018)
org.tmatesoft.svn.core.internal.io.dav.DAVRepository.testConnection(DAVRepository.java:99)
hudson.scm.SubversionSCM$DescriptorImpl.checkRepositoryPath(SubversionSCM.java:2038)
hudson.scm.SubversionSCM.repositoryLocationsNoLongerExist(SubversionSCM.java:2217)
hudson.scm.SubversionSCM.compareRemoteRevisionWith(SubversionSCM.java:1232)
hudson.scm.SCM._compareRemoteRevisionWith(SCM.java:356)
hudson.scm.SCM.poll(SCM.java:373)
hudson.model.AbstractProject._poll(AbstractProject.java:1487)
hudson.model.AbstractProject.poll(AbstractProject.java:1404)
hudson.triggers.SCMTrigger$Runner.runPolling(SCMTrigger.java:439)
hudson.triggers.SCMTrigger$Runner.run(SCMTrigger.java:468)
hudson.util.SequentialExecutionQueue$QueueEntry.run(SequentialExecutionQueue.java:118)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
java.util.concurrent.FutureTask.run(FutureTask.java:138)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:662)

  • environment: Windows XP, Tomcat 6.0.16

1 attachment

- [subversion-plugin.patch](https://issues.jenkins.io/secure/attachment/24247/subversion-plugin.patch)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.