/*
- * $Id: db_param.c,v 1.7 2009-10-19 05:02:35 didg Exp $
+ * $Id: db_param.c,v 1.9 2009-11-23 19:04:14 franklahm Exp $
*
* Copyright (C) Joerg Lenneis 2003
* Copyright (c) Frank Lahm 2009
#include "config.h"
#endif /* HAVE_CONFIG_H */
-#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
+#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#define DB_PARAM_FN "db_param"
#define MAXKEYLEN 64
-#define DEFAULT_LOGFILE_AUTOREMOVE 1
-#define DEFAULT_CACHESIZE 8 * 1024
-#define DEFAULT_FLUSH_FREQUENCY 100
-#define DEFAULT_FLUSH_INTERVAL 1800
-#define DEFAULT_USOCK_FILE "usock"
-#define DEFAULT_FD_TABLE_SIZE 512
-#define DEFAULT_IDLE_TIMEOUT 10 * 60
-
static struct db_param params;
static int parse_err;
{
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) {
buffer overflow) nor elegant, we need to add support for whitespace in
filenames as well. */
-struct db_param *db_param_read(char *dir, enum identity id)
+struct db_param *db_param_read(char *dir)
{
FILE *fp;
static char key[MAXKEYLEN + 1];
LOG(log_info, logtype_cnid, "db_param: setting UNIX domain socket filename to %s", params.usock_file);
}
- /* Config for cnid_metad only */
- if ( id == METAD ) {
- /* Currently empty */
+ if (! strcmp(key, "fd_table_size")) {
+ params.fd_table_size = parse_int(val);
+ LOG(log_info, logtype_cnid, "db_param: setting max number of concurrent afpd connections per volume (fd_table_size) to %d", params.fd_table_size);
+ } else if (! strcmp(key, "logfile_autoremove")) {
+ params.logfile_autoremove = parse_int(val);
+ LOG(log_info, logtype_cnid, "db_param: setting logfile_autoremove to %d", params.logfile_autoremove);
+ } 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);
+ } else if (! strcmp(key, "flush_interval")) {
+ params.flush_interval = parse_int(val);
+ LOG(log_info, logtype_cnid, "db_param: setting flush_interval to %d", params.flush_interval);
+ } else if (! strcmp(key, "idle_timeout")) {
+ params.idle_timeout = parse_int(val);
+ LOG(log_info, logtype_cnid, "db_param: setting idle timeout to %d", params.idle_timeout);
}
- /* Config for dbd only */
- else if (id == CNID_DBD ) {
- if (! strcmp(key, "fd_table_size")) {
- params.fd_table_size = parse_int(val);
- LOG(log_info, logtype_cnid, "db_param: setting max number of concurrent afpd connections per volume (fd_table_size) to %d", params.fd_table_size);
- } else if (! strcmp(key, "logfile_autoremove")) {
- params.logfile_autoremove = parse_int(val);
- LOG(log_info, logtype_cnid, "db_param: setting logfile_autoremove to %d", params.logfile_autoremove);
- } 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, "flush_frequency")) {
- params.flush_frequency = parse_int(val);
- LOG(log_info, logtype_cnid, "db_param: setting flush_frequency to %d", params.flush_frequency);
- } else if (! strcmp(key, "flush_interval")) {
- params.flush_interval = parse_int(val);
- LOG(log_info, logtype_cnid, "db_param: setting flush_interval to %d", params.flush_interval);
- } else if (! strcmp(key, "idle_timeout")) {
- params.idle_timeout = parse_int(val);
- LOG(log_info, logtype_cnid, "db_param: setting idle timeout to %d", params.idle_timeout);
- }
- }
if (parse_err)
break;
}
}
fclose(fp);
- if (! parse_err)
+ if (! parse_err) {
+ /* sanity checks */
+ if (params.flush_frequency <= 0)
+ params.flush_frequency = 86400;
+
+ if (params.flush_interval <= 0)
+ params.flush_interval = 1000000;
+
+ if (params.fd_table_size <= 2)
+ params.fd_table_size = 32;
+
+ if (params.idle_timeout <= 0)
+ params.idle_timeout = 86400;
+
return ¶ms;
+ }
else
return NULL;
}