James Stocks wrote on Thu, 10 Sep 2020 15:01 +0100:
> [...], this wrongly asserts that the mirror is out of
> sync during the brief window when the mirror hasn't caught up.
>
> We would like to find a way of inspecting the time of a given commit
> being successfully synchronised to a mirror as opposed to the
> timestamp of the commit itself. We think that this might be stored as
> metadata in the subversion filesystem.
No, that timestamp isn't stored. However, you could write a simple
post-commit hook to record it.
> Alternatively, is it possible
> to inspect the SVN repo on the mirror and determine the time of the
> most recent successful svnsync?
Yes, it's possible. However, before I say how, I'll stress the
post-commit solution is preferable to the following one.
The following solution relies on implementation details: Check
$REPOS_DIR/{format,db/fs-type,db/format} in this order, then check the
timestamp of $REPOS_DIR/db/current. That file is updated whenever and
only when $REPOS_DIR is committed to (revprop changes don't count).
> I am aware that we could check the
> return code of svnsync running on the master, however, we need to be
> able to check this on the mirror end of the process.
>
What you can do is inspect the svn:sync-* revprops on r0 of the mirror —
svn:sync-lock, svn:sync-last-merged-rev, & svn:sync-currently-copying —
and cross-reference them with `svnlook youngest` on the mirror, and
with whether there's an active TCP connection to whichever IP svnsync
runs on. (The last part is needed in case svnsync exits abnormally,
leaving a stale svn:sync-currently-copying behind. The next «svnsync
sync» run will DTRT in such cases, but your monitoring will
nevertheless want to detect them.)
> We would appreciate advice anyone has with this situation, or tips
> from anyone who has dealt with anything similar.
Yet another solution is to push commit notifications (using svnpubsub,
post-commit emails, or anything else) to the the host that runs svnsync
(in your case it's the master, but svnsync can also be run from the
mirror or from a third host) and _then_ monitor the exit code of svnsync.
Cheers,
Daniel