Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id E5784431FDA for ; Thu, 31 Jul 2014 19:10:24 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: -2.3 X-Spam-Level: X-Spam-Status: No, score=-2.3 tagged_above=-999 required=5 tests=[RCVD_IN_DNSWL_MED=-2.3] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vomXrPoGecHu for ; Thu, 31 Jul 2014 19:10:19 -0700 (PDT) Received: from dmz-mailsec-scanner-8.mit.edu (dmz-mailsec-scanner-8.mit.edu [18.7.68.37]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id E6E5A431FBF for ; Thu, 31 Jul 2014 19:10:11 -0700 (PDT) X-AuditID: 12074425-f79766d000006da8-5f-53daf7020207 Received: from mailhub-auth-1.mit.edu ( [18.9.21.35]) (using TLS with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by dmz-mailsec-scanner-8.mit.edu (Symantec Messaging Gateway) with SMTP id BA.2B.28072.207FAD35; Thu, 31 Jul 2014 22:10:11 -0400 (EDT) Received: from outgoing.mit.edu (outgoing-auth-1.mit.edu [18.9.28.11]) by mailhub-auth-1.mit.edu (8.13.8/8.9.2) with ESMTP id s712A8ll014705; Thu, 31 Jul 2014 22:10:09 -0400 Received: from drake.dyndns.org (216-15-114-40.c3-0.arl-ubr1.sbo-arl.ma.cable.rcn.com [216.15.114.40]) (authenticated bits=0) (User authenticated as amdragon@ATHENA.MIT.EDU) by outgoing.mit.edu (8.13.8/8.12.4) with ESMTP id s712A6qU029989 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT); Thu, 31 Jul 2014 22:10:08 -0400 Received: from amthrax by drake.dyndns.org with local (Exim 4.77) (envelope-from ) id 1XD2II-00033q-43; Thu, 31 Jul 2014 22:10:06 -0400 From: Austin Clements To: notmuch@notmuchmail.org Subject: [PATCH v3 09/13] lib: Reorganize upgrade around document types Date: Thu, 31 Jul 2014 22:09:59 -0400 Message-Id: <1406859003-11561-10-git-send-email-amdragon@mit.edu> X-Mailer: git-send-email 2.0.0 In-Reply-To: <1406859003-11561-1-git-send-email-amdragon@mit.edu> References: <1406859003-11561-1-git-send-email-amdragon@mit.edu> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrDIsWRmVeSWpSXmKPExsUixCmqrMv8/VawwZcuJovVc3ksrt+cyezA 5LFz1l12j2erbjEHMEVx2aSk5mSWpRbp2yVwZczYMJG14KlCxc0jU5kbGL9KdjFyckgImEjM 3LOYBcIWk7hwbz1bFyMXh5DAbCaJUxsvskM4Gxkl3nXNYgOpEhK4wyTxdhNUYi6jxIt/zUwg CTYBDYlt+5czgtgiAtISO+/OZgWxmQUcJT7vXwTWLCzgLjFxbzuYzSKgKjH17nuwGl6gmiWv rkGdISfRcOMTWA0nUPz/vwWsEIsdJFpPb2WewMi/gJFhFaNsSm6Vbm5iZk5xarJucXJiXl5q ka6FXm5miV5qSukmRlAgsbuo7mCccEjpEKMAB6MSD69D6K1gIdbEsuLK3EOMkhxMSqK8Nh+B QnxJ+SmVGYnFGfFFpTmpxYcYJTiYlUR4X34AyvGmJFZWpRblw6SkOViUxHnfWlsFCwmkJ5ak ZqemFqQWwWRlODiUJHjPfAVqFCxKTU+tSMvMKUFIM3FwggznARou9A1keHFBYm5xZjpE/hSj opQ47x6QZgGQREZpHlwvLNJfMYoDvSLM+xCkigeYJOC6XwENZgIa/PzWdZDBJYkIKakGxkmL +A+Z79T0ZU/lm29eKB3zlm8PyxwDxb3OKrbrM7Y+XXlK6s6b0sWeRcKTDO8lbP7/i+GpyvH5 kpdrnrJ+s1bQyQiZZTDz8IU66zcpssUfa2oO9R6V3/mbJfaXwGOnCRnh7jmxuybsFIkUyauX bL+od+N/erjv+iv8InO7ltW66cxR6+9UV2Ipzkg01GIuKk4EAGhvjO3PAgAA X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Aug 2014 02:10:25 -0000 Rather than potentially making multiple passes over the same type of data in the database, reorganize upgrade around each type of data that may be upgraded. This eliminates code duplication, will make multi-version upgrades faster, and will let us improve progress reporting. --- lib/database.cc | 72 +++++++++++++++++++++------------------------------------ 1 file changed, 26 insertions(+), 46 deletions(-) diff --git a/lib/database.cc b/lib/database.cc index 69d775f..31e6a93 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -1241,11 +1241,9 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, * format. */ notmuch->features = target_features; - /* Before version 1, each message document had its filename in the - * data field. Copy that into the new format by calling - * notmuch_message_add_filename. - */ - if (new_features & NOTMUCH_FEATURE_FILE_TERMS) { + /* Perform per-message upgrades. */ + if (new_features & + (NOTMUCH_FEATURE_FILE_TERMS | NOTMUCH_FEATURE_BOOL_FOLDER)) { notmuch_query_t *query = notmuch_query_create (notmuch, ""); notmuch_messages_t *messages; notmuch_message_t *message; @@ -1264,13 +1262,27 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, message = notmuch_messages_get (messages); - filename = _notmuch_message_talloc_copy_data (message); - if (filename && *filename != '\0') { - _notmuch_message_add_filename (message, filename); - _notmuch_message_clear_data (message); - _notmuch_message_sync (message); + /* Before version 1, each message document had its + * filename in the data field. Copy that into the new + * format by calling notmuch_message_add_filename. + */ + if (new_features & NOTMUCH_FEATURE_FILE_TERMS) { + filename = _notmuch_message_talloc_copy_data (message); + if (filename && *filename != '\0') { + _notmuch_message_add_filename (message, filename); + _notmuch_message_clear_data (message); + } + talloc_free (filename); } - talloc_free (filename); + + /* Prior to version 2, the "folder:" prefix was + * probabilistic and stemmed. Change it to the current + * boolean prefix. Add "path:" prefixes while at it. + */ + if (new_features & NOTMUCH_FEATURE_BOOL_FOLDER) + _notmuch_message_upgrade_folder (message); + + _notmuch_message_sync (message); notmuch_message_destroy (message); @@ -1280,7 +1292,9 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, notmuch_query_destroy (query); } - /* Also, before version 1 we stored directory timestamps in + /* Perform per-directory upgrades. */ + + /* Before version 1 we stored directory timestamps in * XTIMESTAMP documents instead of the current XDIRECTORY * documents. So copy those as well. */ if (new_features & NOTMUCH_FEATURE_DIRECTORY_DOCS) { @@ -1322,40 +1336,6 @@ notmuch_database_upgrade (notmuch_database_t *notmuch, } } - /* - * Prior to version 2, the "folder:" prefix was probabilistic and - * stemmed. Change it to the current boolean prefix. Add "path:" - * prefixes while at it. - */ - if (new_features & NOTMUCH_FEATURE_BOOL_FOLDER) { - notmuch_query_t *query = notmuch_query_create (notmuch, ""); - notmuch_messages_t *messages; - notmuch_message_t *message; - - count = 0; - total = notmuch_query_count_messages (query); - - for (messages = notmuch_query_search_messages (query); - notmuch_messages_valid (messages); - notmuch_messages_move_to_next (messages)) { - if (do_progress_notify) { - progress_notify (closure, (double) count / total); - do_progress_notify = 0; - } - - message = notmuch_messages_get (messages); - - _notmuch_message_upgrade_folder (message); - _notmuch_message_sync (message); - - notmuch_message_destroy (message); - - count++; - } - - notmuch_query_destroy (query); - } - db->set_metadata ("features", _print_features (local, notmuch->features)); db->set_metadata ("version", STRINGIFY (NOTMUCH_DATABASE_VERSION)); -- 2.0.0