tracker r2263 - in branches/indexer-split: . src/libtracker-db
- From: mr svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r2263 - in branches/indexer-split: . src/libtracker-db
- Date: Thu, 25 Sep 2008 12:27:06 +0000 (UTC)
Author: mr
Date: Thu Sep 25 12:27:06 2008
New Revision: 2263
URL: http://svn.gnome.org/viewvc/tracker?rev=2263&view=rev
Log:
* Makefile.am: Improve this so we don't use all-local and instead
use install-exec-hook and install-data-hook.
* src/libtracker-db/tracker-db-manager.c: Added functions to check
database versions to know if we should reindex or not.
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/Makefile.am
branches/indexer-split/src/libtracker-db/tracker-db-manager.c
Modified: branches/indexer-split/Makefile.am
==============================================================================
--- branches/indexer-split/Makefile.am (original)
+++ branches/indexer-split/Makefile.am Thu Sep 25 12:27:06 2008
@@ -5,31 +5,36 @@
SUBDIRS += tests
endif
-EXTRA_DIST = \
- rdf-query-examples/80s-music.rdf \
- rdf-query-examples/90s-music.rdf \
- rdf-query-examples/all-documents.rdf \
- rdf-query-examples/big-documents.rdf \
- rdf-query-examples/wallpapers.rdf \
- intltool-extract.in \
- intltool-merge.in \
+EXTRA_DIST = \
+ rdf-query-examples/80s-music.rdf \
+ rdf-query-examples/90s-music.rdf \
+ rdf-query-examples/all-documents.rdf \
+ rdf-query-examples/big-documents.rdf \
+ rdf-query-examples/wallpapers.rdf \
+ intltool-extract.in \
+ intltool-merge.in \
intltool-update.in
CLEANFILES = $(autostart_DATA)
-DISTCLEANFILES = \
- intltool-extract \
- intltool-merge \
+DISTCLEANFILES = \
+ intltool-extract \
+ intltool-merge \
intltool-update
-DISTCHECK_CONFIGURE_FLAGS = \
+DISTCHECK_CONFIGURE_FLAGS = \
--with-session-bus-services-dir="\$(datadir)"/dbus-1/services \
--disable-deskbar-applet
# Clean up any old trunk files that might exist which we don't use now
-all-local:
+install-exec-hook:
rm -Rf $(bindir)/trackerd
rm -Rf $(bindir)/tracker-indexer
rm -Rf $(bindir)/tracker-thumbnailer
rm -Rf $(bindir)/tracker-extract
- rm -Rf $(datadir)/tracker
+
+install-data-hook:
+ rm -Rf $(DBUS_SERVICES_DIR)/tracker.service
+ rm -Rf $(datadir)/tracker/sqlite-service-stored-procs.sql
+ rm -Rf $(datadir)/tracker/tracker-introspect.xml
+
\ No newline at end of file
Modified: branches/indexer-split/src/libtracker-db/tracker-db-manager.c
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-manager.c (original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-manager.c Thu Sep 25 12:27:06 2008
@@ -37,12 +37,19 @@
#include "tracker-db-manager.h"
#include "tracker-db-interface-sqlite.h"
+/* ZLib buffer settings */
+#define ZLIB_BUF_SIZE 8192
+
+/* Default memory settings for databases */
#define TRACKER_DB_PAGE_SIZE_DEFAULT 4096
#define TRACKER_DB_PAGE_SIZE_DONT_SET -1
-#define ZLIBBUFSIZ 8192
+/* Size is in bytes and is currently 2Gb */
+#define TRACKER_DB_MAX_FILE_SIZE 2000000000
-#define MAX_DB_FILE_SIZE 2000000000
+/* Set current database version we are working with */
+#define TRACKER_DB_VERSION_NOW TRACKER_DB_VERSION_2
+#define TRACKER_DB_VERSION_FILE "db-version.txt"
typedef enum {
TRACKER_DB_LOCATION_DATA_DIR,
@@ -50,6 +57,12 @@
TRACKER_DB_LOCATION_SYS_TMP_DIR,
} TrackerDBLocation;
+typedef enum {
+ TRACKER_DB_VERSION_UNKNOWN, /* Unknown */
+ TRACKER_DB_VERSION_1, /* TRUNK before indexer-split */
+ TRACKER_DB_VERSION_2 /* The indexer-split branch */
+} TrackerDBVersion;
+
typedef struct {
TrackerDB db;
TrackerDBLocation location;
@@ -159,9 +172,9 @@
static gchar *user_data_dir;
static gchar *sys_tmp_dir;
static gpointer db_type_enum_class_pointer;
-static TrackerDBInterface *file_iface = NULL;
-static TrackerDBInterface *email_iface = NULL;
-static TrackerDBInterface *xesam_iface = NULL;
+static TrackerDBInterface *file_iface;
+static TrackerDBInterface *email_iface;
+static TrackerDBInterface *xesam_iface;
static const gchar *
location_to_directory (TrackerDBLocation location)
@@ -1262,7 +1275,7 @@
{
z_stream zs;
gchar *buf, *swap;
- unsigned char obuf[ZLIBBUFSIZ];
+ unsigned char obuf[ZLIB_BUF_SIZE];
gint rv, asiz, bsiz, osiz;
zs.zalloc = Z_NULL;
@@ -1275,8 +1288,8 @@
asiz = size * 2 + 16;
- if (asiz < ZLIBBUFSIZ) {
- asiz = ZLIBBUFSIZ;
+ if (asiz < ZLIB_BUF_SIZE) {
+ asiz = ZLIB_BUF_SIZE;
}
if (!(buf = malloc (asiz))) {
@@ -1288,10 +1301,10 @@
zs.next_in = (unsigned char *)ptr;
zs.avail_in = size;
zs.next_out = obuf;
- zs.avail_out = ZLIBBUFSIZ;
+ zs.avail_out = ZLIB_BUF_SIZE;
while ((rv = inflate (&zs, Z_NO_FLUSH)) == Z_OK) {
- osiz = ZLIBBUFSIZ - zs.avail_out;
+ osiz = ZLIB_BUF_SIZE - zs.avail_out;
if (bsiz + osiz >= asiz) {
asiz = asiz * 2 + osiz;
@@ -1308,7 +1321,7 @@
memcpy (buf + bsiz, obuf, osiz);
bsiz += osiz;
zs.next_out = obuf;
- zs.avail_out = ZLIBBUFSIZ;
+ zs.avail_out = ZLIB_BUF_SIZE;
}
if (rv != Z_STREAM_END) {
@@ -1316,7 +1329,7 @@
inflateEnd (&zs);
return NULL;
}
- osiz = ZLIBBUFSIZ - zs.avail_out;
+ osiz = ZLIB_BUF_SIZE - zs.avail_out;
if (bsiz + osiz >= asiz) {
asiz = asiz * 2 + osiz;
@@ -1345,7 +1358,7 @@
GByteArray *array;
z_stream zs;
gchar *buf, *swap;
- guchar obuf[ZLIBBUFSIZ];
+ guchar obuf[ZLIB_BUF_SIZE];
gint rv, asiz, bsiz, osiz, size;
size = strlen (text);
@@ -1360,8 +1373,8 @@
asiz = size + 16;
- if (asiz < ZLIBBUFSIZ) {
- asiz = ZLIBBUFSIZ;
+ if (asiz < ZLIB_BUF_SIZE) {
+ asiz = ZLIB_BUF_SIZE;
}
if (!(buf = malloc (asiz))) {
@@ -1373,10 +1386,10 @@
zs.next_in = (unsigned char *) text;
zs.avail_in = size;
zs.next_out = obuf;
- zs.avail_out = ZLIBBUFSIZ;
+ zs.avail_out = ZLIB_BUF_SIZE;
while ((rv = deflate (&zs, Z_FINISH)) == Z_OK) {
- osiz = ZLIBBUFSIZ - zs.avail_out;
+ osiz = ZLIB_BUF_SIZE - zs.avail_out;
if (bsiz + osiz > asiz) {
asiz = asiz * 2 + osiz;
@@ -1393,7 +1406,7 @@
memcpy (buf + bsiz, obuf, osiz);
bsiz += osiz;
zs.next_out = obuf;
- zs.avail_out = ZLIBBUFSIZ;
+ zs.avail_out = ZLIB_BUF_SIZE;
}
if (rv != Z_STREAM_END) {
@@ -1402,7 +1415,7 @@
return NULL;
}
- osiz = ZLIBBUFSIZ - zs.avail_out;
+ osiz = ZLIB_BUF_SIZE - zs.avail_out;
if (bsiz + osiz + 1 > asiz) {
asiz = asiz * 2 + osiz;
@@ -2218,6 +2231,69 @@
}
}
+static TrackerDBVersion
+db_get_version (void)
+{
+ TrackerDBVersion version;
+ gchar *filename;
+
+ filename = g_build_filename (data_dir, TRACKER_DB_VERSION_FILE, NULL);
+
+ if (G_LIKELY (g_file_test (filename, G_FILE_TEST_EXISTS))) {
+ gchar *contents;
+
+ /* Check version is correct */
+ if (G_LIKELY (g_file_get_contents (filename, &contents, NULL, NULL))) {
+ if (contents && strlen (contents) <= 2) {
+ TrackerDBVersion version;
+
+ version = atoi (contents);
+ } else {
+ g_message (" Version file content size is either 0 or bigger than expected");
+
+ version = TRACKER_DB_VERSION_UNKNOWN;
+ }
+
+ g_free (contents);
+ } else {
+ g_message (" Could not get content of file '%s'", filename);
+
+ version = TRACKER_DB_VERSION_UNKNOWN;
+ }
+ } else {
+ g_message (" Could not find database version file:'%s'", filename);
+ g_message (" Current databases are either old or no databases are set up yet");
+
+ version = TRACKER_DB_VERSION_UNKNOWN;
+ }
+
+ g_free (filename);
+
+ return version;
+}
+
+static void
+db_set_version (void)
+{
+ GError *error = NULL;
+ gchar *filename;
+ gchar *str;
+
+ filename = g_build_filename (data_dir, TRACKER_DB_VERSION_FILE, NULL);
+ g_message (" Creating version file '%s'", filename);
+
+ str = g_strdup_printf ("%d", TRACKER_DB_VERSION_NOW);
+
+ if (!g_file_set_contents (filename, str, -1, &error)) {
+ g_message (" Could not set file contents, %s",
+ error ? error->message : "no error given");
+ g_clear_error (&error);
+ }
+
+ g_free (str);
+ g_free (filename);
+}
+
GType
tracker_db_get_type (void)
{
@@ -2260,6 +2336,7 @@
gboolean *first_time)
{
GType etype;
+ TrackerDBVersion version;
gchar *filename;
const gchar *dir;
gboolean need_reindex;
@@ -2273,6 +2350,8 @@
return;
}
+ need_reindex = FALSE;
+
/* Since we don't reference this enum anywhere, we do
* it here to make sure it exists when we call
* g_type_class_peek(). This wouldn't be necessary if
@@ -2316,9 +2395,23 @@
g_mkdir_with_parents (user_data_dir, 00755);
g_mkdir_with_parents (sys_tmp_dir, 00755);
+ g_message ("Checking database version");
+
+ version = db_get_version ();
+
+ if (version == TRACKER_DB_VERSION_UNKNOWN ||
+ version == TRACKER_DB_VERSION_1) {
+ g_message (" A reindex will be forced");
+ need_reindex = TRUE;
+ }
+
+ if (need_reindex) {
+ db_set_version ();
+ }
+
g_message ("Checking database files exist");
- for (i = 1, need_reindex = FALSE; i < G_N_ELEMENTS (dbs); i++) {
+ for (i = 1; i < G_N_ELEMENTS (dbs); i++) {
/* Fill absolute path for the database */
dir = location_to_directory (dbs[i].location);
dbs[i].abs_filename = g_build_filename (dir, dbs[i].file, NULL);
@@ -2673,8 +2766,9 @@
{
const gchar *filename_const;
gboolean too_big;
+
filename_const = tracker_db_manager_get_file (TRACKER_DB_FILE_METADATA);
- too_big = tracker_file_get_size (filename_const) > MAX_DB_FILE_SIZE;
+ too_big = tracker_file_get_size (filename_const) > TRACKER_DB_MAX_FILE_SIZE;
if (too_big) {
g_critical ("File metadata database is too big, discontinuing indexing");
@@ -2682,7 +2776,7 @@
}
filename_const = tracker_db_manager_get_file (TRACKER_DB_EMAIL_METADATA);
- too_big = tracker_file_get_size (filename_const) > MAX_DB_FILE_SIZE;
+ too_big = tracker_file_get_size (filename_const) > TRACKER_DB_MAX_FILE_SIZE;
if (too_big) {
g_critical ("Email metadata database is too big, discontinuing indexing");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]