change to db-open flags
[citadel.git] / citadel / database.c
index 870d08bb78545ae8167e500e8d11ce08f80992c5..566a0520dd895a3193c7d9912bb9ad0d675665f8 100644 (file)
@@ -63,7 +63,6 @@ void cdb_abort(void) {
                geteuid(),
                getegid()
        );
-       cit_backtrace();
        exit(CTDLEXIT_DB);
 }
 
@@ -73,7 +72,6 @@ void cdb_verbose_log(const DB_ENV *dbenv, const char *msg)
 {
        if (!IsEmptyStr(msg)) {
                syslog(LOG_DEBUG, "db: %s", msg);
-               cit_backtrace();
        }
 }
 
@@ -83,7 +81,6 @@ void cdb_verbose_err(const DB_ENV *dbenv, const char *errpfx, const char *msg)
 {
        int *FOO = NULL;
        syslog(LOG_ERR, "db: %s", msg);
-       cit_backtrace();
        *FOO = 1;
 }
 
@@ -130,7 +127,6 @@ static void txbegin(DB_TXN ** tid)
 static void dbpanic(DB_ENV * env, int errval)
 {
        syslog(LOG_ERR, "db: PANIC: %s", db_strerror(errval));
-       cit_backtrace();
 }
 
 static void cclose(DBC * cursor)
@@ -263,13 +259,13 @@ void open_databases(void)
         * already there, no problem.
         */
        if ((mkdir(ctdl_data_dir, 0700) != 0) && (errno != EEXIST)){
-               syslog(LOG_ERR, "db: unable to create database directory [%s]: %s", ctdl_data_dir, strerror(errno));
+               syslog(LOG_ERR, "db: unable to create database directory [%s]: %m", ctdl_data_dir);
        }
        if (chmod(ctdl_data_dir, 0700) != 0){
-               syslog(LOG_ERR, "db: unable to set database directory accessrights [%s]: %s", ctdl_data_dir, strerror(errno));
+               syslog(LOG_ERR, "db: unable to set database directory accessrights [%s]: %m", ctdl_data_dir);
        }
        if (chown(ctdl_data_dir, CTDLUID, (-1)) != 0){
-               syslog(LOG_ERR, "db: unable to set the owner for [%s]: %s", ctdl_data_dir, strerror(errno));
+               syslog(LOG_ERR, "db: unable to set the owner for [%s]: %m", ctdl_data_dir);
        }
        syslog(LOG_DEBUG, "db: Setting up DB environment\n");
        /* db_env_set_func_yield((int (*)(u_long,  u_long))sched_yield); */
@@ -306,7 +302,7 @@ void open_databases(void)
                exit(CTDLEXIT_DB);
        }
 
-       flags = DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_INIT_TXN | DB_INIT_LOCK | DB_THREAD | DB_RECOVER;
+       flags = DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_INIT_TXN | DB_INIT_LOCK | DB_THREAD | DB_INIT_LOG;
        syslog(LOG_DEBUG, "db: dbenv->open(dbenv, %s, %d, 0)", ctdl_data_dir, flags);
        ret = dbenv->open(dbenv, ctdl_data_dir, flags, 0);
        if (ret == DB_RUNRECOVERY) {
@@ -861,6 +857,25 @@ void cdb_trunc(int cdb)
 }
 
 
+/*
+ * compact (defragment) the database , possibly returning space back to the underlying filesystem
+ */
+void cdb_compact(void)
+{
+       int ret;
+       int i;
+
+       syslog(LOG_DEBUG, "db: cdb_compact() started");
+       for (i = 0; i < MAXCDB; i++) {
+               syslog(LOG_DEBUG, "db: compacting database %d", i);
+               ret = dbp[i]->compact(dbp[i], NULL, NULL, NULL, NULL, DB_FREE_SPACE, NULL);
+               if (ret) {
+                       syslog(LOG_ERR, "db: compact: %s", db_strerror(ret));
+               }
+       }
+       syslog(LOG_DEBUG, "db: cdb_compact() finished");
+}
+
 
 // Has an item already been seen (is it in the CDB_USETABLE) ?
 // Returns 0 if it hasn't, 1 if it has