lib: Make gencache hash size configurable, default to 10000
authorVolker Lendecke <vl@samba.org>
Mon, 6 Feb 2017 16:10:40 +0000 (17:10 +0100)
committerJeremy Allison <jra@samba.org>
Fri, 3 Mar 2017 20:55:26 +0000 (21:55 +0100)
For large deployments with many users, we put a lot of idmapping
entries into gencache. Increase the hash size from our default 131.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Christof Schmitt <cs@samba.org>
source3/lib/gencache.c

index 2c1704e85d75fb31b493694834e70c38d22776ef..1572825f605311ce468c1daff75a8ee3e324b17b 100644 (file)
@@ -55,12 +55,15 @@ static bool gencache_init(void)
 {
        char* cache_fname = NULL;
        int open_flags = O_RDWR|O_CREAT;
+       int hash_size;
 
        /* skip file open if it's already opened */
        if (cache) {
                return true;
        }
 
+       hash_size = lp_parm_int(-1, "gencache", "hash_size", 10000);
+
        cache_fname = cache_path("gencache.tdb");
        if (cache_fname == NULL) {
                return false;
@@ -68,7 +71,7 @@ static bool gencache_init(void)
 
        DEBUG(5, ("Opening cache file at %s\n", cache_fname));
 
-       cache = tdb_wrap_open(NULL, cache_fname, 0,
+       cache = tdb_wrap_open(NULL, cache_fname, hash_size,
                              TDB_DEFAULT|TDB_INCOMPATIBLE_HASH,
                              open_flags, 0644);
        if (cache) {
@@ -87,7 +90,7 @@ static bool gencache_init(void)
                         * CLEAR_IF_FIRST databases, so lets use it here to
                         * clean up a broken database.
                         */
-                       cache = tdb_wrap_open(NULL, cache_fname, 0,
+                       cache = tdb_wrap_open(NULL, cache_fname, hash_size,
                                              TDB_DEFAULT|
                                              TDB_INCOMPATIBLE_HASH|
                                              TDB_CLEAR_IF_FIRST,
@@ -97,7 +100,7 @@ static bool gencache_init(void)
 
        if (!cache && (errno == EACCES)) {
                open_flags = O_RDONLY;
-               cache = tdb_wrap_open(NULL, cache_fname, 0,
+               cache = tdb_wrap_open(NULL, cache_fname, hash_size,
                                      TDB_DEFAULT|TDB_INCOMPATIBLE_HASH,
                                      open_flags, 0644);
                if (cache) {
@@ -119,7 +122,7 @@ static bool gencache_init(void)
 
        DEBUG(5, ("Opening cache file at %s\n", cache_fname));
 
-       cache_notrans = tdb_wrap_open(NULL, cache_fname, 0,
+       cache_notrans = tdb_wrap_open(NULL, cache_fname, hash_size,
                                      TDB_CLEAR_IF_FIRST|
                                      TDB_INCOMPATIBLE_HASH|
                                      TDB_NOSYNC|