NULL, /* Volume dirpath */
1, /* bdb logfile autoremove */
64 * 1024, /* bdb cachesize (64 MB) */
- 5000, /* maxlocks */
- 5000, /* maxlockobjs */
- -1, /* not used ... */
- -1,
- "",
- -1,
- -1,
- -1
+ DEFAULT_MAXLOCKS, /* maxlocks */
+ DEFAULT_MAXLOCKOBJS, /* maxlockobjs */
+ 0, /* flush_interval */
+ 0, /* flush_frequency */
+ 0, /* usock_file */
+ -1, /* fd_table_size */
+ -1, /* idle_timeout */
+ -1 /* max_vols */
};
static char dbpath[MAXPATHLEN+1]; /* Path to the dbd database */
static void usage (void)
{
- printf("Usage: dbd [-e|-v|-x] -d [-i] | -s [-c|-n]| -r [-c|-f] | -u <path to netatalk volume>\n"
+ printf("Usage: dbd [-e|-t|-v|-x] -d [-i] | -s [-c|-n]| -r [-c|-f] | -u <path to netatalk volume>\n"
"dbd can dump, scan, reindex and rebuild Netatalk dbd CNID databases.\n"
"dbd must be run with appropiate permissions i.e. as root.\n\n"
"Main commands are:\n"
"General options:\n"
" -e only work on inactive volumes and lock them (exclusive)\n"
" -x rebuild indexes (just for completeness, mostly useless!)\n"
+ " -t show statistics while running\n"
" -v verbose\n\n"
"WARNING:\n"
"For -r -f restore of the CNID database from the adouble files, the CNID must of course\n"
/* Inhereting perms in ad_mkdir etc requires this */
ad_setfuid(0);
- while ((c = getopt(argc, argv, ":cdefinrsuvx")) != -1) {
+ while ((c = getopt(argc, argv, ":cdefinrstuvx")) != -1) {
switch(c) {
case 'c':
flags |= DBD_FLAGS_CLEANUP;
case 'r':
rebuild = 1;
break;
+ case 't':
+ flags |= DBD_FLAGS_STATS;
+ break;
case 'u':
prep_upgrade = 1;
break;
/* Check if -f is requested and wipe db if yes */
if ((flags & DBD_FLAGS_FORCE) && rebuild && (volinfo.v_flags & AFPVOL_CACHE)) {
char cmd[8 + MAXPATHLEN];
+ close(lockfd);
snprintf(cmd, 8 + MAXPATHLEN, "rm -rf \"%s\"", dbpath);
dbd_log( LOGDEBUG, "Removing old database of volume: '%s'", volpath);
system(cmd);
exit(EXIT_FAILURE);
}
dbd_log( LOGDEBUG, "Removed old database.");
+ lockfd = get_lock(dbpath);
}
/*
}
/* Cleanup */
- if (! nocniddb && dbif_close(dbd) < 0) {
- dbd_log( LOGSTD, "Error closing database");
- goto exit_failure;
+ dbd_log(LOGDEBUG, "Closing db");
+ if (! nocniddb) {
+ if (dbif_close(dbd) < 0) {
+ dbd_log( LOGSTD, "Error closing database");
+ goto exit_failure;
+ }
}
exit_success: