On the revprop-caching-ng branch:  Detect and handle revprop generation
file read / write hazards.

At least in theory, even a small file write might get interrupted on some
OS allowing the read to "overtake" the write.  The reader will then see
only partially updated content.  We store a checksum of the serialized
generation number in the same file as the latter.  If both are consistent,
we can be reasonably sure that read contents is valid.

* subversion/include/svn_error_codes.h
  (SVN_ERR_FS_INVALID_GENERATION): Declare new error code.

* subversion/libsvn_fs_fs/revprops.c
  (GENERATION_READ_RETRY_COUNT,
   CHECKSUMMED_NUMBER_BUFFER_LEN): Define new constants.
  (checkedsummed_number): New code to serialize and checksum a number. 
  (verify_extract_number): New code to do the reverse.
  (read_revprop_generation_file): Read the new format and retry in
                                  case of an incomplete update.
  (write_revprop_generation_file,
   svn_fs_fs__reset_revprop_generation_file): Write the new format.

* subversion/tests/cmdline/svnadmin_tests.py
  (check_hotcopy_fsfs_fsx): Ignore the checksum when checking for revprop
                            generation 0.


git-svn-id: https://svn.apache.org/repos/asf/subversion/branches/revprop-caching-ng@1620224 13f79535-47bb-0310-9956-ffa450edef68