You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2016/11/16 18:51:16 UTC

svn commit: r1770035 - in /subversion/branches/authzperf/subversion: include/private/svn_repos_private.h libsvn_repos/config_pool.c svnserve/serve.c svnserve/svnserve.c tests/libsvn_repos/repos-test.c

Author: stefan2
Date: Wed Nov 16 18:51:16 2016
New Revision: 1770035

URL: http://svn.apache.org/viewvc?rev=1770035&view=rev
Log:
On the authzperf branch:
Significantly simplify the svn_repos__config_pool_t code.

Since authz uses its own parser now, the largest config files in the system
are no longer managed through this cache.  In particular, we can drop the
fast-path code for in-repo config lookup -- which is still efficient but
will actually have to access the repo to get the content checksum.

Also, we drop support for case-sentive config files here; it's simply not
needed anymore for cached configs and that saves a lot of meddling behind
the scenes.

* subversion/include/private/svn_repos_private.h
  (svn_repos__config_pool_t):  No longer needs to be a separate struct.
  (svn_repos__config_pool_get):  Drop CASE_SENSITIVE parameter.

* subversion/libsvn_repos/config_pool.c
  (): Remove unnecessary #includes.
  (config_object_t,
   in_repo_config_t,
   svn_repos__config_pool_t,
   getter,
   setter): We cache plain svn_config_t now, so drop all wrapper support.
  (auto_parse): Drop support for CASE_SENSITIVE, produce and cache normal
                svn_cache_t objects. 
  (add_checksum,
   key_by_url):  Drop.  We don't want the repos lookup shortcut anymore.
  (find_repos_config): Remove unsupported features.
  (svn_repos__config_pool_create):  This is trivial now.
  (svn_repos__config_pool_get):  Remove unsupported features but since we
                                 don't have a getter anymore, we must put
                                 the shallow copy here.

* subversion/svnserve/serve.c
  (load_pwdb_config,
   find_repos): Update API caller.

* subversion/svnserve/svnserve.c
  (sub_main): Same.

* subversion/tests/libsvn_repos/repos-test.c
  (test_config_pool): Same. Note that this test works with case-insensitive
                      config files just as well.

Modified:
    subversion/branches/authzperf/subversion/include/private/svn_repos_private.h
    subversion/branches/authzperf/subversion/libsvn_repos/config_pool.c
    subversion/branches/authzperf/subversion/svnserve/serve.c
    subversion/branches/authzperf/subversion/svnserve/svnserve.c
    subversion/branches/authzperf/subversion/tests/libsvn_repos/repos-test.c

Modified: subversion/branches/authzperf/subversion/include/private/svn_repos_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/include/private/svn_repos_private.h?rev=1770035&r1=1770034&r2=1770035&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/include/private/svn_repos_private.h (original)
+++ subversion/branches/authzperf/subversion/include/private/svn_repos_private.h Wed Nov 16 18:51:16 2016
@@ -34,6 +34,7 @@
 #include "svn_editor.h"
 #include "svn_config.h"
 
+#include "private/svn_object_pool.h"
 #include "private/svn_string_private.h"
 
 #ifdef __cplusplus
