[PATCH v3 00/13] Implement and use database "features"

Austin Clements amdragon at MIT.EDU
Thu Jul 31 19:09:50 PDT 2014


This is v3 of id:1406652492-27803-1-git-send-email-amdragon at mit.edu.
This fixes one issue and tidies up another thing in
notmuch_database_upgrade I found while working on change tracking
support.  Most of the patches are logically identical to v2, but the
changes ripple through the patch context, so I'm sending a new series.

First, this updates notmuch->features before starting the upgrade,
rather than after, so that functions called by upgrade will use the
new database features instead of the old (this didn't matter in this
series because nothing modified the database differently depending on
features).  Second, this combines multiple _notmuch_message_sync calls
into one, which cleans up the code, should further improve upgrade
performance, and makes way for additional per-message upgrades.

The diff from v2 is below (excluding patch 2, which David pushed).

diff --git a/lib/database.cc b/lib/database.cc
index b323691..d90a924 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -1252,6 +1252,10 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,
     /* Perform the upgrade in a transaction. */
     db->begin_transaction (true);
 
+    /* Set the target features so we write out changes in the desired
+     * format. */
+    notmuch->features = target_features;
+
     /* Perform per-message upgrades. */
     if (new_features &
 	(NOTMUCH_FEATURE_FILE_TERMS | NOTMUCH_FEATURE_BOOL_FOLDER)) {
@@ -1280,7 +1284,6 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,
 		if (filename && *filename != '\0') {
 		    _notmuch_message_add_filename (message, filename);
 		    _notmuch_message_clear_data (message);
-		    _notmuch_message_sync (message);
 		}
 		talloc_free (filename);
 	    }
@@ -1289,10 +1292,10 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,
 	     * probabilistic and stemmed. Change it to the current
 	     * boolean prefix. Add "path:" prefixes while at it.
 	     */
-	    if (new_features & NOTMUCH_FEATURE_BOOL_FOLDER) {
+	    if (new_features & NOTMUCH_FEATURE_BOOL_FOLDER)
 		_notmuch_message_upgrade_folder (message);
-		_notmuch_message_sync (message);
-	    }
+
+	    _notmuch_message_sync (message);
 
 	    notmuch_message_destroy (message);
 
@@ -1348,7 +1351,6 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,
 	}
     }
 
-    notmuch->features = target_features;
     db->set_metadata ("features", _print_features (local, notmuch->features));
     db->set_metadata ("version", STRINGIFY (NOTMUCH_DATABASE_VERSION));



More information about the notmuch mailing list