On 06.04.21 08:12, Nathan Hartman wrote:
On Mon, Apr 5, 2021 at 3:17 PM Stefan Fuhrmann <stef...@apache.org> wrote:

See attachment (I may have used a somewhat outdated trunk).

tasks-prepwork.patch refactors some utility code to make it reusable.
tasks-main.patch is the new svn_task__t API, implementation and bits of testing.
tasks-used*.patch is calling the new API from svn_wc__internal_walk_status plus
optimizations in wc_*.*

The patches are only to give you an idea of the scope of the change; they lack
almost all documentation.  I plan to go for a simpler first integration, i.e.
keep wc_*.* as is and possibly reduce the code churn in status.c.


Which version of APR are you using in your builds?

Nothing special - whatever comes with the distro I'm using.
Specifically 1.6.5 but I have been building & testing against 2.0.0 as well.

I used apr-1.4.8, apr-util-1.4.1 because recently there was some work
to restore building SVN with APR 1.4 to allow building on older OS
like CentOS 7. I wanted to make sure these changes don't "un-restore"
building with APR 1.4. In my build, APR_HAS_THREADS was defined.

I don't expect any specific dependency for my additions. The big-O thing
I found is a UNIX-only API detail (full path walk for every stat call
when listing a directory) and the runtime impact is moderate.  Haven't come
around to polishing up the patch, yet.

It looks like there's no fallback in case the new implementation can't
be used; e.g., svn_thread_cond__wait() et al basically do nothing
unless APR_HAS_THREADS is defined.

That is basically in keeping with how we treat svn_mutex__t.  If there
are (supposed to be) no threads, there is no point in synchronizing
and things become no-ops.  But you don't need to litter the SVN code
base with dependencies on APR_HAS_THREADS.

Today's commits should make this a bit clearer.

tasks-used-optimized-wc-status.patch applied with some offsets, so is
against a slightly out-of-date trunk, but applied without conflicts.
But my build had many test failures:

Summary of test results:
   1176 tests PASSED
   165 tests SKIPPED
   66 tests XFAILED (16 WORK-IN-PROGRESS)
   1223 tests FAILED
Python version: 2.7.16.
SUMMARY: Some tests failed

Sorry about that.  Might be side-effects of prototypical hacks to wc_*,
which I did months ago and had almost forgotten about until last night.

I noticed, however, that while the first two patches were rooted in
subversion, the third patch was rooted in subversion/libsvn_wc, so
perhaps there are other needed changes that didn't make it into the
patch? Otherwise, something is hosed... If you'd like, I'll provide
the fails.log. Be warned, it's 2.5MB!

No worries.  It's been a bit late last night.
I will try to create a streamlined patch tomorrow.

For now, you can have a look at r1888446 and see if the general API
description makes sense to you.

-- Stefan^2.

Reply via email to