@@ -185,7 +186,7 @@ svn_repos__get_logs_compat(svn_repos_t *
  * from multiple threads.  Configuration objects no longer referenced by
  * any user may linger for a while before being cleaned up.
  */
-typedef struct svn_repos__config_pool_t svn_repos__config_pool_t;
+typedef svn_object_pool__t svn_repos__config_pool_t;
 
 /* Create a new configuration pool object with a lifetime determined by
  * POOL and return it in *CONFIG_POOL.
@@ -203,10 +204,10 @@ svn_repos__config_pool_create(svn_repos_
  * data from a local repository.  CONFIG_POOL will store the configuration
  * and make further callers use the same instance if the content matches.
  * If KEY is not NULL, *KEY will be set to a unique ID - if available.
+ * Section and option names will be case-insensitive.
  *
  * If MUST_EXIST is TRUE, a missing config file is also an error, *CFG
- * is otherwise simply NULL.  The CASE_SENSITIVE controls the lookup
- * behavior for section and option names alike.
+ * is otherwise simply NULL.
  *
  * PREFERRED_REPOS is only used if it is not NULL and PATH is a URL.
  * If it matches the URL, access the repository through this object
@@ -223,7 +224,6 @@ svn_repos__config_pool_get(svn_config_t
                            svn_repos__config_pool_t *config_pool,
                            const char *path,
                            svn_boolean_t must_exist,
-                           svn_boolean_t case_sensitive,
                            svn_repos_t *preferred_repos,
                            apr_pool_t *pool);
 

Modified: subversion/branches/authzperf/subversion/libsvn_repos/config_pool.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/libsvn_repos/config_pool.c?rev=1770035&r1=1770034&r2=1770035&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/libsvn_repos/config_pool.c (original)
+++ subversion/branches/authzperf/subversion/libsvn_repos/config_pool.c Wed Nov 16 18:51:16 2016
@@ -25,15 +25,9 @@
 
 
 #include "svn_checksum.h"
-#include "svn_config.h"
-#include "svn_error.h"
-#include "svn_hash.h"
 #include "svn_path.h"
 #include "svn_pools.h"
-#include "svn_repos.h"
 
-#include "private/svn_dep_compat.h"
-#include "private/svn_mutex.h"
 #include "private/svn_subr_private.h"
 #include "private/svn_repos_private.h"
 #include "private/svn_object_pool.h"
@@ -41,94 +35,6 @@
 #include "svn_private_config.h"
 
 
-/* Our wrapper structure for parsed svn_config_t* instances.  All data in
- * CS_CFG and CI_CFG is expanded (to make it thread-safe) and considered
- * read-only.
- */
-typedef struct config_object_t
-{
-  /* UUID of the configuration contents.
-   * This is a SHA1 checksum of the parsed textual representation of CFG. */
-  svn_checksum_t *key;
-
-  /* Parsed and expanded configuration.  At least one of the following
-   * must not be NULL. */
-
-  /* Case-sensitive config. May be NULL */
-  svn_config_t *cs_cfg;
-
-  /* Case-insensitive config. May be NULL */
-  svn_config_t *ci_cfg;
-} config_object_t;
-
-
-/* Data structure used to short-circuit the repository access for configs
- * read via URL.  After reading such a config successfully, we store key
- * repository information here and will validate it without actually opening
- * the repository.
- *
- * As this is only an optimization and may create many entries in
- * svn_repos__config_pool_t's IN_REPO_HASH_POOL index, we clean them up
- * once in a while.
- */
-typedef struct in_repo_config_t
-{
-  /* URL used to open the configuration */
-  const char *url;
-
-  /* Path of the repository that contained URL */
-  const char *repo_root;
-
-  /* Head revision of that repository when last read */
-  svn_revnum_t revision;
-
-  /* Contents checksum of the file stored under URL@REVISION */
-  svn_checksum_t *key;
-} in_repo_config_t;
-
-
-/* Core data structure extending the encapsulated OBJECT_POOL.  All access
- * to it must be serialized using the OBJECT_POOL->MUTEX.
- *
- * To speed up URL@HEAD lookups, we maintain IN_REPO_CONFIGS as a secondary
- * hash index.  It maps URLs as provided by the caller onto in_repo_config_t
- * instances.  If that is still up-to-date, a further lookup into CONFIG
- * may yield the desired configuration without the need to actually open
- * the respective repository.
- *
- * Unused configurations that are kept in the IN_REPO_CONFIGS hash and may
- * be cleaned up when the hash is about to grow.
- */
-struct svn_repos__config_pool_t
-{
-  svn_object_pool__t *object_pool;
-
-  /* URL -> in_repo_config_t* mapping.
-   * This is only a partial index and will get cleared regularly. */
-  apr_hash_t *in_repo_configs;
-
-  /* allocate the IN_REPO_CONFIGS index and in_repo_config_t here */
-  apr_pool_t *in_repo_hash_pool;
-};
-
-
-/* Return an automatic reference to the CFG member in CONFIG that will be
- * released when POOL gets cleaned up.  The case sensitivity flag in *BATON
- * selects the desired option and section name matching mode.
- */
-static void *
-getter(void *object,
-       void *baton,
-       apr_pool_t *pool)
-{
-  config_object_t *wrapper = object;
-  svn_boolean_t *case_sensitive = baton;
-  svn_config_t *config = *case_sensitive ? wrapper->cs_cfg : wrapper->ci_cfg;
-
-  /* we need to duplicate the root structure as it contains temp. buffers */
-  return config ? svn_config__shallow_copy(config, pool) : NULL;
-}
-
 /* Return a memory buffer structure allocated in POOL and containing the
  * data from CHECKSUM.
  */
@@ -146,41 +52,9 @@ checksum_as_key(svn_checksum_t *checksum
   return result;
 }
 
-/* Copy the configuration from the wrapper in SOURCE to the wrapper in
- * *TARGET with the case sensitivity flag in *BATON selecting the config
- * to copy.  This is usually done to add the missing case-(in)-sensitive
- * variant.  Since we must hold all data in *TARGET from the same POOL,
- * a deep copy is required.
- */
-static svn_error_t *
-setter(void **target,
-       void *source,
-       void *baton,
-       apr_pool_t *pool)
-{
-  svn_boolean_t *case_sensitive = baton;
-  config_object_t *target_cfg = *(config_object_t **)target;
-  config_object_t *source_cfg = source;
-
-  /* Maybe, we created a variant with different case sensitivity? */
-  if (*case_sensitive && target_cfg->cs_cfg == NULL)
-    {
-      SVN_ERR(svn_config_dup(&target_cfg->cs_cfg, source_cfg->cs_cfg, pool));
-      svn_config__set_read_only(target_cfg->cs_cfg, pool);
-    }
-  else if (!*case_sensitive && target_cfg->ci_cfg == NULL)
-    {
-      SVN_ERR(svn_config_dup(&target_cfg->ci_cfg, source_cfg->ci_cfg, pool));
-      svn_config__set_read_only(target_cfg->ci_cfg, pool);
-    }
-
-  return SVN_NO_ERROR;
-}
-
 /* Set *CFG to the configuration passed in as text in CONTENTS and *KEY to
  * the corresponding object pool key.  If no such configuration exists in
- * CONFIG_POOL, yet, parse CONTENTS and cache the result.  CASE_SENSITIVE
- * controls option and section name matching.
+ * CONFIG_POOL, yet, parse CONTENTS and cache the result.
  *
  * RESULT_POOL determines the lifetime of the returned reference and
  * SCRATCH_POOL is being used for temporary allocations.
@@ -190,12 +64,11 @@ auto_parse(svn_config_t **cfg,
            svn_membuf_t **key,
            svn_repos__config_pool_t *config_pool,
            svn_stringbuf_t *contents,
-           svn_boolean_t case_sensitive,
            apr_pool_t *result_pool,
            apr_pool_t *scratch_pool)
 {
   svn_checksum_t *checksum;
-  config_object_t *config_object;
+  svn_config_t *config;
   apr_pool_t *cfg_pool;
 
   /* calculate SHA1 over the whole file contents */
@@ -204,87 +77,31 @@ auto_parse(svn_config_t **cfg,
 
   /* return reference to suitable config object if that already exists */
   *key = checksum_as_key(checksum, result_pool);
-  SVN_ERR(svn_object_pool__lookup((void **)cfg, config_pool->object_pool,
-                                  *key, &case_sensitive, result_pool));
+  SVN_ERR(svn_object_pool__lookup((void **)cfg, config_pool,
+                                  *key, NULL, result_pool));
   if (*cfg)
     return SVN_NO_ERROR;
 
   /* create a pool for the new config object and parse the data into it  */
-  cfg_pool = svn_object_pool__new_wrapper_pool(config_pool->object_pool);
+  cfg_pool = svn_object_pool__new_wrapper_pool(config_pool);
 
-  config_object = apr_pcalloc(cfg_pool, sizeof(*config_object));
-
-  SVN_ERR(svn_config_parse(case_sensitive ? &config_object->cs_cfg
-                                          : &config_object->ci_cfg,
+  SVN_ERR(svn_config_parse(&config,
                            svn_stream_from_stringbuf(contents, scratch_pool),
-                           case_sensitive, case_sensitive, cfg_pool));
+                           FALSE, FALSE, cfg_pool));
 
   /* switch config data to r/o mode to guarantee thread-safe access */
-  svn_config__set_read_only(case_sensitive ? config_object->cs_cfg
-                                           : config_object->ci_cfg,
-                            cfg_pool);
+  svn_config__set_read_only(config, cfg_pool);
 
   /* add config in pool, handle loads races and return the right config */
-  SVN_ERR(svn_object_pool__insert((void **)cfg, config_pool->object_pool,
-                                  *key, config_object, &case_sensitive,
-                                  cfg_pool, result_pool));
-
-  return SVN_NO_ERROR;
-}
-
-/* Store a URL@REVISION to CHECKSUM, REPOS_ROOT in CONFIG_POOL.
- */
-static svn_error_t *
-add_checksum(svn_repos__config_pool_t *config_pool,
-             const char *url,
-             const char *repos_root,
-             svn_revnum_t revision,
-             svn_checksum_t *checksum)
-{
-  apr_size_t path_len = strlen(url);
-  apr_pool_t *pool = config_pool->in_repo_hash_pool;
-  in_repo_config_t *config = apr_hash_get(config_pool->in_repo_configs,
-                                          url, path_len);
-  if (config)
-    {
-      /* update the existing entry */
-      memcpy((void *)config->key->digest, checksum->digest,
-             svn_checksum_size(checksum));
-      config->revision = revision;
-
-      /* duplicate the string only if necessary */
-      if (strcmp(config->repo_root, repos_root))
-        config->repo_root = apr_pstrdup(pool, repos_root);
-    }
-  else
-    {
-      /* insert a new entry.
-       * Limit memory consumption by cyclically clearing pool and hash. */
-      if (2 * svn_object_pool__count(config_pool->object_pool)
-          < apr_hash_count(config_pool->in_repo_configs))
-        {
-          svn_pool_clear(pool);
-          config_pool->in_repo_configs = svn_hash__make(pool);
-        }
-
-      /* construct the new entry */
-      config = apr_pcalloc(pool, sizeof(*config));
-      config->key = svn_checksum_dup(checksum, pool);
-      config->url = apr_pstrmemdup(pool, url, path_len);
-      config->repo_root = apr_pstrdup(pool, repos_root);
-      config->revision = revision;
-
-      /* add to index */
-      apr_hash_set(config_pool->in_repo_configs, url, path_len, config);
-    }
+  SVN_ERR(svn_object_pool__insert((void **)cfg, config_pool, *key, config,
+                                  NULL, cfg_pool, result_pool));
 
   return SVN_NO_ERROR;
 }
 
 /* Set *CFG to the configuration stored in URL@HEAD and cache it in
- * CONFIG_POOL.  CASE_SENSITIVE controls
- * option and section name matching.  If PREFERRED_REPOS is given,
- * use that if it also matches URL.
+ * CONFIG_POOL.  If PREFERRED_REPOS is given, use that if it also matches
+ * URL.
  *
  * RESULT_POOL determines the lifetime of the returned reference and
  * SCRATCH_POOL is being used for temporary allocations.
@@ -294,7 +111,6 @@ find_repos_config(svn_config_t **cfg,
                   svn_membuf_t **key,
                   svn_repos__config_pool_t *config_pool,
                   const char *url,
-                  svn_boolean_t case_sensitive,
                   svn_repos_t *preferred_repos,
                   apr_pool_t *result_pool,
                   apr_pool_t *scratch_pool)
@@ -354,8 +170,8 @@ find_repos_config(svn_config_t **cfg,
   if (checksum)
     {
       *key = checksum_as_key(checksum, scratch_pool);
-      SVN_ERR(svn_object_pool__lookup((void **)cfg, config_pool->object_pool,
-                                      *key, &case_sensitive, result_pool));
+      SVN_ERR(svn_object_pool__lookup((void **)cfg, config_pool,
+                                      *key, NULL, result_pool));
     }
 
   /* not parsed, yet? */
@@ -374,58 +190,10 @@ find_repos_config(svn_config_t **cfg,
                                         (apr_size_t)length, scratch_pool));
 
       /* handle it like ordinary file contents and cache it */
