On 25.11.2017 21:27, Evgeny Kotkov wrote:
Stefan Fuhrmann <stef...@apache.org> writes:

An alternative approach that might be worth considering here would be:

   (1) Extend the on-disk format and allow representation strings without
       SHA1, but with the uniquifier, something like this (where "-" stands
       for "no SHA1"):

       15 0 563 7809 28ef320a82e7bd11eebdf3502d69e608 - 14-g/_5

       (The new format would be allowed starting from FSFS 8.)

Yes, that would be one option. If you are willing to provide a patch,
I would probably +1 it. Not bothering with the space savings would
be a valid choice as well, IMO.

   (2) Use the new format to allow rep sharing for properties that writes
       the uniquifier so that svn_fs_props_changed() would work correctly,
       and doesn't introduce the overhead of writing SHA1 in the
       representation string for every property.

[...]

Barring objections and alternative suggestions, I could give a shot at
implementing this.

Go for it. Maybe notify me once you are done b/c currently, I don't
monitor the commit activity closely.

I committed the implementations of (1) and (2) in

     https://svn.apache.org/r1816347 and
     https://svn.apache.org/r1816348

respectively.

Reviewed, tested and seems to work fine. Thank you!

Test expectations may need to be adapted.
With v7 repos (see r1816402), I get two
test failures while v4 and v6 pass:

[[[
W: EXPECTED STDERR (regexp):
W: | .*Found malformed header '[^']*' in revision file|.*Missing id field in node-rev.*
W: ACTUAL STDERR:
W: | * Error verifying repository metadata.
W: | subversion/svnadmin/svnadmin.c:2191,
W: | subversion/libsvn_repos/dump.c:2511,
W: | subversion/libsvn_repos/dump.c:2425,
W: | subversion/svnadmin/svnadmin.c:965,
W: | subversion/libsvn_fs/fs-loader.c:619,
W: | subversion/libsvn_fs_fs/verify.c:914,
W: | subversion/libsvn_fs_fs/verify.c:876,
W: | subversion/libsvn_fs_fs/verify.c:233,
W: | subversion/libsvn_fs_fs/rev_file.c:263,
W: | subversion/libsvn_fs_fs/low_level.c:237,
W: | subversion/libsvn_subr/checksum.c:432: (apr_err=SVN_ERR_BAD_CHECKSUM_PARSE)
W: | svnadmin: E125012: Invalid character in hex checksum
W: CWD: /dev/shm/trunk/subversion/tests/cmdline
W: EXCEPTION: SVNUnmatchedError
Traceback (most recent call last):
  File "/dev/shm/trunk/subversion/tests/cmdline/svntest/main.py", line 1872, in 
run
    rc = self.pred.run(sandbox)
File "/dev/shm/trunk/subversion/tests/cmdline/svntest/testcase.py", line 258, in run
    return self._delegate.run(sandbox)
File "/dev/shm/trunk/subversion/tests/cmdline/svntest/testcase.py", line 178, in run
    result = self.func(sandbox)
File "/run/shm/trunk/subversion/tests/cmdline/svnadmin_tests.py", line 923, in verify_incremental_fsfs
    expected_stderr=".*Found malformed header '[^']*' in revision file"
File "/dev/shm/trunk/subversion/tests/cmdline/svntest/verify.py", line 455, in verify_outputs
    compare_and_display_lines(message, label, expected, actual, raisable)
File "/dev/shm/trunk/subversion/tests/cmdline/svntest/verify.py", line 428, in compare_and_display_lines
    raise raisable
SVNUnmatchedError
FAIL:  svnadmin_tests.py 12: svnadmin verify detects corruption dump can't
]]]

[[[
W: Unexpected error while running 'svnadmin verify'.
W: EXPECTED STDERR (regexp):
W: | .*Path '.*' is not in UTF-8.*
W: ACTUAL STDERR:
W: | * Error verifying repository metadata.
W: | subversion/svnadmin/svnadmin.c:2191,
W: | subversion/libsvn_repos/dump.c:2511,
W: | subversion/libsvn_repos/dump.c:2425,
W: | subversion/svnadmin/svnadmin.c:965,
W: | subversion/libsvn_fs/fs-loader.c:619,
W: | subversion/libsvn_fs_fs/verify.c:914,
W: | subversion/libsvn_fs_fs/verify.c:876,
W: | subversion/libsvn_fs_fs/verify.c:717,
W: | subversion/libsvn_fs_fs/verify.c:553,
W: | subversion/libsvn_fs_fs/verify.c:527: (apr_err=SVN_ERR_FS_CORRUPT)
W: | svnadmin: E160004: Checksum mismatch in item at offset 84 of length 254 bytes in file svn-test-work/repositories/svnadmin_tests-24/db/revs/0/1
W: CWD: /dev/shm/trunk/subversion/tests/cmdline
W: EXCEPTION: SVNUnmatchedError
Traceback (most recent call last):
  File "/dev/shm/trunk/subversion/tests/cmdline/svntest/main.py", line 1872, in 
run
    rc = self.pred.run(sandbox)
File "/dev/shm/trunk/subversion/tests/cmdline/svntest/testcase.py", line 258, in run
    return self._delegate.run(sandbox)
File "/dev/shm/trunk/subversion/tests/cmdline/svntest/testcase.py", line 258, in run
    return self._delegate.run(sandbox)
File "/dev/shm/trunk/subversion/tests/cmdline/svntest/testcase.py", line 178, in run
    result = self.func(sandbox)
File "/run/shm/trunk/subversion/tests/cmdline/svnadmin_tests.py", line 1706, in verify_non_utf8_paths
    [], errput, None, ".*Path '.*' is not in UTF-8.*")
File "/dev/shm/trunk/subversion/tests/cmdline/svntest/verify.py", line 455, in verify_outputs
    compare_and_display_lines(message, label, expected, actual, raisable)
File "/dev/shm/trunk/subversion/tests/cmdline/svntest/verify.py", line 428, in compare_and_display_lines
    raise raisable
SVNUnmatchedError
FAIL:  svnadmin_tests.py 24: svnadmin verify with non-UTF-8 paths
]]]

-- Stefan^2.

Reply via email to