[PATCH 3/4] Add logging to low level message handling routines.
david at tethera.net
david at tethera.net
Sun Oct 24 14:01:05 PDT 2010
From: David Bremner <bremner at unb.ca>
This might not be ideal from the point of view of "atomic"
transactions, but it is transparent to the caller of the library.
---
lib/message.cc | 30 ++++++++++++++++++++++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/lib/message.cc b/lib/message.cc
index 71f5619..0385e68 100644
--- a/lib/message.cc
+++ b/lib/message.cc
@@ -600,12 +600,17 @@ void
_notmuch_message_sync (notmuch_message_t *message)
{
Xapian::WritableDatabase *db;
+ notmuch_log_t *log;
if (message->notmuch->mode == NOTMUCH_DATABASE_MODE_READ_ONLY)
return;
db = static_cast <Xapian::WritableDatabase *> (message->notmuch->xapian_db);
db->replace_document (message->doc_id, message->doc);
+
+ log = notmuch_database_get_log(message->notmuch);
+ if (log)
+ notmuch_log_sync (log);
}
/* Ensure that 'message' is not holding any file object open. Future
@@ -635,10 +640,16 @@ _notmuch_message_add_term (notmuch_message_t *message,
{
char *term;
+ notmuch_log_t *log;
if (value == NULL)
return NOTMUCH_PRIVATE_STATUS_NULL_POINTER;
+ log=notmuch_database_get_log(message->notmuch);
+ if (log)
+ notmuch_log_words (log,"+", prefix_name, value,
+ notmuch_message_get_message_id (message), NULL);
+
term = talloc_asprintf (message, "%s%s",
_find_prefix (prefix_name), value);
@@ -691,10 +702,16 @@ _notmuch_message_remove_term (notmuch_message_t *message,
const char *value)
{
char *term;
+ notmuch_log_t *log;
if (value == NULL)
return NOTMUCH_PRIVATE_STATUS_NULL_POINTER;
+ log=notmuch_database_get_log(message->notmuch);
+ if (log)
+ notmuch_log_words (log,"-", prefix_name, value,
+ notmuch_message_get_message_id (message), NULL);
+
term = talloc_asprintf (message, "%s%s",
_find_prefix (prefix_name), value);
@@ -806,6 +823,7 @@ notmuch_status_t
notmuch_message_freeze (notmuch_message_t *message)
{
notmuch_status_t status;
+ notmuch_log_t* log;
status = _notmuch_database_ensure_writable (message->notmuch);
if (status)
@@ -813,6 +831,10 @@ notmuch_message_freeze (notmuch_message_t *message)
message->frozen++;
+ log = notmuch_database_get_log (message->notmuch);
+ if (log)
+ notmuch_log_start_transaction (log);
+
return NOTMUCH_STATUS_SUCCESS;
}
@@ -820,6 +842,7 @@ notmuch_status_t
notmuch_message_thaw (notmuch_message_t *message)
{
notmuch_status_t status;
+ notmuch_log_t* log;
status = _notmuch_database_ensure_writable (message->notmuch);
if (status)
@@ -827,12 +850,19 @@ notmuch_message_thaw (notmuch_message_t *message)
if (message->frozen > 0) {
message->frozen--;
+
+ log = notmuch_database_get_log (message->notmuch);
+ if (log)
+ notmuch_log_finish_transaction (log);
+
if (message->frozen == 0)
_notmuch_message_sync (message);
+
return NOTMUCH_STATUS_SUCCESS;
} else {
return NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW;
}
+
}
void
--
1.7.1
More information about the notmuch
mailing list