-      SVN_ERR(auto_parse(cfg, key, config_pool, contents, case_sensitive,
+      SVN_ERR(auto_parse(cfg, key, config_pool, contents,
                          result_pool, scratch_pool));
     }
 
-  /* store the (path,rev) -> checksum mapping as well */
-  if (*cfg && checksum)
-    SVN_MUTEX__WITH_LOCK(svn_object_pool__mutex(config_pool->object_pool),
-                         add_checksum(config_pool, url, repos_root_dirent,
-                                      youngest_rev, checksum));
-
-  return SVN_NO_ERROR;
-}
-
-/* Given the URL, search the CONFIG_POOL for an entry that maps it URL to
- * a content checksum and is still up-to-date.  If this could be found,
- * return the object's *KEY.  Use POOL for allocations.
- *
- * Requires external serialization on CONFIG_POOL.
- *
- * Note that this is only the URL(+rev) -> Checksum lookup and does not
- * guarantee that there is actually a config object available for *KEY.
- */
-static svn_error_t *
-key_by_url(svn_membuf_t **key,
-           svn_repos__config_pool_t *config_pool,
-           const char *url,
-           apr_pool_t *pool)
-{
-  svn_error_t *err;
-  svn_stringbuf_t *contents;
-  apr_int64_t current;
-
-  /* hash lookup url -> sha1 -> config */
-  in_repo_config_t *config = svn_hash_gets(config_pool->in_repo_configs, url);
-  *key = NULL;
-  if (!config)
-    return SVN_NO_ERROR;
-
-  /* found *some* reference to a configuration.
-   * Verify that it is still current.  Will fail for BDB repos. */
-  err = svn_stringbuf_from_file2(&contents,
-                                 svn_dirent_join(config->repo_root,
-                                                 "db/current", pool),
-                                 pool);
-  if (!err)
-    err = svn_cstring_atoi64(&current, contents->data);
-
-  if (err)
-    svn_error_clear(err);
-  else if (current == config->revision)
-    *key = checksum_as_key(config->key, pool);
-
   return SVN_NO_ERROR;
 }
 
