SVN operations taking longer than an hour time out
SVN operations taking more than 60 minutes to execute when using the built-in SVNKit library time out. Increasing the SVN Operation Timeout does not have any effect for SVN servers being reached over HTTP/S connections. The respective commands execute successfully on the command line when using native SVN libraries.
WARN - Cancelling SVN Operation (log -v -r 6952:7976 https://<Base URL>/svn/@7976) on repository svn due to timeout ERROR - Problem processing revisions from repo svn due to class com.cenqua.fisheye.rep.RepositoryClientException - org.tigris.subversion.javahl.ClientException: svn: timed out waiting for server ...
INFO [InitPing <repository_name>] fisheye SvnTask-cancel - Cancelling Subversion operation : svn diff --summarize -r 6952:7976 http://<Base URL>/svn//@7976 ERROR [InitPing <repository_name>] fisheye BaseRepositoryScanner-handleSlurpException - Problem processing revisions from repo testrepo due to class com.cenqua.fisheye.rep.RepositoryClientException - java.util.concurrent.TimeoutException com.cenqua.fisheye.rep.RepositoryClientException: java.util.concurrent.TimeoutException
To check the duration of the SVN command that is timing out, the following method can be used.
Determine the SVN command to run, this can be found by looking at which SVN operation was canceled. Using the example above, our command would be:
svn diff --summarize -r 6952:7976 http://<Base URL>/svn//@7976
Change directories to the
lib/svnfolder inside your Fisheye installation:
Run the above SVN command using SVNKit and append the
timecommand before it, which time how long the command takes to complete:
time ./jsvn diff --summarize -r 6952:7976 http://<Base URL>/svn//@7976
The time command is specific to Linux, if running Windows as the OS then you can install Cygwin which will allow you to run the command in a linux like environment.
This command took 289 minutes to complete, so the timeout should be set to 5+ hours to allow the command to complete
real 289m28.726s user 109m24.279s sys 25m51.374s
The library that Fisheye/Crucible uses (SVNKit) for SVN integration defines a timeout of 60 minutes by default if the property
http-timeout is not defined in the Subversion configuration. This property defines the time to wait for a server response and terminates the HTTP call if it exceeds the timeout.
Note that one or more of these resolutions can be applied depending on an environment set up.
Review the entire set of proxy or web servers between Fisheye and the SVN server to make sure that the connection is not interrupted by any of them.
Increase the connection timeout in any of the intermediate applications (including but not limited to):
- a Web proxy
- a Proxy Server
- the Apache server
Setting http-timeout property on Fisheye Server
Set the property
http-timeout in your Subversion configuration file (where Fisheye/Crucible server is running) and restart Fisheye/Crucible after making the change. For the below example adding 259200 (seconds) will be equivalent to 3 days:
[global] http-timeout = 259200
This property can be defined in the file named
servers (either for the user running Fisheye/Crucible or for the entire server) which is located in the Subversion configuration directory. If the file does not exist, create it. In Linux, this file can be found in either of these locations (respectively):
Windows XP users (without Native Subversion) running Fisheye/Crucible using Local System Account may find Subversion configuration files in
You can read more about this property and its usage here.
You must also set the SVN Operation Timeout on the Fisheye administration page as this also defaults to 60 minutes.
Setting timeout on Apache
Apache Server could be also timing out the request. Configuring these values in
httpd.conf with the help of this third party article should help elevate the timeout problem on Apache level.
Using SVN command svnsync
Use the svnsync command to mirror SVN repository to a local machine where Fisheye is hosted (and eliminating some performance holdback). Also, configure Fisheye to use file:// protocol directly on the local copy of the repository