From: Frank Lahm Date: Wed, 24 Nov 2010 08:52:10 +0000 (+0100) Subject: Increase maxlocks and maxlockobjs and make them configurable X-Git-Url: https://arthur.barton.de/gitweb/?p=netatalk.git;a=commitdiff_plain;h=751255d7dfc36038bd302d7335ea5d0228b4fe0c Increase maxlocks and maxlockobjs and make them configurable --- diff --git a/etc/cnid_dbd/cmd_dbd.c b/etc/cnid_dbd/cmd_dbd.c index a08b92c0..6d847a78 100644 --- a/etc/cnid_dbd/cmd_dbd.c +++ b/etc/cnid_dbd/cmd_dbd.c @@ -92,6 +92,8 @@ static struct db_param db_param = { NULL, /* Volume dirpath */ 1, /* bdb logfile autoremove */ 64 * 1024, /* bdb cachesize (64 MB) */ + 5000, /* maxlocks */ + 5000, /* maxlockobjs */ -1, /* not used ... */ -1, "", diff --git a/etc/cnid_dbd/db_param.c b/etc/cnid_dbd/db_param.c index 029c21b0..eda624ae 100644 --- a/etc/cnid_dbd/db_param.c +++ b/etc/cnid_dbd/db_param.c @@ -26,7 +26,9 @@ #define MAXKEYLEN 64 #define DEFAULT_LOGFILE_AUTOREMOVE 1 -#define DEFAULT_CACHESIZE (8 * 1024) +#define DEFAULT_CACHESIZE (8 * 1024) /* KB, so 8 MB */ +#define DEFAULT_MAXLOCKS 5000 +#define DEFAULT_MAXLOCKOBJS 5000 #define DEFAULT_FLUSH_FREQUENCY 1000 #define DEFAULT_FLUSH_INTERVAL 1800 #define DEFAULT_USOCK_FILE "usock" @@ -66,6 +68,8 @@ static void default_params(struct db_param *dbp, char *dir) { dbp->logfile_autoremove = DEFAULT_LOGFILE_AUTOREMOVE; dbp->cachesize = DEFAULT_CACHESIZE; + dbp->maxlocks = DEFAULT_MAXLOCKS; + dbp->maxlockobjs = DEFAULT_MAXLOCKOBJS; dbp->flush_frequency = DEFAULT_FLUSH_FREQUENCY; dbp->flush_interval = DEFAULT_FLUSH_INTERVAL; if (make_pathname(dbp->usock_file, dir, DEFAULT_USOCK_FILE, usock_maxlen()) < 0) { @@ -161,6 +165,12 @@ struct db_param *db_param_read(char *dir, enum identity id) } else if (! strcmp(key, "cachesize")) { params.cachesize = parse_int(val); LOG(log_info, logtype_cnid, "db_param: setting cachesize to %d", params.cachesize); + } else if (! strcmp(key, "maxlocks")) { + params.maxlocks = parse_int(val); + LOG(log_info, logtype_cnid, "db_param: setting maxlocks to %d", params.maxlocks); + } else if (! strcmp(key, "maxlockobjs")) { + params.maxlockobjs = parse_int(val); + LOG(log_info, logtype_cnid, "db_param: setting maxlockobjs to %d", params.maxlockobjs); } else if (! strcmp(key, "flush_frequency")) { params.flush_frequency = parse_int(val); LOG(log_info, logtype_cnid, "db_param: setting flush_frequency to %d", params.flush_frequency); diff --git a/etc/cnid_dbd/db_param.h b/etc/cnid_dbd/db_param.h index ebcea6b8..57ade7c5 100644 --- a/etc/cnid_dbd/db_param.h +++ b/etc/cnid_dbd/db_param.h @@ -1,7 +1,6 @@ /* - * $Id: db_param.h,v 1.6 2009-12-21 07:32:01 franklahm Exp $ - * * Copyright (C) Joerg Lenneis 2003 + * Copyright (C) Frank Lahm 2010 * All Rights Reserved. See COPYING. */ @@ -20,6 +19,8 @@ struct db_param { char *dir; int logfile_autoremove; int cachesize; /* in KB */ + int maxlocks; + int maxlockobjs; int flush_interval; int flush_frequency; char usock_file[MAXPATHLEN + 1]; diff --git a/etc/cnid_dbd/dbif.c b/etc/cnid_dbd/dbif.c index 22d9a2cf..cc1a2b55 100644 --- a/etc/cnid_dbd/dbif.c +++ b/etc/cnid_dbd/dbif.c @@ -356,6 +356,22 @@ int dbif_env_open(DBD *dbd, struct db_param *dbp, uint32_t dbenv_oflags) return -1; } + if ((ret = dbd->db_env->set_lk_max_locks(dbd->db_env, dbp->maxlocks))) { + LOG(log_error, logtype_cnid, "error setting DB environment maxlocks to %i: %s", + 10000, db_strerror(ret)); + dbd->db_env->close(dbd->db_env, 0); + dbd->db_env = NULL; + return -1; + } + + if ((ret = dbd->db_env->set_lk_max_objects(dbd->db_env, dbp->maxlockobjs))) { + LOG(log_error, logtype_cnid, "error setting DB environment max lockobjects to %i: %s", + 10000, db_strerror(ret)); + dbd->db_env->close(dbd->db_env, 0); + dbd->db_env = NULL; + return -1; + } + if ((ret = dbd->db_env->open(dbd->db_env, dbd->db_envhome, dbenv_oflags, 0))) { LOG(log_error, logtype_cnid, "error opening DB environment after recovery: %s", db_strerror(ret));