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.
atlassian-fisheye-YYYY-MM-DD.log
に次のメッセージが表示される。
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
診断
Diagnostic Steps
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/svn
folder inside your Fisheye installation:cd /path/to/fisheye/installation/lib/svn
Run the above SVN command using SVNKit and append the
time
command 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):
~/.subversion/servers
/etc/subversion/servers
Windows XP users (without Native Subversion) running Fisheye/Crucible using Local System Account may find Subversion configuration files in C:\Windows\system32\config\systemprofile\Application Data\Subversion
.
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.
See the following improvement request for more information: - FE-3253Getting issue details... STATUS
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