[PATCH] make gencache hash size configurable

Christof Schmitt cs at samba.org
Fri Mar 3 17:29:04 UTC 2017


On Fri, Mar 03, 2017 at 11:14:34AM +0100, Volker Lendecke wrote:
> Hi!
> 
> Review appreciated!

Reviewed-by: Christof Schmitt <cs at samba.org>

If that is needed for other tdbs as well, it could be moved to tdb_wrap
or dbwrap, but for now having it local for gencache should be
sufficient.

Christof

> 
> Thanks, Volker

> From 627bafeb1e7165fbc51f5d2de3232bb528dbd0a5 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Mon, 6 Feb 2017 17:10:40 +0100
> Subject: [PATCH] lib: Make gencache hash size configurable, default to 10000
> 
> 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 at samba.org>
> ---
>  source3/lib/gencache.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/source3/lib/gencache.c b/source3/lib/gencache.c
> index 2c1704e..1572825 100644
> --- a/source3/lib/gencache.c
> +++ b/source3/lib/gencache.c
> @@ -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|
> -- 
> 2.1.4
> 




More information about the samba-technical mailing list