@@ -436,22 +204,8 @@ svn_repos__config_pool_create(svn_repos_
                               svn_boolean_t thread_safe,
                               apr_pool_t *pool)
 {
-  svn_repos__config_pool_t *result;
-  svn_object_pool__t *object_pool;
-
-  SVN_ERR(svn_object_pool__create(&object_pool, getter, setter,
-                                  thread_safe, pool));
-
-  /* construct the config pool in our private ROOT_POOL to survive POOL
-   * cleanup and to prevent threading issues with the allocator */
-  result = apr_pcalloc(pool, sizeof(*result));
-
-  result->object_pool = object_pool;
-  result->in_repo_hash_pool = svn_pool_create(pool);
-  result->in_repo_configs = svn_hash__make(result->in_repo_hash_pool);
-
-  *config_pool = result;
-  return SVN_NO_ERROR;
+  return svn_error_trace(svn_object_pool__create(config_pool, NULL, NULL,
+                                                 thread_safe, pool));
 }
 
 svn_error_t *
@@ -460,7 +214,6 @@ svn_repos__config_pool_get(svn_config_t
                            svn_repos__config_pool_t *config_pool,
                            const char *path,
                            svn_boolean_t must_exist,
-                           svn_boolean_t case_sensitive,
                            svn_repos_t *preferred_repos,
                            apr_pool_t *pool)
 {
@@ -476,32 +229,15 @@ svn_repos__config_pool_get(svn_config_t
 
   if (svn_path_is_url(path))
     {
-      /* Read config file from repository.
-       * Attempt a quick lookup first. */
-      SVN_MUTEX__WITH_LOCK(svn_object_pool__mutex(config_pool->object_pool),
-                           key_by_url(key, config_pool, path, pool));
-      if (*key)
-        {
-          SVN_ERR(svn_object_pool__lookup((void **)cfg,
-                                          config_pool->object_pool,
-                                          *key, &case_sensitive, pool));
-          if (*cfg)
-            {
-              svn_pool_destroy(scratch_pool);
-              return SVN_NO_ERROR;
-            }
-        }
-
       /* Read and cache the configuration.  This may fail. */
-      err = find_repos_config(cfg, key, config_pool, path, case_sensitive,
+      err = find_repos_config(cfg, key, config_pool, path,
                               preferred_repos, pool, scratch_pool);
       if (err || !*cfg)
         {
           /* let the standard implementation handle all the difficult cases */
           svn_error_clear(err);
-          err = svn_repos__retrieve_config(cfg, path, must_exist,
-                                           case_sensitive, pool,
-                                           scratch_pool);
+          err = svn_repos__retrieve_config(cfg, path, must_exist, FALSE,
+                                           pool, scratch_pool);
         }
     }
   else
@@ -513,18 +249,21 @@ svn_repos__config_pool_get(svn_config_t
         {
           /* let the standard implementation handle all the difficult cases */
           svn_error_clear(err);
-          err = svn_config_read3(cfg, path, must_exist, case_sensitive,
-                                 case_sensitive, pool);
+          err = svn_config_read3(cfg, path, must_exist, FALSE, FALSE, pool);
         }
       else
         {
           /* parsing and caching will always succeed */
-          err = auto_parse(cfg, key, config_pool, contents, case_sensitive,
+          err = auto_parse(cfg, key, config_pool, contents,
                            pool, scratch_pool);
         }
     }
 
   svn_pool_destroy(scratch_pool);
 
-  return err;
+  /* we need to duplicate the root structure as it contains temp. buffers */
+  if (*cfg)
+    *cfg = svn_config__shallow_copy(*cfg, pool);
+
+  return svn_error_trace(err);
 }

Modified: subversion/branches/authzperf/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svnserve/serve.c?rev=1770035&r1=1770034&r2=1770035&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svnserve/serve.c (original)
+++ subversion/branches/authzperf/subversion/svnserve/serve.c Wed Nov 16 18:51:16 2016
@@ -227,7 +227,7 @@ load_pwdb_config(repository_t *repositor
       pwdb_path = svn_dirent_join(repository->base, pwdb_path, pool);
 
       err = svn_repos__config_pool_get(&repository->pwdb, NULL, config_pool,
-                                       pwdb_path, TRUE, FALSE,
+                                       pwdb_path, TRUE,
                                        repository->repos, pool);
       if (err)
         {
@@ -3702,7 +3702,7 @@ find_repos(const char *url,
       SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
                                          svn_repos_svnserve_conf
                                             (repository->repos, result_pool),
-                                         FALSE, FALSE, repository->repos,
+                                         FALSE, repository->repos,
                                          result_pool));
     }
 

Modified: subversion/branches/authzperf/subversion/svnserve/svnserve.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/svnserve/svnserve.c?rev=1770035&r1=1770034&r2=1770035&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/svnserve/svnserve.c (original)
+++ subversion/branches/authzperf/subversion/svnserve/svnserve.c Wed Nov 16 18:51:16 2016
@@ -1061,7 +1061,6 @@ sub_main(int *exit_code, int argc, const
                                          params.config_pool,
                                          config_filename,
                                          TRUE, /* must_exist */
-                                         FALSE, /* names_case_sensitive */
                                          NULL,
                                          pool));
     }

Modified: subversion/branches/authzperf/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/authzperf/subversion/tests/libsvn_repos/repos-test.c?rev=1770035&r1=1770034&r2=1770035&view=diff
==============================================================================
--- subversion/branches/authzperf/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/authzperf/subversion/tests/libsvn_repos/repos-test.c Wed Nov 16 18:51:16 2016
@@ -3932,7 +3932,7 @@ test_config_pool(const svn_test_opts_t *
                                     svn_dirent_join(wrk_dir,
                                                     "config-pool-test1.cfg",
                                                     pool),
-                                    TRUE, TRUE, NULL, subpool));
+                                    TRUE, NULL, subpool));
 
       if (sections1 == NULL)
         sections1 = cfg->sections;
