tracker r1388 - in branches/indexer-split: . src/trackerd



Author: ifrade
Date: Fri May  9 15:14:45 2008
New Revision: 1388
URL: http://svn.gnome.org/viewvc/tracker?rev=1388&view=rev

Log:
New module tracker-db-manager to handle DB locations, and filenames

Added:
   branches/indexer-split/src/trackerd/tracker-db-manager.c
   branches/indexer-split/src/trackerd/tracker-db-manager.h
Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/trackerd/Makefile.am
   branches/indexer-split/src/trackerd/tracker-db-sqlite.c
   branches/indexer-split/src/trackerd/tracker-db-sqlite.h
   branches/indexer-split/src/trackerd/tracker-indexer.c
   branches/indexer-split/src/trackerd/tracker-indexer.h
   branches/indexer-split/src/trackerd/tracker-main.c
   branches/indexer-split/src/trackerd/tracker-main.h

Modified: branches/indexer-split/src/trackerd/Makefile.am
==============================================================================
--- branches/indexer-split/src/trackerd/Makefile.am	(original)
+++ branches/indexer-split/src/trackerd/Makefile.am	Fri May  9 15:14:45 2008
@@ -47,6 +47,8 @@
 	tracker-parser.h						\
 	tracker-db-sqlite.c						\
 	tracker-db-sqlite.h						\
+	tracker-db-manager.c						\
+	tracker-db-manager.h						\
 	tracker-db-email.c						\
 	tracker-db-email.h
 

