summaryrefslogtreecommitdiff
path: root/source4/lib/tdb/tools
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2007-11-07 06:59:02 +0100
committerStefan Metzmacher <metze@samba.org>2007-12-21 05:44:42 +0100
commit2cb22d93ae0eef86a4bcf0fe5f7fb138e43db880 (patch)
tree3e49b118d890235da51b85a9b2175a13fa5be936 /source4/lib/tdb/tools
parent27c9f6c235c3c625f4c4e60a73d8f2e86bd4a186 (diff)
downloadsamba-2cb22d93ae0eef86a4bcf0fe5f7fb138e43db880.tar.gz
samba-2cb22d93ae0eef86a4bcf0fe5f7fb138e43db880.tar.bz2
samba-2cb22d93ae0eef86a4bcf0fe5f7fb138e43db880.zip
r25892: Keep the tdb code in sync between 3.2.x and 4.0.
Add in the alarm fix to allow locks to exit on alarm signal. Sync up the changes in tools. Jeremy. (This used to be commit cb6c663fa8818f49cc36f196bb5f4dea47edd69e)
Diffstat (limited to 'source4/lib/tdb/tools')
-rw-r--r--source4/lib/tdb/tools/tdbbackup.c1
-rw-r--r--source4/lib/tdb/tools/tdbdump.c1
-rw-r--r--source4/lib/tdb/tools/tdbtool.c55
3 files changed, 55 insertions, 2 deletions
diff --git a/source4/lib/tdb/tools/tdbbackup.c b/source4/lib/tdb/tools/tdbbackup.c
index dedfb9e665..6f3ca48314 100644
--- a/source4/lib/tdb/tools/tdbbackup.c
+++ b/source4/lib/tdb/tools/tdbbackup.c
@@ -44,6 +44,7 @@
#include "system/locale.h"
#include "system/time.h"
#include "system/filesys.h"
+#include "system/wait.h"
#include "tdb.h"
#ifdef HAVE_GETOPT_H
diff --git a/source4/lib/tdb/tools/tdbdump.c b/source4/lib/tdb/tools/tdbdump.c
index a654c0fb31..8d930383b0 100644
--- a/source4/lib/tdb/tools/tdbdump.c
+++ b/source4/lib/tdb/tools/tdbdump.c
@@ -21,6 +21,7 @@
#include "system/locale.h"
#include "system/time.h"
#include "system/filesys.h"
+#include "system/wait.h"
#include "tdb.h"
static void print_data(TDB_DATA d)
diff --git a/source4/lib/tdb/tools/tdbtool.c b/source4/lib/tdb/tools/tdbtool.c
index 580dd9d02a..79435a3571 100644
--- a/source4/lib/tdb/tools/tdbtool.c
+++ b/source4/lib/tdb/tools/tdbtool.c
@@ -24,6 +24,7 @@
#include "system/locale.h"
#include "system/time.h"
#include "system/filesys.h"
+#include "system/wait.h"
#include "tdb.h"
static int do_command(void);
@@ -34,6 +35,7 @@ int bIterate = 0;
char *line;
TDB_DATA iterate_kbuf;
char cmdline[1024];
+static int disable_mmap;
enum commands {
CMD_CREATE_TDB,
@@ -50,6 +52,8 @@ enum commands {
CMD_LIST_HASH_FREE,
CMD_LIST_FREE,
CMD_INFO,
+ CMD_MMAP,
+ CMD_SPEED,
CMD_FIRST,
CMD_NEXT,
CMD_SYSTEM,
@@ -77,6 +81,8 @@ COMMAND_TABLE cmd_table[] = {
{"list", CMD_LIST_HASH_FREE},
{"free", CMD_LIST_FREE},
{"info", CMD_INFO},
+ {"speed", CMD_SPEED},
+ {"mmap", CMD_MMAP},
{"first", CMD_FIRST},
{"1", CMD_FIRST},
{"next", CMD_NEXT},
@@ -87,6 +93,20 @@ COMMAND_TABLE cmd_table[] = {
{NULL, CMD_HELP}
};
+struct timeval tp1,tp2;
+
+static void _start_timer(void)
+{
+ gettimeofday(&tp1,NULL);
+}
+
+static double _end_timer(void)
+{
+ gettimeofday(&tp2,NULL);
+ return((tp2.tv_sec - tp1.tv_sec) +
+ (tp2.tv_usec - tp1.tv_usec)*1.0e-6);
+}
+
/* a tdb tool for manipulating a tdb database */
static TDB_CONTEXT *tdb;
@@ -175,7 +195,7 @@ static void terror(const char *why)
static void create_tdb(const char *tdbname)
{
if (tdb) tdb_close(tdb);
- tdb = tdb_open(tdbname, 0, TDB_CLEAR_IF_FIRST,
+ tdb = tdb_open(tdbname, 0, TDB_CLEAR_IF_FIRST | (disable_mmap?TDB_NOMMAP:0),
O_RDWR | O_CREAT | O_TRUNC, 0600);
if (!tdb) {
printf("Could not create %s: %s\n", tdbname, strerror(errno));
@@ -185,7 +205,7 @@ static void create_tdb(const char *tdbname)
static void open_tdb(const char *tdbname)
{
if (tdb) tdb_close(tdb);
- tdb = tdb_open(tdbname, 0, 0, O_RDWR, 0600);
+ tdb = tdb_open(tdbname, 0, disable_mmap?TDB_NOMMAP:0, O_RDWR, 0600);
if (!tdb) {
printf("Could not open %s: %s\n", tdbname, strerror(errno));
}
@@ -365,6 +385,31 @@ static void info_tdb(void)
printf("%d records totalling %d bytes\n", count, total_bytes);
}
+static void speed_tdb(const char *tlimit)
+{
+ unsigned timelimit = tlimit?atoi(tlimit):0;
+ double t;
+ int ops=0;
+ if (timelimit == 0) timelimit = 10;
+ printf("Testing traverse speed for %u seconds\n", timelimit);
+ _start_timer();
+ while ((t=_end_timer()) < timelimit) {
+ tdb_traverse(tdb, traverse_fn, NULL);
+ printf("%10.3f ops/sec\r", (++ops)/t);
+ }
+ printf("\n");
+}
+
+static void toggle_mmap(void)
+{
+ disable_mmap = !disable_mmap;
+ if (disable_mmap) {
+ printf("mmap is disabled\n");
+ } else {
+ printf("mmap is enabled\n");
+ }
+}
+
static char *tdb_getline(const char *prompt)
{
static char thisline[1024];
@@ -493,6 +538,12 @@ static int do_command(void)
case CMD_INFO:
info_tdb();
return 0;
+ case CMD_SPEED:
+ speed_tdb(arg1);
+ return 0;
+ case CMD_MMAP:
+ toggle_mmap();
+ return 0;
case CMD_FIRST:
bIterate = 1;
first_record(tdb, &iterate_kbuf);