Rev 701: expand tdb by minimum of 25% at a time in http://samba.org/~tridge/ctdb

tridge at samba.org tridge at samba.org
Fri Jan 4 22:30:09 GMT 2008


------------------------------------------------------------
revno: 701
revision-id:tridge at samba.org-20080104223009-962no3gs6rpaetre
parent: tridge at samba.org-20080104014229-xqbly5fwyj48da2l
committer: Andrew Tridgell <tridge at samba.org>
branch nick: tridge.kantana
timestamp: Sat 2008-01-05 09:30:09 +1100
message:
  expand tdb by minimum of 25% at a time
modified:
  lib/tdb/common/io.c            io.c-20070220022425-m1wibgjq7n5hahs6-6
=== modified file 'lib/tdb/common/io.c'
--- a/lib/tdb/common/io.c	2008-01-02 01:04:07 +0000
+++ b/lib/tdb/common/io.c	2008-01-04 22:30:09 +0000
@@ -211,7 +211,7 @@
   says to use for mmap expansion */
 static int tdb_expand_file(struct tdb_context *tdb, tdb_off_t size, tdb_off_t addition)
 {
-	char buf[1024];
+	char buf[8192];
 
 	if (tdb->read_only || tdb->traverse_read) {
 		tdb->ecode = TDB_ERR_RDONLY;
@@ -251,7 +251,7 @@
 int tdb_expand(struct tdb_context *tdb, tdb_off_t size)
 {
 	struct list_struct rec;
-	tdb_off_t offset;
+	tdb_off_t offset, new_size;	
 
 	if (tdb_lock(tdb, -1, F_WRLCK) == -1) {
 		TDB_LOG((tdb, TDB_DEBUG_ERROR, "lock failed in tdb_expand\n"));
@@ -261,9 +261,11 @@
 	/* must know about any previous expansions by another process */
 	tdb->methods->tdb_oob(tdb, tdb->map_size + 1, 1);
 
-	/* always make room for at least 100 more records, and round
-           the database up to a multiple of the page size */
-	size = TDB_ALIGN(tdb->map_size + size*100, tdb->page_size) - tdb->map_size;
+	/* always make room for at least 100 more records, and at
+           least 25% more space. Round the database up to a multiple
+           of the page size */
+	new_size = MAX(tdb->map_size + size*100, tdb->map_size * 1.25);
+	size = TDB_ALIGN(new_size, tdb->page_size) - tdb->map_size;
 
 	if (!(tdb->flags & TDB_INTERNAL))
 		tdb_munmap(tdb);



More information about the samba-cvs mailing list