Added: branches/indexer-split/src/trackerd/tracker-db-manager.c
==============================================================================
--- (empty file)
+++ branches/indexer-split/src/trackerd/tracker-db-manager.c	Fri May  9 15:14:45 2008
@@ -0,0 +1,258 @@
+/* Tracker - indexer and metadata database engine
+ * Copyright (C) 2008, Nokia (urho konttori nokia com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
+ */
+#include "tracker-db-manager.h"
+
+#define TRACKER_DB_MANAGER_COMMON_FILENAME             "common.db"
+#define TRACKER_DB_MANAGER_CACHE_FILENAME              "cache.db"
+#define TRACKER_DB_MANAGER_FILE_CONTENTS_FILENAME      "file-contents.db"
+#define TRACKER_DB_MANAGER_FILE_META_FILENAME          "file-meta.db"
+#define TRACKER_DB_MANAGER_EMAIL_CONTENTS_FILENAME     "email-contents.db"
+#define TRACKER_DB_MANAGER_EMAIL_META_FILENAME         "email-meta.db"
+
+#define TRACKER_DB_MANAGER_COMMON_NAME             "common"
+#define TRACKER_DB_MANAGER_CACHE_NAME              "cache"
+#define TRACKER_DB_MANAGER_FILE_CONTENTS_NAME      NULL
+#define TRACKER_DB_MANAGER_FILE_META_NAME          NULL
+#define TRACKER_DB_MANAGER_EMAIL_CONTENTS_NAME     NULL
+#define TRACKER_DB_MANAGER_EMAIL_META_NAME         NULL
+
+
+static gboolean initialized = FALSE;
+
+typedef enum {
+        TRACKER_DB_LOC_DATA_DIR,
+        TRACKER_DB_LOC_USER_DATA_DIR,
+        TRACKER_DB_LOC_SYS_TMP_ROOT_DIR,
+} TrackerDBLocation;
+
+typedef struct {
+        TrackerDatabase db;
+        const gchar *file;
+        TrackerDBLocation location;
+        gchar *abs_filename;
+        const gchar *name;
+        gint cache_size;
+        gint page_size;
+        gboolean add_functions;
+} TrackerDBDefinition;
+
+
+TrackerDBDefinition tracker_db_definitions [] = {
+
+        {TRACKER_DB_COMMON, 
+         TRACKER_DB_MANAGER_COMMON_FILENAME, 
+         TRACKER_DB_LOC_USER_DATA_DIR, 
+         NULL,
+         TRACKER_DB_MANAGER_COMMON_NAME,
+         32, 
+         TRACKER_DB_PAGE_SIZE_DEFAULT, 
+         FALSE},
+
+        {TRACKER_DB_CACHE, 
+         TRACKER_DB_MANAGER_CACHE_FILENAME, 
+         TRACKER_DB_LOC_SYS_TMP_ROOT_DIR,
+         NULL, 
+         TRACKER_DB_MANAGER_CACHE_NAME,
+         128, //In the code low memory was 32 and not 64 as it is now (128/2) 
+         TRACKER_DB_PAGE_SIZE_DONT_SET, 
+         FALSE},
+
+        {TRACKER_DB_FILE_META,
+         TRACKER_DB_MANAGER_FILE_META_FILENAME,
+         TRACKER_DB_LOC_DATA_DIR,
+         NULL,
+         NULL,
+         512, // open_file_db: 512  tracker_db_connect: 32
+         TRACKER_DB_PAGE_SIZE_DEFAULT, //open_file_db: DEFAULT tracker_db_connect: DONT_SET
+         TRUE},
+
+        {TRACKER_DB_FILE_CONTENTS,
+         TRACKER_DB_MANAGER_FILE_CONTENTS_FILENAME,
+         TRACKER_DB_LOC_DATA_DIR,
+         NULL,
+         NULL,
+         1024,
+         TRACKER_DB_PAGE_SIZE_DEFAULT,
+         FALSE},
+
+        {TRACKER_DB_EMAIL_META,
+         TRACKER_DB_MANAGER_EMAIL_META_FILENAME,
+         TRACKER_DB_LOC_DATA_DIR,
+         NULL,
+         NULL,
+         512, // open_email_db:8   tracker_db_connect_emails: 512
+         TRACKER_DB_PAGE_SIZE_DEFAULT,
+         TRUE},
+
+        {TRACKER_DB_EMAIL_CONTENTS,
+         TRACKER_DB_MANAGER_EMAIL_CONTENTS_FILENAME,
+         TRACKER_DB_LOC_DATA_DIR,
+         NULL,
+         NULL,
+         512,
+         TRACKER_DB_PAGE_SIZE_DEFAULT,
+         FALSE},
+};
+
+TrackerDBDefinition *tracker_dbs [TRACKER_DB_END];
+gchar *services_dir = NULL;
+gchar *sql_dir = NULL;
+
+static const gchar * 
+location_to_directory (TrackerDBLocation location,
+                       const gchar *data_dir,
+                       const gchar *user_data_dir,
+                       const gchar *sys_tmp_root_dir)
+{
+        switch (location) {
+
+        case TRACKER_DB_LOC_DATA_DIR:
+                return data_dir;
+        case TRACKER_DB_LOC_USER_DATA_DIR:
+                return user_data_dir;
+        case TRACKER_DB_LOC_SYS_TMP_ROOT_DIR:
+                return sys_tmp_root_dir;
+        default:
+                g_error ("Out of enumeration\n");
+                return NULL;
+        };
+}
+
+static void
+configure_directories () 
+{
+        services_dir = g_build_filename (SHAREDIR, "tracker", "services", NULL);
+
+        sql_dir = g_build_filename (SHAREDIR, "tracker", NULL);
+}
+
+void 
+configure_database_description (const gchar *data_dir,
+                                const gchar *user_data_dir,
+                                const gchar *sys_tmp_root_dir)
+{
+
+        TrackerDBDefinition* db_def;
+        gint i;
+        gint dbs = sizeof (tracker_db_definitions) / sizeof (TrackerDBDefinition);
+        const gchar *dir;
+
+        for (i = 0; i < dbs; i++) {
+                
+                db_def = &tracker_db_definitions [i];
+
+                /* Fill absolute path for the database */
+                dir = location_to_directory (db_def->location,
+                                             data_dir, 
+                                             user_data_dir, 
+                                             sys_tmp_root_dir);
+                
+                db_def->abs_filename = 
+                        g_build_filename (dir, db_def->file, NULL);
+
+                tracker_dbs [db_def->db] = db_def;
+        }
+}
+
+void
+tracker_db_manager_init (const gchar *data_dir, 
+                         const gchar *user_data_dir,
+                         const gchar *sys_tmp_root_dir) 
+{
+        if (!initialized) {
+                configure_directories ();
+                configure_database_description (data_dir, 
+                                                user_data_dir, 
+                                                sys_tmp_root_dir);
+                initialized = TRUE;
+        }
+}
+
+
+const gchar *
+tracker_db_manager_get_file (TrackerDatabase db) 
+{
+
+        return tracker_dbs[db]->abs_filename;
+}
+
+gboolean
+tracker_db_manager_file_exists (TrackerDatabase db) 
+{
+        return g_file_test (tracker_dbs[db]->abs_filename, G_FILE_TEST_IS_REGULAR);
+}
+
+gchar *
+tracker_db_manager_get_service_file (const gchar *service_file)
+{
+        return g_build_filename (services_dir, service_file, NULL);
+}
+
+gchar *
+tracker_db_manager_get_sql_file (const gchar *sql_file) 
+{
+        return g_build_filename (sql_dir, sql_file, NULL);
+}
+
+gint         
+tracker_db_manager_get_cache_size    (TrackerDatabase  db)
+{
+        return tracker_dbs[db]->cache_size;
+}
+
+gint         
+tracker_db_manager_get_page_size     (TrackerDatabase  db)
+{
+        return tracker_dbs[db]->page_size;
+}
+
+gboolean     
+tracker_db_manager_get_add_functions (TrackerDatabase  db)
+{
+        return tracker_dbs[db]->add_functions;
+}
+
+const gchar *
+tracker_db_manager_get_name (TrackerDatabase  db)
+{
+        return tracker_dbs[db]->name;
+}
+
+void
+tracker_db_manager_term () 
+{
+        gint dbs, i;
+
+        if (!initialized) {
+                return;
+        }
+
+        initialized = FALSE;
+
+        dbs = sizeof (tracker_db_definitions) /sizeof (TrackerDBDefinition);
+
+        for (i = 0; i < dbs; i++) {
+                if (tracker_db_definitions[i].abs_filename) {
+                        g_free (tracker_db_definitions[i].abs_filename);
+                }
+        }
+
+        g_free (services_dir);
+        g_free (sql_dir);
+}

