[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Reviewing 1.10 APIs & compatibility

From: Philip Martin <philip_at_codematters.co.uk>
Date: Mon, 15 Jan 2018 23:58:56 +0000

Julian Foad <julianfoad_at_apache.org> writes:

> Julian Foad wrote:
>> Another possible approach is to look for compatibility breakage by
>> running the 1.9 client and test suite against the 1.10 libraries,
>> and indeed different client/server version combinations.

I did this recently.

1.9 against a 1.10 server
=========================

First I ran the 1.9 testsuite against 1.10 servers
over http:// and svn://. For http:// there were two FAILs:

  FAIL: lock_tests.py 34: unlock file locked by other user
  FAIL: lock_tests.py 53: unlock a lock with timeout

In both cases the problem is the testsuite getting different error from
that expected:

  W: Unexpected output
  W: EXPECTED STDERR (regexp):
  W: | svn: warning: W160039: .*[Uu]nlock of .*403 Forbidden.*
  W: ACTUAL STDERR:
  W: | svn: warning: apr_err=SVN_ERR_FS_PATH_ALREADY_LOCKED
  W: | svn: warning: W160035: Path 'pi' already locked (423 Locked)
  W: | ../src-1.9/subversion/svn/unlock-cmd.c:100: (apr_err=SVN_ERR_ILLEGAL_TARGET)
  W: | svn: E200009: One or more locks could not be released

It turns out that both 1.9 and 1.10 servers return the same underlying
FS error: the W160039 expected by the testsuite. The difference is that
the 1.9 server wraps it in a 403 while the 1.10 server wraps it in a
423. The 1.9 client does not have r1716450 and that causes the 1.9
client to convert the underlying FS error to W160035.

For svn:// there were three FAILs:

  FAIL: ra-test 1: test svn_ra_get_location_segments
  FAIL: ra-test 4: lock multiple paths
  FAIL: ra-test 5: test ra_get_dir2

In all cases these are caused by the server returning
SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION due to a commit editor drive
failing to close directories, a testsuite bug fixed in 1.10 by r1665532.

1.10 against a 1.9 server
=========================

I also ran the 1.10 testsuite against 1.9 servers over http:// and
svn://. In order to run the svn:// tests I had to disable part of
ra-test 10 as the 1.9 server doesn't have r1723865 and the 1.10
testsuite would block.

There were more failures than running 1.9 against 1.10 but a number were
functionaltity missing from 1.9 which is to be expected. Both http://
and svn:// failed these tests:

  FAIL: ra-test 8: delete revision newer than youngest
  FAIL: ra-test 9: check how ra functions handle bad revisions
  FAIL: basic_tests.py 67: null 'update' updates last changed rev
  FAIL: basic_tests.py 68: null 'property update' updates last changed rev
  FAIL: svnadmin_tests.py 48: upgrade --compatible-version=1.3
  FAIL: svnadmin_tests.py 56: svnadmin dump with no-op property change

The first ra-test FAIL is a faulty commit that is only detected by 1.10.
The second ra-test FAIL is test for r1665308, a revision range check
that is not in 1.9.

The basic_tests FAILs are issue 4700 which is not fixed in 1.9.

The first svnadmin_tests FAIL is due to the test using a 1.10 format
repository. The second svnadmin_tests FAIL is due to issue 4623 which
is not fixed in 1.9.

The http:// tests also failed:

  FAIL: lock_tests.py 34: unlock file locked by other user
  FAIL: mod_dav_svn_tests.py 1: verify 'Cache-Control' headers on responses

The lock FAIL is the same lock change that affects 1.9 but in
reverse, the 1.9 server sends 403 and the 1.10 testsuite expects 423.
The mod_dav_svn_tests FAIL is a new 1.10 feature not provided by the
1.9 server.

Summary
=======

Assuming the 1.10 behaviour of sending the 423 lock error is correct
then we cannot avoid the behaviour change for the 1.9 client and the
1.10 release notes should document it. In the longer term I suppose we
could backport a client side fix to 1.9.

1.9 with 1.10 libraries
=======================

I built 1.9 and 1.10 with --disable-full-version-match and then I copied
the 1.10 shared libraries, i.e. libsvn_*-1.so.0.0.0, into the 1.9 build
overwriting the 1.9 libraries. Running the 1.9 regression tests allows
testing of some of the ompatibility wrappers since the 1.9 binaries will
still call the top level 1.9 functions. This does not test all the
wrappers, only those invoked directly by the binaries.

There are 42 FAILs running the tests over ra_local, and fs-fs-pack-test
appears to hang and needs to be killed. I have not yet investigated any
of these failures:

FAIL: cache-test 4: basic membuffer svn_cache test
FAIL: cache-test: Unknown test failure; see tests.log.
FAIL: fs-fs-pack-test 18: file with 0 expanded-length, issue #4554
FAIL: fs-fs-pack-test: Unknown test failure; see tests.log.
FAIL: fs-fs-private-test 3: load the P2L index
FAIL: fs-fs-private-test 1: get statistics on a FSFS filesystem
FAIL: fs-test 42: test svn_fs__compatible_version
FAIL: fs-test 66: test rep-sharing on content rather than SHA1
FAIL: op-depth-test 69: move/delete file externals (issue 4293)
FAIL: parse-diff-test 9: test parsing unidiffs lacking trailing eol
FAIL: ra-test: Unknown test failure; see tests.log.
FAIL: repos-test 7: test authz access control
FAIL: repos-test 10: test authz with global groups
FAIL: repos-test: Unknown test failure; see tests.log.
FAIL: utf-test 7: test svn_utf__fuzzy_escape
FAIL: copy_tests.py 4: svn cp URL URL cannot overwrite destination
FAIL: diff_tests.py 51: create a diff in git unidiff format for wc-wc
FAIL: diff_tests.py 52: create a diff in git unidiff format for url-wc
FAIL: diff_tests.py 53: create a diff in git unidiff format for url-url
FAIL: diff_tests.py 56: create a diff in git format for empty files
FAIL: diff_tests.py 57: create a diff in git format showing prop changes
FAIL: diff_tests.py 68: create a diff in git unidff format for wc dir mv
FAIL: externals_tests.py 44: move with file externals
FAIL: externals_tests.py 48: file externals unversioned obstruction
FAIL: patch_tests.py 13: patch target with no svn:eol-style
FAIL: patch_tests.py 15: patch target with uncommitted svn:eol-style
FAIL: patch_tests.py 20: apply the same patch twice
FAIL: patch_tests.py 21: patch with dir properties
FAIL: patch_tests.py 27: revert a patch by reverse patching
FAIL: patch_tests.py 32: patch file lacking trailing eol
FAIL: patch_tests.py 44: apply a patch to an empty file
FAIL: patch_tests.py 45: svn diff created patch should apply without fuz
FAIL: patch_tests.py 53: patch delete modified
FAIL: patch_tests.py 54: find closest hunk
FAIL: stat_tests.py 27: run 'status -u' with locally deleted directories
FAIL: svnadmin_tests.py 24: svnadmin verify with non-UTF-8 paths
FAIL: svnauthz_tests.py 8: test 'svnauthz accessof --is' on files
FAIL: svnauthz_tests.py 9: test 'svnauthz accessof --is' on files and urls
FAIL: svnfsfs_tests.py 1: load-index in a packed repo
FAIL: svnfsfs_tests.py 2: stats on empty repo shall not crash
FAIL: upgrade_tests.py 15: upgrade tree conflict data (f20->f21)
FAIL: upgrade_tests.py 21: upgrade from format 28: rename pristines

-- 
Philip
Received on 2018-01-16 00:59:09 CET

This is an archived mail posted to the Subversion Dev mailing list.