[tracker/urho-sync] Limiting the size of the log file



commit 08017cbb8a3e1a373f88c6842fb526e916009025
Author: Philip Van Hoof <philip codeminded be>
Date:   Tue Aug 25 12:45:56 2009 +0200

    Limiting the size of the log file

 src/libtracker-db/tracker-db-journal.c |   21 ++++++++++++++++++++-
 src/libtracker-db/tracker-db-journal.h |    3 +++
 src/tracker-store/tracker-store.c      |   20 ++++++++++++--------
 3 files changed, 35 insertions(+), 9 deletions(-)
---
diff --git a/src/libtracker-db/tracker-db-journal.c b/src/libtracker-db/tracker-db-journal.c
index 91f212c..fdcfa76 100644
--- a/src/libtracker-db/tracker-db-journal.c
+++ b/src/libtracker-db/tracker-db-journal.c
@@ -27,12 +27,15 @@
 #include <sys/types.h>
 #include <stdio.h>
 #include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
 
 #include "tracker-db-journal.h"
 
 static gchar *filename = NULL;
 static FILE *journal = NULL;
 static GMappedFile *mapped = NULL;
+static gsize current_size = 0;
 
 #define TRACKER_DB_JOURNAL_LOG_FILENAME		"log.sparql.txt"
 
@@ -48,6 +51,12 @@ get_filename (void)
 	}
 }
 
+gsize
+tracker_db_journal_get_size (void)
+{
+	return current_size;
+}
+
 const gchar*
 tracker_db_journal_filename (void)
 {
@@ -58,16 +67,25 @@ tracker_db_journal_filename (void)
 void
 tracker_db_journal_open (void)
 {
+	struct stat st;
+
 	get_filename ();
+
 	journal = fopen (filename, "a");
+
+	if (stat (filename, &st) == 0) {
+		current_size = (gsize) st.st_size;
+	}
 }
 
 void
 tracker_db_journal_log (const gchar *query)
 {
 	if (journal) {
-		write (fileno (journal), query, strlen (query));
+		size_t len = strlen (query);
+		write (fileno (journal), query, len);
 		write (fileno (journal), "\n\0", 2);
+		current_size += (len + 2);
 	}
 }
 
@@ -84,6 +102,7 @@ tracker_db_journal_truncate (void)
 {
 	if (journal) {
 		ftruncate(fileno (journal), 0);
+		current_size = 0;
 		fsync (fileno (journal));
 	}
 }
diff --git a/src/libtracker-db/tracker-db-journal.h b/src/libtracker-db/tracker-db-journal.h
index 3ff6c4c..552aee3 100644
--- a/src/libtracker-db/tracker-db-journal.h
+++ b/src/libtracker-db/tracker-db-journal.h
@@ -26,6 +26,8 @@
 #include <glib.h>
 #include <gio/gio.h>
 
+#define TRACKER_DB_JOURNAL_MAX_SIZE	52428800
+
 G_BEGIN_DECLS
 
 typedef GPtrArray TrackerJournalContents;
@@ -38,6 +40,7 @@ void tracker_db_journal_close (void);
 TrackerJournalContents* tracker_db_journal_get_contents (guint transaction_size);
 void tracker_db_journal_free_contents (TrackerJournalContents *contents);
 void tracker_db_journal_fsync (void);
+gsize tracker_db_journal_get_size (void);
 
 G_END_DECLS
 
diff --git a/src/tracker-store/tracker-store.c b/src/tracker-store/tracker-store.c
index 0487487..78e638f 100644
--- a/src/tracker-store/tracker-store.c
+++ b/src/tracker-store/tracker-store.c
@@ -165,9 +165,21 @@ end_batch (TrackerStorePrivate *private)
 }
 
 static void
+on_backup_done (GError *error, gpointer user_data)
+{
+	if (!error) {
+		tracker_db_journal_truncate ();
+	}
+}
+
+static void
 log_to_journal (TrackerStorePrivate *private, const gchar *query)
 {
 	tracker_db_journal_log (query);
+
+	if (tracker_db_journal_get_size () > TRACKER_DB_JOURNAL_MAX_SIZE) {
+		tracker_db_backup_save (on_backup_done, NULL, NULL);
+	}
 }
 
 static gboolean
@@ -260,14 +272,6 @@ queue_idle_handler (gpointer user_data)
 	return !g_queue_is_empty (private->queue);
 }
 
-static void
-on_backup_done (GError *error, gpointer user_data)
-{
-	if (!error) {
-		tracker_db_journal_truncate ();
-	}
-}
-
 static gboolean
 sync_idle_handler (gpointer user_data)
 {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]