Added: branches/indexer-split/src/trackerd/tracker-db-manager.h
==============================================================================
--- (empty file)
+++ branches/indexer-split/src/trackerd/tracker-db-manager.h	Fri May  9 15:14:45 2008
@@ -0,0 +1,57 @@
+/* Tracker - indexer and metadata database engine
+ * Copyright (C) 2008, Nokia (urho konttori nokia com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
+ */
+#ifndef __TRACKER_DB_MANAGER_H__
+#define __TRACKER_DB_MANAGER_H__
+
+#include <glib.h>
+
+#define TRACKER_DB_PAGE_SIZE_DEFAULT  4096
+#define TRACKER_DB_PAGE_SIZE_DONT_SET -1
+
+G_BEGIN_DECLS
+
+typedef enum {
+        TRACKER_DB_COMMON,
+        TRACKER_DB_CACHE,
+        TRACKER_DB_FILE_META,
+        TRACKER_DB_FILE_CONTENTS,
+        TRACKER_DB_EMAIL_META,
+        TRACKER_DB_EMAIL_CONTENTS,
+        TRACKER_DB_END
+} TrackerDatabase;
+
+
+void         tracker_db_manager_init              (const gchar     *data_dir,
+                                                   const gchar     *user_data_dir,
+                                                   const gchar     *sys_tmp_root_dir);
+
+const gchar *tracker_db_manager_get_file          (TrackerDatabase  db);
+gboolean     tracker_db_manager_file_exists       (TrackerDatabase  db);
+gchar *      tracker_db_manager_get_service_file  (const gchar     *service_file);
+gchar *      tracker_db_manager_get_sql_file      (const gchar     *sql_file);
+gint         tracker_db_manager_get_cache_size    (TrackerDatabase  db);
+gint         tracker_db_manager_get_page_size     (TrackerDatabase  db);
+gboolean     tracker_db_manager_get_add_functions (TrackerDatabase  db);
+const gchar *tracker_db_manager_get_name          (TrackerDatabase  db);
+
+void         tracker_db_manager_term              (void);
+
+G_END_DECLS
+
+#endif /* __TRACKER_DB_MANAGER_H__ */

Modified: branches/indexer-split/src/trackerd/tracker-db-sqlite.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db-sqlite.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-db-sqlite.c	Fri May  9 15:14:45 2008
@@ -45,6 +45,7 @@
 #include <libtracker-db/tracker-db-interface-sqlite.h>
 
 #include "tracker-db-sqlite.h"
+#include "tracker-db-manager.h"
 #include "tracker-indexer.h"
 #include "tracker-cache.h"
 #include "tracker-metadata.h"
@@ -60,9 +61,6 @@
 #define MAX_COMPRESS_BUFFER   65565
 #define ZLIBBUFSIZ            8192
 
-#define DB_PAGE_SIZE_DEFAULT  4096
-#define DB_PAGE_SIZE_DONT_SET -1
-
 extern Tracker *tracker;
 
 static GHashTable *prepared_queries;
