I have recompiled with the patch,
When trying to commit to the slave, the client receive:
Commit failed (details follow):
Server sent unexpected return value (500 Internal Server Error) in response to
MKACTIVITY request for '/!svn/act/12aad366-69cf-2b48-9303-bfb1220af919'
And now the error is logged in the VirtualHost error log (as defined)
instead of the main apache error log.
[Wed Dec 12 16:47:33 2012] [error] [client 10.0.2.15] (125009)APR does
not understand this error code: Invalid URI segment
'!svn/act/779db2c6-6390-e147-a8be-cc8434b0919f' in slave fixup
As i understand it will be best to switch from using root dir to
something like /svn.
Thanks for your help.
On Wed, Dec 12, 2012 at 3:55 PM, Daniel Shahaf danie...@elego.de wrote:
Erez Zarum wrote on Wed, Dec 12, 2012 at 15:33:08 +0200:
I am trying to create a master slave configuration with proxy requests
through the slave, i have used this configuration on the slave:
Location /
DAV svn
SVNPath /scratch/repo
SVNMasterURIhttp://master.server.com/svn;
...
/Location
In 1.7.7 the SVNMasterURI won't let me use http://master.server.com/
in 1.6.19 it will.
But when i use Location / i get the following assert in the apache
error_log (the main log): httpd: subversion/mod_dav_svn/mirror.c:47:
proxy_request_fixup: Assertion `(uri_segment[0] == '\0') ||
(uri_segment[0] == '/')' failed.
If i use Location /url then everything works as expected.
Thanks,
Erez
Hi :)
Thanks for the due diligent report on IRC, it was helpful.
This should at least fix the assertion (compiled, but untested):
[[[
Index: subversion/mod_dav_svn/mirror.c
===
--- subversion/mod_dav_svn/mirror.c (revision 1420650)
+++ subversion/mod_dav_svn/mirror.c (working copy)
@@ -39,12 +39,17 @@
URI_SEGMENT is the URI bits relative to the repository root (but if
non-empty, *does* have a leading slash delimiter).
MASTER_URI and URI_SEGMENT are not URI-encoded. */
-static void proxy_request_fixup(request_rec *r,
-const char *master_uri,
-const char *uri_segment)
+static int proxy_request_fixup(request_rec *r,
+ const char *master_uri,
+ const char *uri_segment)
{
-assert((uri_segment[0] == '\0')
- || (uri_segment[0] == '/'));
+if (uri_segment[0] != '\0' uri_segment[0] != '/')
+ {
+ap_log_rerror(APLOG_MARK, APLOG_ERR, SVN_ERR_BAD_CONFIG_VALUE, r,
+ Invalid URI segment '%s' in slave fixup,
+ uri_segment);
+return HTTP_INTERNAL_SERVER_ERROR;
+ }
r-proxyreq = PROXYREQ_REVERSE;
r-uri = r-unparsed_uri;
@@ -67,6 +72,7 @@
ap_add_output_filter(LocationRewrite, NULL, r, r-connection);
ap_add_output_filter(ReposRewrite, NULL, r, r-connection);
ap_add_input_filter(IncomingRewrite, NULL, r, r-connection);
+return OK;
}
@@ -101,8 +107,10 @@ int dav_svn__proxy_request_fixup(request_rec *r)
/txn/, (char *)NULL))
|| ap_strstr_c(seg, apr_pstrcat(r-pool, special_uri,
/txr/, (char *)NULL)))
{
+int rv;
seg += strlen(root_dir);
-proxy_request_fixup(r, master_uri, seg);
+rv = proxy_request_fixup(r, master_uri, seg);
+if (rv) return rv;
}
}
return OK;
@@ -116,8 +124,10 @@ int dav_svn__proxy_request_fixup(request_rec *r)
r-method_number == M_LOCK ||
r-method_number == M_UNLOCK ||
ap_strstr_c(seg, special_uri))) {
+int rv;
seg += strlen(root_dir);
-proxy_request_fixup(r, master_uri, seg);
+rv = proxy_request_fixup(r, master_uri, seg);
+if (rv) return rv;
return OK;
}
}
]]]
I think the actual problem is that root_dir is /, so after skipping
strlen(root_dir) bytes the result doesn't start with a slash. We could
fix that by using svn_uri__skip_ancestor()... but we already don't allow
SVNMasterURI to be a http://host:port/ URL (i.e., lacking /path
componets after the root), so maybe we shouldn't bother to try
supporting root_dir == / here.
Thoughts?
Daniel