[tracker/urho-sync] Limiting the size of the log file
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/urho-sync] Limiting the size of the log file
- Date: Tue, 25 Aug 2009 10:47:25 +0000 (UTC)
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]