@@ -405,7 +403,7 @@
 {
 	char *filename, *query;
 	
-	filename = g_build_filename (SHAREDIR, "tracker", sql_file, NULL);
+	filename = tracker_db_manager_get_sql_file (sql_file);
 
 	if (!g_file_get_contents (filename, &query, NULL, NULL)) {
 		tracker_error ("ERROR: Tracker cannot read required file %s - Please reinstall tracker or check read permissions on the file if it exists", sql_file);
@@ -586,75 +584,20 @@
 }
 
 
-/* TODO: refactor this to a better location. This is the threadpool shared by
- * all SQLite connections. I noticed that having a thread per connection is
- * not sufficient. All statements must happen sequential ... */
-
-static GThreadPool *pool = NULL;
-
-/* TODO: the rafactor to a better location should perform this at-exit. For
- * example when the desktop-session alarms that the system is shutting down,
- * and when the trackerd process is exiting.
- *
- *	g_thread_pool_free (priv->pool, TRUE, TRUE);
- **/
-
-static TrackerDBInterface *
-open_db (const char *dir, const char *name, gboolean *create_table)
-{
-	TrackerDBInterface *db;
-	gboolean db_exists;
-	char *dbname;
-
-	if (!pool) {
-		pool = g_thread_pool_new (tracker_db_interface_sqlite_process_query, 
-					  NULL, 1, TRUE, NULL);
-	}
-
-	dbname = g_build_filename (dir, name, NULL);
-	db_exists = g_file_test (dbname, G_FILE_TEST_IS_REGULAR);
-
-	if (!db_exists) {
-		tracker_log ("database file %s is not present - will create", dbname);
-	}
-
-	if (create_table) {
-		*create_table = db_exists;
-	}
-
-	/* We pass a GThreadPool here, it should be the same pool for all opened
-	 * SQLite databases */
-
-	db = tracker_db_interface_sqlite_new (dbname, pool);
-	tracker_db_interface_set_procedure_table (db, prepared_queries);
-	g_free (dbname);
-
-	return db;
-
-}
-
 
 static void
-set_default_pragmas (TrackerDBInterface *iface)
+set_params (TrackerDBInterface *iface, int cache_size, int page_size, gboolean add_functions)
 {
 	tracker_db_exec_no_reply (iface, "PRAGMA synchronous = NORMAL;");
 	tracker_db_exec_no_reply (iface, "PRAGMA count_changes = 0;");
 	tracker_db_exec_no_reply (iface, "PRAGMA temp_store = FILE;");
 	tracker_db_exec_no_reply (iface, "PRAGMA encoding = \"UTF-8\"");
 	tracker_db_exec_no_reply (iface, "PRAGMA auto_vacuum = 0;");
-}
-
-
-static void
-set_params (TrackerDBInterface *iface, int cache_size, int page_size, gboolean add_functions)
-{
-	set_default_pragmas (iface);
 
-	if (page_size != DB_PAGE_SIZE_DONT_SET) {
+	if (page_size != TRACKER_DB_PAGE_SIZE_DONT_SET) {
 		tracker_db_exec_no_reply (iface, "PRAGMA page_size = %d", page_size);
 	}
 
-
 	if (tracker_config_get_low_memory_mode (tracker->config)) {
 		cache_size /= 2;
 	}
@@ -662,8 +605,9 @@
 	tracker_db_exec_no_reply (iface, "PRAGMA cache_size = %d", cache_size);
 
 	if (add_functions) {
-		if (! tracker_db_interface_sqlite_set_collation_function (TRACKER_DB_INTERFACE_SQLITE (iface),
-									  "UTF8", utf8_collation_func)) {
+
+		if (!tracker_db_interface_sqlite_set_collation_function (TRACKER_DB_INTERFACE_SQLITE (iface),
+									 "UTF8", utf8_collation_func)) {
 			tracker_error ("ERROR: collation sequence failed");
 		}
 
@@ -677,16 +621,54 @@
 }
 
 
+/* TODO: refactor this to a better location. This is the threadpool shared by
+ * all SQLite connections. I noticed that having a thread per connection is
+ * not sufficient. All statements must happen sequential ... */
 
-static void
-open_common_db (DBConnection *db_con)
+static GThreadPool *pool = NULL;
+
+/* TODO: the rafactor to a better location should perform this at-exit. For
+ * example when the desktop-session alarms that the system is shutting down,
+ * and when the trackerd process is exiting.
+ *
+ *	g_thread_pool_free (priv->pool, TRUE, TRUE);
+ **/
+
+/*
+ * If the file doesnt exist, creates a new file of size 0
+ */
+static TrackerDBInterface *
+open_db_interface (TrackerDatabase database)
 {
-	gboolean create;
+	TrackerDBInterface *iface;
+	const gchar *dbname;
 
-	db_con->db = open_db (tracker->user_data_dir, TRACKER_INDEXER_COMMON_DB_FILENAME, &create);
+	if (!pool) {
+		pool = g_thread_pool_new (tracker_db_interface_sqlite_process_query, 
+					  NULL, 1, TRUE, NULL);
+	}
+
+	dbname = tracker_db_manager_get_file (database);
+
+	/* We pass a GThreadPool here, it should be the same pool for all opened
+	 * SQLite databases */
+	iface = tracker_db_interface_sqlite_new (dbname, pool);
+	tracker_db_interface_set_procedure_table (iface, prepared_queries);
+
+
+	set_params (iface,
+		    tracker_db_manager_get_cache_size (database),
+		    tracker_db_manager_get_page_size (database),
+		    tracker_db_manager_get_add_functions (database));
+	return iface;
+
+}
 
-	set_params (db_con->db, 32, DB_PAGE_SIZE_DEFAULT, FALSE);
 
+static void
+open_common_db (DBConnection *db_con)
+{
+	db_con->db = open_db_interface (TRACKER_DB_COMMON);
 }
 
 
@@ -709,19 +691,17 @@
 }
 
 void
-tracker_db_attach_db (DBConnection *db_con, const char *name)
+tracker_db_attach_db (DBConnection *db_con, TrackerDatabase database)
 {
-	gchar *path;
-
-	if (strcmp (name, "common") == 0) {
-		path = g_build_filename (tracker->user_data_dir, TRACKER_INDEXER_COMMON_DB_FILENAME, NULL);
-		tracker_db_exec_no_reply (db_con->db, "ATTACH '%s' as %s", path, name);
-	} else if (strcmp (name, "cache") == 0) {
-		path = g_build_filename (tracker->sys_tmp_root_dir, TRACKER_INDEXER_CACHE_DB_FILENAME, NULL);
-		tracker_db_exec_no_reply (db_con->db, "ATTACH '%s' as %s", path, name);
+	if (database != TRACKER_DB_COMMON && database != TRACKER_DB_CACHE) {
+		tracker_error ("Attaching invalid db");
+		return;
 	}
 
-	g_free (path);
+	tracker_db_exec_no_reply (db_con->db, 
+				  "ATTACH '%s' as %s",
+				  tracker_db_manager_get_file (database),
+				  tracker_db_manager_get_name (database));
 }
 
 static inline void
@@ -874,29 +854,29 @@
 {
 	DBConnection *db_con;
 	gboolean create_table = FALSE;
-	db_con = g_new0 (DBConnection, 1);
 
-	db_con->db = open_db (tracker->data_dir, TRACKER_INDEXER_FILE_META_DB_FILENAME, &create_table);
+	create_table = tracker_db_manager_file_exists (TRACKER_DB_FILE_META);
 
+	db_con = g_new0 (DBConnection, 1);
+	db_con->db = open_db_interface (TRACKER_DB_FILE_META);
 	db_con->data = db_con;
-
-	set_params (db_con->db, 32, DB_PAGE_SIZE_DONT_SET, TRUE);
 	
 	if (create_table) {
-		tracker_log ("Creating file database...");
+		tracker_log ("Creating file database... %s",
+			     tracker_db_manager_get_file (TRACKER_DB_FILE_META));
 		load_sql_file (db_con, "sqlite-service.sql");
 		load_sql_trigger (db_con, "sqlite-service-triggers.sql");
 
 		load_sql_file (db_con, "sqlite-metadata.sql");
 	
-		tracker_db_load_service_file (db_con, "default.metadata", FALSE);
-		tracker_db_load_service_file (db_con, "file.metadata", FALSE);
-		tracker_db_load_service_file (db_con, "audio.metadata", FALSE);
-		tracker_db_load_service_file (db_con, "application.metadata", FALSE);
-		tracker_db_load_service_file (db_con, "document.metadata", FALSE);
-		tracker_db_load_service_file (db_con, "email.metadata", FALSE);
-		tracker_db_load_service_file (db_con, "image.metadata", FALSE);	
-		tracker_db_load_service_file (db_con, "video.metadata", FALSE);	
+		tracker_db_load_service_file (db_con, "default.metadata");
+		tracker_db_load_service_file (db_con, "file.metadata");
+		tracker_db_load_service_file (db_con, "audio.metadata");
+		tracker_db_load_service_file (db_con, "application.metadata");
+		tracker_db_load_service_file (db_con, "document.metadata");
+		tracker_db_load_service_file (db_con, "email.metadata");
+		tracker_db_load_service_file (db_con, "image.metadata");	
+		tracker_db_load_service_file (db_con, "video.metadata");	
 	
 		tracker_db_exec_no_reply (db_con->db, "ANALYZE");
 	}
@@ -906,8 +886,8 @@
 
 	// load_sql_file (db_con, "sqlite-temp-tables.sql");
 
-	tracker_db_attach_db (db_con, "common");
-	tracker_db_attach_db (db_con, "cache");
+	tracker_db_attach_db (db_con, TRACKER_DB_COMMON);
+	tracker_db_attach_db (db_con, TRACKER_DB_CACHE);
 
 	db_con->cache = db_con;
 	db_con->common = db_con;
@@ -918,12 +898,7 @@
 static inline void
 open_file_db (DBConnection *db_con)
 {
-	gboolean create;
-
-	db_con->db = open_db (tracker->data_dir, 
-			      TRACKER_INDEXER_FILE_META_DB_FILENAME, &create);	
-
-	set_params (db_con->db, 512, DB_PAGE_SIZE_DEFAULT, TRUE);
+	db_con->db = open_db_interface (TRACKER_DB_FILE_META);
 }
 
 DBConnection *
@@ -942,12 +917,7 @@
 static inline void
 open_email_db (DBConnection *db_con)
 {
-	gboolean create;
-
-	db_con->db = open_db (tracker->data_dir, 
-			      TRACKER_INDEXER_EMAIL_META_DB_FILENAME, &create);	
-
-	set_params (db_con->db, 512, DB_PAGE_SIZE_DEFAULT, TRUE);
+	db_con->db = open_db_interface (TRACKER_DB_EMAIL_META);
 }
 
 DBConnection *
@@ -970,15 +940,14 @@
 {
 	gboolean create;
 
-	db_con->db = open_db (tracker->data_dir,
-			      TRACKER_INDEXER_FILE_CONTENTS_DB_FILENAME, 
-			      &create);	
+	create = tracker_db_manager_file_exists (TRACKER_DB_FILE_CONTENTS);
 
-	set_params (db_con->db, 1024, DB_PAGE_SIZE_DEFAULT, FALSE);
+	db_con->db = open_db_interface (TRACKER_DB_FILE_CONTENTS);
 
 	if (create) {
 		tracker_db_exec_no_reply (db_con->db, "CREATE TABLE ServiceContents (ServiceID Int not null, MetadataID Int not null, Content Text, primary key (ServiceID, MetadataID))");
-		tracker_log ("creating file content table");
+		tracker_log ("Creating db: %s",
+			     tracker_db_manager_get_file (TRACKER_DB_FILE_CONTENTS));
 	}
 
 	tracker_db_interface_sqlite_create_function (db_con->db, "uncompress", function_uncompress, 1);
@@ -1004,15 +973,14 @@
 {
 	gboolean create;
 
-	db_con->db = open_db (tracker->data_dir, 
-			      TRACKER_INDEXER_EMAIL_CONTENTS_DB_FILENAME,
-			      &create);	
+	create = tracker_db_manager_file_exists (TRACKER_DB_EMAIL_CONTENTS);
 
-	set_params (db_con->db, 512, DB_PAGE_SIZE_DEFAULT, FALSE);
+	db_con->db = open_db_interface (TRACKER_DB_EMAIL_CONTENTS);
 
 	if (create) {
 		tracker_db_exec_no_reply (db_con->db, "CREATE TABLE ServiceContents (ServiceID Int not null, MetadataID Int not null, Content Text, primary key (ServiceID, MetadataID))");
-		tracker_log ("creating email content table");
+		tracker_log ("Creating db: %s",
+			     tracker_db_manager_get_file (TRACKER_DB_EMAIL_CONTENTS));
 	}
 
 	tracker_db_interface_sqlite_create_function (db_con->db, "uncompress", function_uncompress, 1);
@@ -1099,24 +1067,23 @@
 	gboolean     create_table;
 	DBConnection *db_con;
 
-	create_table = FALSE;
+	create_table = tracker_db_manager_file_exists (TRACKER_DB_CACHE);
 
 	db_con = g_new0 (DBConnection, 1);
 
-	db_con->db = open_db (tracker->sys_tmp_root_dir, 
-			      TRACKER_INDEXER_CACHE_DB_FILENAME,
-			      &create_table);
+	db_con->db = open_db_interface (TRACKER_DB_CACHE);
 
 	/* Original cache_size: 
 	 *   Normal 128     Low memory mode 32
 	 * Using set_params...:
 	 *   Normal 128     Low memory mode 64
 	 */
-	set_params (db_con->db, 128, DB_PAGE_SIZE_DONT_SET, FALSE);
 
 	if (create_table) {
 		load_sql_file (db_con, "sqlite-cache.sql");
 		tracker_db_exec_no_reply (db_con->db, "ANALYZE");
+		tracker_log ("Creating db: %s",
+			     tracker_db_manager_get_file (TRACKER_DB_CACHE));
 	}
 
 	return db_con;
@@ -1129,17 +1096,17 @@
 	gboolean     create_table;
 	DBConnection *db_con;
 	
-	create_table = FALSE;
+	create_table = tracker_db_manager_file_exists (TRACKER_DB_EMAIL_META);
 
 	db_con = g_new0 (DBConnection, 1);
 
-	db_con->db = open_db (tracker->data_dir, TRACKER_INDEXER_EMAIL_META_DB_FILENAME, &create_table);
+	db_con->db = open_db_interface (TRACKER_DB_EMAIL_META);
+	//db_con->db = open_db (tracker->data_dir, TRACKER_INDEXER_EMAIL_META_DB_FILENAME, &create_table);
+	/* Old: always 8    Now: normal 8  low battery 4 */
+//set_params (db_con->db, 8, TRACKER_DB_PAGE_SIZE_DEFAULT, TRUE);
 
 	db_con->emails = db_con;
 
-	/* Old: always 8    Now: normal 8  low battery 4 */
-	set_params (db_con->db, 8, DB_PAGE_SIZE_DEFAULT, TRUE);
-
 	if (create_table) {
 		tracker_log ("Creating email database...");
 		load_sql_file (db_con, "sqlite-service.sql");
@@ -1149,8 +1116,8 @@
 		tracker_db_exec_no_reply (db_con->db, "ANALYZE");
 	}
 
-	tracker_db_attach_db (db_con, "common");
-	tracker_db_attach_db (db_con, "cache");
+	tracker_db_attach_db (db_con, TRACKER_DB_COMMON);
+	tracker_db_attach_db (db_con, TRACKER_DB_CACHE);
 
 	return db_con;
 }
@@ -1233,26 +1200,22 @@
 	load_sql_file (db_con, "sqlite-metadata.sql");
 	load_sql_trigger (db_con, "sqlite-tracker-triggers.sql");
 
-	tracker_db_load_service_file (db_con, "default.metadata", FALSE);
-	tracker_db_load_service_file (db_con, "file.metadata", FALSE);
-	tracker_db_load_service_file (db_con, "audio.metadata", FALSE);
-	tracker_db_load_service_file (db_con, "application.metadata", FALSE);
-	tracker_db_load_service_file (db_con, "document.metadata", FALSE);
-	tracker_db_load_service_file (db_con, "email.metadata", FALSE);
-	tracker_db_load_service_file (db_con, "image.metadata", FALSE);	
-	tracker_db_load_service_file (db_con, "video.metadata", FALSE);	
+	tracker_db_load_service_file (db_con, "default.metadata");
+	tracker_db_load_service_file (db_con, "file.metadata");
+	tracker_db_load_service_file (db_con, "audio.metadata");
+	tracker_db_load_service_file (db_con, "application.metadata");
+	tracker_db_load_service_file (db_con, "document.metadata");
+	tracker_db_load_service_file (db_con, "email.metadata");
+	tracker_db_load_service_file (db_con, "image.metadata");	
+	tracker_db_load_service_file (db_con, "video.metadata");	
 
-	tracker_db_load_service_file (db_con, "default.service", FALSE);
+	tracker_db_load_service_file (db_con, "default.service");
 
 	tracker_db_exec_no_reply (db_con->db, "ANALYZE");
 
 	tracker_db_close (db_con);
 
 	g_free (db_con);
-
-
-
-	
 }
 
 static gboolean
@@ -1275,16 +1238,16 @@
 gboolean
 tracker_db_needs_setup ()
 {
-	return (!file_exists (tracker->data_dir, TRACKER_INDEXER_FILE_META_DB_FILENAME) 
+	return (!tracker_db_manager_file_exists (TRACKER_DB_FILE_META)
 		|| !file_exists (tracker->data_dir, TRACKER_INDEXER_FILE_INDEX_DB_FILENAME) 
-		|| !file_exists (tracker->data_dir, TRACKER_INDEXER_FILE_CONTENTS_DB_FILENAME));
+		|| !tracker_db_manager_file_exists (TRACKER_DB_FILE_CONTENTS));
 }
 
 
 gboolean 
 tracker_db_needs_data ()
 {
-	return !file_exists (tracker->user_data_dir, TRACKER_INDEXER_COMMON_DB_FILENAME);
+	return !tracker_db_manager_file_exists (TRACKER_DB_COMMON);
 }
 
 gint
@@ -4633,7 +4596,7 @@
 
 
 gboolean
-tracker_db_load_service_file (DBConnection *db_con, const char *filename, gboolean full_path)
+tracker_db_load_service_file (DBConnection *db_con, const char *filename)
 {
 	GKeyFile 		*key_file = NULL;
 	const char * const 	*locale_array;
@@ -4643,12 +4606,7 @@
 
 	char *DataTypeArray[11] = {"Keyword", "Indexable", "CLOB", "String", "Integer", "Double", "DateTime", "BLOB", "Struct", "Link", NULL};
 
-	if (!full_path) {
-		service_file = g_build_filename (tracker->services_dir, filename, NULL);
-	} else {
-		service_file = g_strdup (filename);
-	}
-
+	service_file = tracker_db_manager_get_service_file (filename);
 
 	locale_array = g_get_language_names ();
 

Modified: branches/indexer-split/src/trackerd/tracker-db-sqlite.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db-sqlite.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-db-sqlite.h	Fri May  9 15:14:45 2008
@@ -318,8 +318,7 @@
                                                                 gboolean        embedded_only);
 gboolean            tracker_db_has_display_metadata            (FieldDef       *def);
 gboolean            tracker_db_load_service_file               (DBConnection   *db_con,
-                                                                const gchar    *filename,
-                                                                gboolean        full_path);
+                                                                const gchar    *filename);
 gchar *             tracker_db_get_field_name                  (const gchar    *service,
                                                                 const gchar    *meta_name);
 gint                tracker_metadata_is_key                    (const gchar    *service,

Modified: branches/indexer-split/src/trackerd/tracker-indexer.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-indexer.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-indexer.c	Fri May  9 15:14:45 2008
@@ -63,6 +63,7 @@
 #include "tracker-query-tree.h"
 #include "tracker-service-manager.h"
 #include "tracker-status.h"
+#include "tracker-db-manager.h"
 
 extern Tracker *tracker;
 
@@ -1387,8 +1388,9 @@
 gboolean
 tracker_indexer_are_databases_too_big (void)
 {
-	gchar    *filename;
-        gboolean  too_big;
+	gchar       *filename;
+        const gchar *filename_const;
+        gboolean    too_big;
 
 	filename = g_build_filename (tracker->data_dir, TRACKER_INDEXER_FILE_INDEX_DB_FILENAME, NULL);
 	too_big = tracker_file_get_size (filename) > MAX_INDEX_FILE_SIZE;
@@ -1408,18 +1410,16 @@
 		return TRUE;	
 	}
 
-	filename = g_build_filename (tracker->data_dir, TRACKER_INDEXER_FILE_META_DB_FILENAME, NULL);
-	too_big = tracker_file_get_size (filename) > MAX_INDEX_FILE_SIZE;
-        g_free (filename);
+        filename_const = tracker_db_manager_get_file (TRACKER_DB_FILE_META);
+	too_big = tracker_file_get_size (filename_const) > MAX_INDEX_FILE_SIZE;
         
         if (too_big) {
                 tracker_error ("File metadata database is too big, discontinuing indexing");
 		return TRUE;	
 	}
 
-	filename = g_build_filename (tracker->data_dir, TRACKER_INDEXER_EMAIL_META_DB_FILENAME, NULL);
-	too_big = tracker_file_get_size (filename) > MAX_INDEX_FILE_SIZE;
-        g_free (filename);
+        filename_const = tracker_db_manager_get_file (TRACKER_DB_EMAIL_META);
+	too_big = tracker_file_get_size (filename_const) > MAX_INDEX_FILE_SIZE;
         
         if (too_big) {
 		tracker_error ("Email metadata database is too big, discontinuing indexing");

Modified: branches/indexer-split/src/trackerd/tracker-indexer.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-indexer.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-indexer.h	Fri May  9 15:14:45 2008
@@ -27,15 +27,9 @@
 
 #include <libtracker-db/tracker-db-interface.h>
 
-#define TRACKER_INDEXER_COMMON_DB_FILENAME             "common.db"
-#define TRACKER_INDEXER_CACHE_DB_FILENAME              "cache.db"
-#define TRACKER_INDEXER_FILE_UPDATE_INDEX_DB_FILENAME  "file-update-index.db"
-#define TRACKER_INDEXER_FILE_CONTENTS_DB_FILENAME      "file-contents.db"
 #define TRACKER_INDEXER_FILE_INDEX_DB_FILENAME         "file-index.db"
-#define TRACKER_INDEXER_FILE_META_DB_FILENAME          "file-meta.db"
-#define TRACKER_INDEXER_EMAIL_CONTENTS_DB_FILENAME     "email-contents.db"
 #define TRACKER_INDEXER_EMAIL_INDEX_DB_FILENAME        "email-index.db"
-#define TRACKER_INDEXER_EMAIL_META_DB_FILENAME         "email-meta.db"
+#define TRACKER_INDEXER_FILE_UPDATE_INDEX_DB_FILENAME  "file-update-index.db"
 
 G_BEGIN_DECLS
 

Modified: branches/indexer-split/src/trackerd/tracker-main.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-main.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-main.c	Fri May  9 15:14:45 2008
@@ -55,6 +55,7 @@
 #include "tracker-service-manager.h"
 #include "tracker-status.h"
 #include "tracker-xesam.h"
+#include "tracker-db-manager.h"
 
 #ifdef OS_WIN32
 #include <windows.h>
@@ -544,8 +545,6 @@
 
 	tracker->index_number_min_length = 6;
 
-	tracker->services_dir = g_build_filename (SHAREDIR, "tracker", "services", NULL);
-
 	tracker->folders_count = 0;
 	tracker->folders_processed = 0;
 	tracker->mbox_count = 0;
@@ -869,6 +868,11 @@
 	tracker_nfs_lock_init (tracker->root_dir,
 			       tracker_config_get_nfs_locking (tracker->config));
 	
+	/* Prepare db information */
+	tracker_db_manager_init (tracker->data_dir,
+				 tracker->user_data_dir,
+				 tracker->sys_tmp_root_dir);
+	
 	/* Set up xesam */
 	tracker_xesam_init ();
 
@@ -1039,6 +1043,8 @@
                 g_object_unref (tracker->config);
         }
 
+	tracker_db_manager_term ();
+
 	tracker_nfs_lock_term ();
 	tracker_log_term ();
 

Modified: branches/indexer-split/src/trackerd/tracker-main.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-main.h	(original)
+++ branches/indexer-split/src/trackerd/tracker-main.h	Fri May  9 15:14:45 2008
@@ -74,7 +74,6 @@
 	gchar       *user_data_dir;
 	gchar       *sys_tmp_root_dir;
         gchar       *email_attachements_dir;
-	gchar       *services_dir;
 	gchar       *xesam_dir;
 
 	gchar       *log_filename;



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