]> arthur.barton.de Git - netatalk.git/commitdiff
Increase maxlocks and maxlockobjs and make them configurable
authorFrank Lahm <franklahm@googlemail.com>
Wed, 24 Nov 2010 08:52:10 +0000 (09:52 +0100)
committerFrank Lahm <franklahm@googlemail.com>
Wed, 24 Nov 2010 08:52:10 +0000 (09:52 +0100)
etc/cnid_dbd/cmd_dbd.c
etc/cnid_dbd/db_param.c
etc/cnid_dbd/db_param.h
etc/cnid_dbd/dbif.c

index a08b92c07a6c573dbde6068407b9b80d2d2b4c52..6d847a788d24152c911804b38b8067a6f7eabbae 100644 (file)
@@ -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,
     "",
index 029c21b00124ecafca0615c6cb30f1e1978e2bb7..eda624aec6edc645542704e0856772a579835d60 100644 (file)
@@ -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);
index ebcea6b823185494b937d31a78df6a0974e36a10..57ade7c5e425057f6f26c7e57269ed0010ba7814 100644 (file)
@@ -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];    
index 22d9a2cfde92bcbd2edfe2cec2c8293735da8e35..cc1a2b55dc5d22393765093b26776272f10abf09 100644 (file)
@@ -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));