File not found: transaction …, path …. SVN mysteries behind an Apache Reverse Proxy
We have an SVN server somewhere on our intranet, but since outside people want to access it, I put it behind an Apache reverse proxy. It was fairly straightforward. Here’s an excellent tutorial if you want to know how to do it: http://silmor.de/49 .
Basically, you have the intranet apache that’s configured to serve SVN, and you have an outside apache in your firewall’s DMZ that proxies the request:
ProxyPass /svn/ http://intranet.example.com/svn/
It was all fine when people checked out their sources, but there were strange errors during commits. 7 files commits worked ok. When you tried 8 files or more, you got something like…
File not found: transaction ‘431-12’, path ‘/parser/XMLparser/XMLparser.sln’
It took a lot of sweat to find out why 8 was the magic number – and after a lot of packet dumps and tracing, I found out that one of the servers used HTTP keepalives, and the other one rejected them.
So here’s a couple of rules not to be broken when proxying SVN requests:
Keep the same paths. Do not try something like
ProxyPass /svn/ http://intranet.example.com/my_svn/ . It will fail with a cryptic error message at the worst of time.
Keep the same configuration. Check your /etc/httpd/conf/httpd.conf on both servers for differences in your configuration. In my case, I had “KeepAlives On” in one server and “KeepAlives Off” in the other. When I put them both to On, it worked just fine.