summaryrefslogtreecommitdiff
path: root/source3/tdb/common/tdbback.c
diff options
context:
space:
mode:
authorVolker Lendecke <vlendec@samba.org>2006-11-13 09:34:55 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:15:46 -0500
commit3a1ada7635a6b585747afc3885302a3557cf5fb8 (patch)
treebd8352589267a73a9bd5d03f7f62262eaa6b3958 /source3/tdb/common/tdbback.c
parentbef92ebb257adda6634c559e0240ad4991840212 (diff)
downloadsamba-3a1ada7635a6b585747afc3885302a3557cf5fb8.tar.gz
samba-3a1ada7635a6b585747afc3885302a3557cf5fb8.tar.bz2
samba-3a1ada7635a6b585747afc3885302a3557cf5fb8.zip
r19685: Two changes inspired by problems with huge tdbs. tdbtool's list command now
prints the hash on every record for easier awk'ing, and tdbbackup allows a different hash chain length on the backed up tdb. Jeremy, Günther, this might be interesting for you huge domains. Not only locking.tdb, also the winbind ones might grow huge. In the installation I fixed with this winbind spent a huge amount of CPU spinning through a degenerated winbindd_idmap.tdb with entries for more than 15.000 users. With a default number of hash chains of 131 on that tdb you can imagine that the lists get large. Not merging to 4, I don't get tdbbackup to compile there right now. What about changing the global default hash chain number to be dramatically larger? Disk is cheap these days. Volker (This used to be commit 577d0ff658596f8246f120e0342cc5c9e4077ece)
Diffstat (limited to 'source3/tdb/common/tdbback.c')
-rw-r--r--source3/tdb/common/tdbback.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/source3/tdb/common/tdbback.c b/source3/tdb/common/tdbback.c
index 4698e6016b..28de85c29f 100644
--- a/source3/tdb/common/tdbback.c
+++ b/source3/tdb/common/tdbback.c
@@ -95,7 +95,7 @@ static int test_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
only doing the backup if its OK
this function is also used for restore
*/
-int backup_tdb(const char *old_name, const char *new_name)
+int backup_tdb(const char *old_name, const char *new_name, int hash_size)
{
TDB_CONTEXT *tdb;
TDB_CONTEXT *tdb_new;
@@ -122,7 +122,8 @@ int backup_tdb(const char *old_name, const char *new_name)
/* create the new tdb */
unlink(tmp_name);
- tdb_new = tdb_open(tmp_name, tdb_hash_size(tdb),
+ tdb_new = tdb_open(tmp_name,
+ hash_size ? hash_size : tdb_hash_size(tdb),
TDB_DEFAULT, O_RDWR|O_CREAT|O_EXCL,
st.st_mode & 0777);
if (!tdb_new) {
@@ -217,7 +218,7 @@ int verify_tdb(const char *fname, const char *bak_name)
/* count is < 0 means an error */
if (count < 0) {
printf("restoring %s\n", fname);
- return backup_tdb(bak_name, fname);
+ return backup_tdb(bak_name, fname, 0);
}
printf("%s : %d records\n", fname, count);