@@ -3951,7 +3951,7 @@ test_config_pool(const svn_test_opts_t *
                                     svn_dirent_join(wrk_dir,
                                                     "config-pool-test2.cfg",
                                                     pool),
-                                    TRUE, TRUE, NULL, subpool));
+                                    TRUE, NULL, subpool));
 
       SVN_TEST_ASSERT(cfg->sections == sections1);
 
@@ -3967,7 +3967,7 @@ test_config_pool(const svn_test_opts_t *
                                     svn_dirent_join(wrk_dir,
                                                     "config-pool-test3.cfg",
                                                     pool),
-                                    TRUE, TRUE, NULL, subpool));
+                                    TRUE, NULL, subpool));
 
       if (sections2 == NULL)
         sections2 = cfg->sections;
@@ -3997,7 +3997,7 @@ test_config_pool(const svn_test_opts_t *
                                      svn_path_url_add_component2(
                                                     repo_root_url,
                                                     "dir/config", pool),
-                                     TRUE, TRUE, NULL, subpool));
+                                     TRUE, NULL, subpool));
   SVN_TEST_ASSERT(cfg->sections == sections1);
   svn_pool_clear(subpool);
 
@@ -4015,7 +4015,7 @@ test_config_pool(const svn_test_opts_t *
                                      svn_path_url_add_component2(
                                                     repo_root_url,
                                                     "dir/config", pool),
-                                     TRUE, TRUE, NULL, subpool));
+                                     TRUE, NULL, subpool));
   SVN_TEST_ASSERT(cfg->sections == sections2);
   svn_pool_clear(subpool);
 
