tracker r1907 - in branches/indexer-split: . src/trackerd
- From: pvanhoof svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1907 - in branches/indexer-split: . src/trackerd
- Date: Tue, 22 Jul 2008 15:58:30 +0000 (UTC)
Author: pvanhoof
Date: Tue Jul 22 15:58:30 2008
New Revision: 1907
URL: http://svn.gnome.org/viewvc/tracker?rev=1907&view=rev
Log:
2008-07-22 Philip Van Hoof <pvanhoof gnome org>
* src/tracker-indexer/tracker-indexer.c:
* src/trackerd/tracker-search.c:
* src/trackerd/tracker-keywords.c:
* src/trackerd/tracker-metadata.c:
* src/trackerd/tracker-daemon.c:
* src/trackerd/tracker-utils.c:
Wrapped all database access in the DBus implementations with two
convenient functions.
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/src/trackerd/tracker-daemon.c
branches/indexer-split/src/trackerd/tracker-files.c
branches/indexer-split/src/trackerd/tracker-indexer.c
branches/indexer-split/src/trackerd/tracker-indexer.h
branches/indexer-split/src/trackerd/tracker-keywords.c
branches/indexer-split/src/trackerd/tracker-metadata.c
branches/indexer-split/src/trackerd/tracker-search.c
branches/indexer-split/src/trackerd/tracker-utils.c
Modified: branches/indexer-split/src/trackerd/tracker-daemon.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-daemon.c (original)
+++ branches/indexer-split/src/trackerd/tracker-daemon.c Tue Jul 22 15:58:30 2008
@@ -39,6 +39,7 @@
#include "tracker-main.h"
#include "tracker-status.h"
#include "tracker-marshal.h"
+#include "tracker-indexer.h"
#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_DAEMON, TrackerDaemonPriv))
@@ -295,6 +296,8 @@
/* iface = tracker_db_manager_get_db_interfaceX (TRACKER_DB_COMMON); */
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
result_set = tracker_db_exec_proc (iface, "GetServices", 0);
@@ -308,6 +311,7 @@
g_hash_table_destroy (values);
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
}
@@ -334,6 +338,8 @@
/* iface = tracker_db_manager_get_db_interfaceX (TRACKER_DB_COMMON); */
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
result_set = tracker_db_exec_proc (iface, "GetStats", 0);
@@ -348,6 +354,7 @@
g_ptr_array_foreach (values, (GFunc) g_strfreev, NULL);
g_ptr_array_free (values, TRUE);
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
}
Modified: branches/indexer-split/src/trackerd/tracker-files.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-files.c (original)
+++ branches/indexer-split/src/trackerd/tracker-files.c Tue Jul 22 15:58:30 2008
@@ -112,6 +112,7 @@
tracker_dbus_request_success (request_id);
}
+/* You should deprecate this API */
void
tracker_files_create (TrackerFiles *object,
const gchar *uri,
@@ -148,6 +149,8 @@
size,
mtime);
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
/* Create structure */
@@ -232,6 +235,8 @@
dbus_g_method_return (context);
+ tracker_indexer_continue ();
+
tracker_dbus_request_success (request_id);
}
@@ -265,10 +270,15 @@
"uri:'%s'",
uri);
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
file_id = tracker_db_file_get_id (iface, uri);
+
if (file_id == 0) {
+ tracker_indexer_continue ();
+
tracker_dbus_request_comment (request_id,
"File or directory was not in database to delete, uri:'%s'",
uri);
@@ -278,6 +288,8 @@
return;
}
+ tracker_indexer_continue ();
+
if (uri[0] == G_DIR_SEPARATOR) {
name = g_path_get_basename (uri);
path = g_path_get_dirname (uri);
@@ -335,6 +347,8 @@
"uri:'%s'",
uri);
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
/* FIXME why dont obtain the service type directly from the DB??? */
@@ -342,6 +356,8 @@
file_id = tracker_db_file_get_id (iface, uri);
if (file_id < 1) {
+ tracker_indexer_continue ();
+
tracker_dbus_request_failed (request_id,
&actual_error,
"File '%s' was not found in the database",
@@ -364,6 +380,8 @@
g_object_unref (result_set);
}
+ tracker_indexer_continue ();
+
g_free (file_id_str);
if (!mime) {
@@ -435,25 +453,31 @@
offset,
max_length);
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
/* FIXME iface is already for "Files". Makes no sense to try Files and Emails */
service_id = tracker_db_file_get_id_as_string (iface, "Files", uri);
if (!service_id) {
+
service_id = tracker_db_file_get_id_as_string (iface, "Emails", uri);
if (!service_id) {
+ tracker_indexer_continue ();
tracker_dbus_request_failed (request_id,
&actual_error,
"Unable to retrieve service ID for uri '%s'",
uri);
dbus_g_method_return_error (context, actual_error);
g_error_free (actual_error);
- return;
+ return;
}
}
+ tracker_indexer_continue ();
+
offset_str = tracker_int_to_string (offset);
max_length_str = tracker_int_to_string (max_length);
@@ -522,6 +546,8 @@
text,
max_length);
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
if (uri[0] == G_DIR_SEPARATOR) {
@@ -563,6 +589,7 @@
__PRETTY_FUNCTION__);
dbus_g_method_return_error (context, actual_error);
g_error_free (actual_error);
+ tracker_indexer_continue ();
}
void
@@ -604,6 +631,7 @@
return;
}
+ tracker_indexer_pause ();
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
result_set = tracker_db_files_get_by_service (iface,
@@ -611,6 +639,8 @@
offset,
max_hits);
+ tracker_indexer_continue ();
+
values = tracker_dbus_query_result_to_strv (result_set, 0, NULL);
if (result_set) {
@@ -654,6 +684,7 @@
offset,
max_hits);
+ tracker_indexer_pause ();
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
result_set = tracker_db_files_get_by_mime (iface,
@@ -663,6 +694,8 @@
max_hits,
FALSE);
+ tracker_indexer_continue ();
+
values = tracker_dbus_query_result_to_strv (result_set, 0, NULL);
if (result_set) {
@@ -706,6 +739,7 @@
offset,
max_hits);
+ tracker_indexer_pause ();
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
/* NOTE: The only difference between this function and the
@@ -718,6 +752,8 @@
max_hits,
TRUE);
+ tracker_indexer_continue ();
+
values = tracker_dbus_query_result_to_strv (result_set, 0, NULL);
if (result_set) {
@@ -755,6 +791,7 @@
"uri:'%s'",
uri);
+ tracker_indexer_pause ();
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
if (uri[0] == G_DIR_SEPARATOR) {
@@ -770,6 +807,8 @@
path,
name,
NULL);
+ tracker_indexer_continue ();
+
g_free (path);
g_free (name);
@@ -825,7 +864,6 @@
uri,
g_strv_length (fields));
- iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
/* Get fields for metadata list provided */
for (i = 0; i < g_strv_length (fields); i++) {
@@ -850,9 +888,13 @@
uri_filtered = g_strdup (uri);
}
+ tracker_indexer_pause ();
+ iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
+
/* Get file ID in database */
file_id = tracker_db_file_get_id (iface, uri_filtered);
if (file_id == 0) {
+ tracker_indexer_continue ();
g_free (uri_filtered);
tracker_dbus_request_failed (request_id,
&actual_error,
@@ -922,6 +964,8 @@
result_set = tracker_db_interface_execute_query (iface, NULL, query);
values = tracker_dbus_query_result_to_ptr_array (result_set);
+ tracker_indexer_continue ();
+
if (result_set) {
g_object_unref (result_set);
}
@@ -959,10 +1003,13 @@
text,
g_strv_length (mime_types));
+ tracker_indexer_pause ();
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
result_set = tracker_db_search_text_and_mime (iface, text, mime_types);
+ tracker_indexer_continue ();
+
if (result_set) {
gboolean valid = TRUE;
gchar *prefix, *name;
@@ -1021,10 +1068,13 @@
text,
uri);
+ tracker_indexer_pause ();
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
result_set = tracker_db_search_text_and_location (iface, text, uri);
+ tracker_indexer_continue ();
+
if (result_set) {
gboolean valid = TRUE;
gchar *prefix, *name;
@@ -1087,10 +1137,13 @@
g_strv_length (mime_types),
uri);
+ tracker_indexer_pause ();
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
result_set = tracker_db_search_text_and_mime_and_location (iface, text, mime_types, uri);
+ tracker_indexer_continue ();
+
if (result_set) {
gboolean valid = TRUE;
gchar *prefix, *name;
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 Tue Jul 22 15:58:30 2008
@@ -36,6 +36,10 @@
#include "tracker-indexer.h"
#include "tracker-query-tree.h"
+#include "tracker-indexer-client.h"
+#include "tracker-status.h"
+#include "tracker-indexer-client.h"
+#include "tracker-dbus.h"
/* Size of free block pool of inverted index */
#define MAX_HIT_BUFFER 480000
@@ -660,3 +664,71 @@
return FALSE;
}
+
+
+static guint pause_timeout = 0;
+
+static void
+set_paused_reply (DBusGProxy *proxy, GError *error, gpointer userdata)
+{
+}
+
+static gboolean
+tracker_indexer_pauzed (gpointer user_data)
+{
+ DBusGProxy *proxy = user_data;
+
+ /* Here it doesn't matter, so we don't block like below */
+ org_freedesktop_Tracker_Indexer_set_paused_async (proxy, FALSE,
+ set_paused_reply,
+ NULL);
+
+ return FALSE;
+}
+
+static void
+tracker_indexer_pauze_finished (gpointer user_data)
+{
+ DBusGProxy *proxy = user_data;
+ pause_timeout = 0;
+ g_object_unref (proxy);
+}
+
+void
+tracker_indexer_pause (void)
+{
+ /* If we are not indexing, there's no indexer to pauze ...
+ * Q: what if during this pause an indexer gets started? */
+
+ if (tracker_status_get () != TRACKER_STATUS_INDEXING)
+ return;
+
+ /* If another pause is already active */
+ if (pause_timeout == 0) {
+ DBusGProxy *proxy;
+ GError *error = NULL;
+
+ proxy = tracker_dbus_indexer_get_proxy ();
+
+ /* We want to block until we are sure that we are pauzed */
+ org_freedesktop_Tracker_Indexer_set_paused (proxy, TRUE, &error);
+
+ if (!error) {
+ /* Activate a pause */
+ pause_timeout = g_timeout_add_full (G_PRIORITY_DEFAULT,
+ 10 * 1000 /* 10 seconds */,
+ tracker_indexer_pauzed,
+ g_object_ref (proxy),
+ tracker_indexer_pauze_finished);
+ } else {
+ /* Should we do something useful with error here? */
+ g_error_free (error);
+ }
+ }
+}
+
+void
+tracker_indexer_continue (void)
+{
+ return;
+}
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 Tue Jul 22 15:58:30 2008
@@ -71,6 +71,8 @@
const gchar *word,
GSList *dud_list);
+void tracker_indexer_pause (void);
+void tracker_indexer_continue (void);
G_END_DECLS
Modified: branches/indexer-split/src/trackerd/tracker-keywords.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-keywords.c (original)
+++ branches/indexer-split/src/trackerd/tracker-keywords.c Tue Jul 22 15:58:30 2008
@@ -32,6 +32,7 @@
#include "tracker-keywords.h"
#include "tracker-db.h"
#include "tracker-marshal.h"
+#include "tracker-indexer.h"
#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_KEYWORDS, TrackerKeywordsPriv))
@@ -132,7 +133,6 @@
service_type);
if (!tracker_ontology_is_valid_service_type (service_type)) {
-
tracker_dbus_request_failed (request_id,
&actual_error,
"Service type '%s' is invalid or has not been implemented yet",
@@ -142,6 +142,8 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service_type);
result_set = tracker_db_keywords_get_list (iface, service_type);
values = tracker_dbus_query_result_to_ptr_array (result_set);
@@ -153,6 +155,7 @@
dbus_g_method_return (context, values);
tracker_dbus_results_ptr_array_free (&values);
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
}
@@ -200,10 +203,12 @@
return;
}
-
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service_type);
id = tracker_db_file_get_id_as_string (iface, service_type, uri);
if (!id) {
+ tracker_indexer_continue ();
tracker_dbus_request_failed (request_id,
&actual_error,
"Entity '%s' was not found",
@@ -230,6 +235,7 @@
g_strfreev (values);
}
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
}
@@ -278,9 +284,12 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service_type);
id = tracker_db_file_get_id_as_string (iface, service_type, uri);
if (!id) {
+ tracker_indexer_continue ();
tracker_dbus_request_failed (request_id,
&actual_error,
"Entity '%s' was not found",
@@ -305,6 +314,7 @@
dbus_g_method_return (context);
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
}
@@ -353,9 +363,12 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service_type);
id = tracker_db_file_get_id_as_string (iface, service_type, uri);
if (!id) {
+ tracker_indexer_continue ();
tracker_dbus_request_failed (request_id,
&actual_error,
"Entity '%s' was not found",
@@ -376,6 +389,7 @@
dbus_g_method_return (context);
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
}
@@ -421,9 +435,12 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service_type);
id = tracker_db_file_get_id_as_string (iface, service_type, uri);
if (!id) {
+ tracker_indexer_continue ();
tracker_dbus_request_failed (request_id,
&actual_error,
"Entity '%s' was not found",
@@ -442,6 +459,7 @@
dbus_g_method_return (context);
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
}
@@ -492,6 +510,8 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service_type);
/* Sanity check values */
@@ -561,5 +581,6 @@
g_strfreev (values);
}
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
}
Modified: branches/indexer-split/src/trackerd/tracker-metadata.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-metadata.c (original)
+++ branches/indexer-split/src/trackerd/tracker-metadata.c Tue Jul 22 15:58:30 2008
@@ -36,6 +36,7 @@
#include "tracker-metadata.h"
#include "tracker-db.h"
#include "tracker-marshal.h"
+#include "tracker-indexer.h"
G_DEFINE_TYPE(TrackerMetadata, tracker_metadata, G_TYPE_OBJECT)
@@ -100,10 +101,13 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service_type);
service_id = tracker_db_file_get_id_as_string (iface, service_type, uri);
if (!service_id) {
+ tracker_indexer_continue ();
tracker_dbus_request_failed (request_id,
&actual_error,
"Service URI '%s' not found",
@@ -118,6 +122,7 @@
*/
service_result = tracker_db_service_get_by_entity (iface, service_id);
if (!service_result) {
+ tracker_indexer_continue ();
g_free (service_id);
tracker_dbus_request_failed (request_id,
&actual_error,
@@ -209,6 +214,7 @@
dbus_g_method_return (context, values);
g_strfreev (values);
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
}
@@ -251,10 +257,13 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service_type);
service_id = tracker_db_file_get_id_as_string (iface, service_type, uri);
if (!service_id) {
+ tracker_indexer_continue ();
tracker_dbus_request_failed (request_id,
&actual_error,
"Service URI '%s' not found",
@@ -273,7 +282,7 @@
if (!key || strlen (key) < 3 || strchr (key, ':') == NULL) {
g_free (service_id);
-
+ tracker_indexer_continue ();
tracker_dbus_request_failed (request_id,
&actual_error,
"Metadata type name '%s' is invalid, all names must be registered",
@@ -297,6 +306,7 @@
dbus_g_method_return (context);
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
}
@@ -396,7 +406,6 @@
}
tracker_dbus_request_success (request_id);
-
}
void
@@ -407,7 +416,7 @@
guint request_id;
gchar **values = NULL;
GSList *registered = NULL;
-
+
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_request_new (request_id,
Modified: branches/indexer-split/src/trackerd/tracker-search.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-search.c (original)
+++ branches/indexer-split/src/trackerd/tracker-search.c Tue Jul 22 15:58:30 2008
@@ -663,6 +663,8 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service);
result_set = tracker_db_search_text (iface,
@@ -712,6 +714,7 @@
g_strfreev (strv);
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
return;
@@ -769,6 +772,8 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service);
result_set = tracker_db_search_text (iface,
@@ -789,6 +794,7 @@
g_object_unref (result_set);
}
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
return;
@@ -843,10 +849,13 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service);
service_id = tracker_db_file_get_id_as_string (iface, service, id);
if (!service_id) {
+ tracker_indexer_continue ();
g_set_error (&actual_error,
TRACKER_DBUS_ERROR,
0,
@@ -857,8 +866,6 @@
return;
}
- iface = tracker_db_manager_get_db_interface_by_service (service);
-
result_set = tracker_db_exec_proc (iface,
"GetAllContents",
service_id,
@@ -896,6 +903,7 @@
g_free (snippet);
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
return;
@@ -1004,6 +1012,8 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service);
/* FIXME: This function no longer exists, it was returning
@@ -1029,6 +1039,7 @@
g_object_unref (result_set);
}
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
return;
@@ -1082,6 +1093,8 @@
return;
}
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service);
/* FIXME: This function no longer exists, it was returning
@@ -1105,6 +1118,7 @@
g_object_unref (result_set);
}
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
return;
@@ -1165,6 +1179,8 @@
result_set = NULL;
+ tracker_indexer_pause ();
+
iface = tracker_db_manager_get_db_interface_by_service (service);
if (query_condition) {
@@ -1191,6 +1207,7 @@
query_error);
if (query_error) {
+ tracker_indexer_continue ();
g_set_error (&actual_error,
TRACKER_DBUS_ERROR,
0,
@@ -1200,6 +1217,7 @@
g_error_free (query_error);
return;
} else if (!query_translated) {
+ tracker_indexer_continue ();
g_set_error (&actual_error,
TRACKER_DBUS_ERROR,
0,
@@ -1239,6 +1257,7 @@
g_object_unref (result_set);
}
+ tracker_indexer_continue ();
tracker_dbus_request_success (request_id);
return;
@@ -1287,5 +1306,7 @@
g_free (value);
}
+ tracker_dbus_request_success (request_id);
+
return;
}
Modified: branches/indexer-split/src/trackerd/tracker-utils.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-utils.c (original)
+++ branches/indexer-split/src/trackerd/tracker-utils.c Tue Jul 22 15:58:30 2008
@@ -56,3 +56,4 @@
g_hash_table_steal (meta_table, key);
g_hash_table_insert (meta_table, (gchar*) key, list);
}
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]