[dovecot-cvs] dovecot/src/lib-storage/index/dbox dbox-storage.c, 1.2, 1.3 dbox-storage.h, 1.3, 1.4 dbox-uidlist.c, 1.7, 1.8

cras at dovecot.org cras at dovecot.org
Wed Jan 11 21:26:07 EET 2006


Update of /var/lib/cvs/dovecot/src/lib-storage/index/dbox
In directory talvi:/tmp/cvs-serv10107/src/lib-storage/index/dbox

Modified Files:
	dbox-storage.c dbox-storage.h dbox-uidlist.c 
Log Message:
Added dbox_rotate_min_size and fixed rotation checks.



Index: dbox-storage.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/dbox/dbox-storage.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- dbox-storage.c	5 Jan 2006 01:19:43 -0000	1.2
+++ dbox-storage.c	11 Jan 2006 19:26:05 -0000	1.3
@@ -306,6 +306,11 @@
 		mbox->rotate_size = (uoff_t)strtoul(value, NULL, 10) * 1024;
 	else
 		mbox->rotate_size = DBOX_DEFAULT_ROTATE_SIZE;
+	value = getenv("DBOX_ROTATE_MIN_SIZE");
+	if (value != NULL)
+		mbox->rotate_min_size = (uoff_t)strtoul(value, NULL, 10) * 1024;
+	else
+		mbox->rotate_min_size = DBOX_DEFAULT_ROTATE_MIN_SIZE;
 	value = getenv("DBOX_ROTATE_DAYS");
 	if (value != NULL)
 		mbox->rotate_days = (unsigned int)strtoul(value, NULL, 10);

Index: dbox-storage.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/dbox/dbox-storage.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- dbox-storage.h	5 Jan 2006 01:19:43 -0000	1.3
+++ dbox-storage.h	11 Jan 2006 19:26:05 -0000	1.4
@@ -15,6 +15,7 @@
 
 /* Default rotation settings */
 #define DBOX_DEFAULT_ROTATE_SIZE (2*1024*1024)
+#define DBOX_DEFAULT_ROTATE_MIN_SIZE (1024*16)
 #define DBOX_DEFAULT_ROTATE_DAYS 0
 
 struct dbox_uidlist;
@@ -80,7 +81,7 @@
 	uint32_t dbox_file_ext_idx;
 	uint32_t dbox_offset_ext_idx;
 
-	uoff_t rotate_size;
+	uoff_t rotate_size, rotate_min_size;
 	unsigned int rotate_days;
 };
 

Index: dbox-uidlist.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/dbox/dbox-uidlist.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- dbox-uidlist.c	5 Jan 2006 01:19:43 -0000	1.7
+++ dbox-uidlist.c	11 Jan 2006 19:26:05 -0000	1.8
@@ -847,6 +847,11 @@
 	return stamp - (3600*24 * (days-1));
 }
 
+#define DBOX_CAN_APPEND(mbox, create_time, file_size, min_usable_timestamp) \
+	(((create_time) >= (min_usable_timestamp) && \
+	  (file_size) < (mbox)->rotate_size) || \
+	 (file_size) < (mbox)->rotate_min_size)
+
 int dbox_uidlist_append_locked(struct dbox_uidlist_append_ctx *ctx,
 			       struct dbox_file **file_r)
 {
@@ -867,8 +872,9 @@
 	/* check first from already opened files */
 	files = array_get(&ctx->files, &count);
 	for (i = 0; i < count; i++) {
-		if (files[i]->file->create_time >= min_usable_timestamp ||
-		    files[i]->append_offset < mbox->rotate_size) {
+		if (DBOX_CAN_APPEND(mbox, files[i]->file->create_time,
+				    files[i]->append_offset,
+				    min_usable_timestamp)) {
 			if (dbox_reopen_file(ctx, files[i]) < 0)
 				return -1;
 
@@ -885,8 +891,9 @@
 	for (i = 0;; i++) {
                 file_seq = 0; 
 		for (; i < count; i++) {
-			if ((entries[i]->create_time >= min_usable_timestamp ||
-			     entries[i]->file_size < mbox->rotate_size) &&
+			if (DBOX_CAN_APPEND(mbox, entries[i]->create_time,
+					    entries[i]->file_size,
+					    min_usable_timestamp) &&
 			    !dbox_uidlist_files_lookup(ctx,
 						       entries[i]->file_seq)) {
 				file_seq = entries[i]->file_seq;



More information about the dovecot-cvs mailing list