@@ -4025,7 +4025,7 @@ test_config_pool(const svn_test_opts_t *
                                                     repo_root_url,
                                                     "another-dir/config",
                                                     pool),
-                                     TRUE, TRUE, NULL, subpool));
+                                     TRUE, NULL, subpool));
   SVN_TEST_ASSERT(cfg->sections == sections1);
   svn_pool_clear(subpool);
 
@@ -4034,14 +4034,14 @@ test_config_pool(const svn_test_opts_t *
                                      svn_path_url_add_component2(
                                                     repo_root_url,
                                                     "dir/config", pool),
-                                     TRUE, TRUE, NULL, subpool));
+                                     TRUE, NULL, subpool));
   SVN_TEST_ASSERT(cfg->sections == sections2);
   SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
                                      svn_path_url_add_component2(
                                                     repo_root_url,
                                                     "another-dir/config",
                                                     pool),
-                                     TRUE, TRUE, NULL, subpool));
+                                     TRUE, NULL, subpool));
   SVN_TEST_ASSERT(cfg->sections == sections1);
   svn_pool_clear(subpool);
 
@@ -4049,10 +4049,10 @@ test_config_pool(const svn_test_opts_t *
   SVN_TEST_ASSERT_ERROR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
                           svn_path_url_add_component2(repo_root_url, "X",
                                                       pool),
-                          TRUE, TRUE, NULL, subpool),
+                          TRUE, NULL, subpool),
                         SVN_ERR_ILLEGAL_TARGET);
   err = svn_repos__config_pool_get(&cfg, NULL, config_pool, "X.cfg",
-                                   TRUE, TRUE, NULL, subpool);
+                                   TRUE, NULL, subpool);
   SVN_TEST_ASSERT(err && APR_STATUS_IS_ENOENT(err->apr_err));
   svn_error_clear(err);
   svn_pool_clear(subpool);