tracker r1383 - in branches/indexer-split: . src/libtracker-common src/trackerd
- From: ifrade svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1383 - in branches/indexer-split: . src/libtracker-common src/trackerd
- Date: Fri, 9 May 2008 08:35:33 +0100 (BST)
Author: ifrade
Date: Fri May 9 07:35:32 2008
New Revision: 1383
URL: http://svn.gnome.org/viewvc/tracker?rev=1383&view=rev
Log:
NFS locking selected from config file
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/src/libtracker-common/tracker-config.c
branches/indexer-split/src/libtracker-common/tracker-config.h
branches/indexer-split/src/libtracker-common/tracker-nfs-lock.c
branches/indexer-split/src/libtracker-common/tracker-nfs-lock.h
branches/indexer-split/src/trackerd/tracker-db-sqlite.c
branches/indexer-split/src/trackerd/tracker-main.c
branches/indexer-split/src/trackerd/tracker-main.h
Modified: branches/indexer-split/src/libtracker-common/tracker-config.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-config.c (original)
+++ branches/indexer-split/src/libtracker-common/tracker-config.c Fri May 9 07:35:32 2008
@@ -37,7 +37,7 @@
#define KEY_VERBOSITY "Verbosity"
#define KEY_INITIAL_SLEEP "InitialSleep"
#define KEY_LOW_MEMORY_MODE "LowMemoryMode"
-
+#define KEY_NFS_LOCKING "NFSLocking"
#define GROUP_WATCHES "Watches"
#define KEY_WATCH_DIRECTORY_ROOTS "WatchDirectoryRoots"
#define KEY_CRAWL_DIRECTORY_ROOTS "CrawlDirectory"
@@ -82,6 +82,7 @@
#define DEFAULT_VERBOSITY 0
#define DEFAULT_INITIAL_SLEEP 45 /* 0->1000 */
#define DEFAULT_LOW_MEMORY_MODE TRUE
+#define DEFAULT_NFS_LOCKING FALSE
#define DEFAULT_ENABLE_WATCHES TRUE
#define DEFAULT_THROTTLE 0 /* 0->20 */
#define DEFAULT_ENABLE_INDEXING TRUE
@@ -116,6 +117,7 @@
gint verbosity;
gint initial_sleep;
gboolean low_memory_mode;
+ gboolean nfs_locking;
/* Watches */
GSList *watch_directory_roots;
@@ -176,6 +178,7 @@
PROP_VERBOSITY,
PROP_INITIAL_SLEEP,
PROP_LOW_MEMORY_MODE,
+ PROP_NFS_LOCKING,
/* Watches */
PROP_WATCH_DIRECTORY_ROOTS,
@@ -258,6 +261,14 @@
"expense of indexing speed",
DEFAULT_LOW_MEMORY_MODE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_NFS_LOCKING,
+ g_param_spec_boolean ("nfs-locking",
+ "Use NFS friendly location for lock file",
+ "In NFS filesystems is not safe to have "
+ "the lock file in the home directory",
+ DEFAULT_NFS_LOCKING,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/* Watches */
g_object_class_install_property (object_class,
@@ -563,6 +574,9 @@
case PROP_LOW_MEMORY_MODE:
g_value_set_boolean (value, priv->low_memory_mode);
break;
+ case PROP_NFS_LOCKING:
+ g_value_set_boolean (value, priv->nfs_locking);
+ break;
/* Watches */
case PROP_WATCH_DIRECTORY_ROOTS:
@@ -694,6 +708,10 @@
tracker_config_set_low_memory_mode (TRACKER_CONFIG (object),
g_value_get_boolean (value));
break;
+ case PROP_NFS_LOCKING:
+ tracker_config_set_nfs_locking (TRACKER_CONFIG (object),
+ g_value_get_boolean (value));
+ break;
/* Watches */
case PROP_WATCH_DIRECTORY_ROOTS: /* Not writable */
@@ -984,6 +1002,11 @@
g_key_file_set_comment (key_file, GROUP_GENERAL, KEY_LOW_MEMORY_MODE,
" Minimizes memory use at the expense of indexing speed",
NULL);
+ g_key_file_set_boolean (key_file, GROUP_GENERAL, KEY_NFS_LOCKING, DEFAULT_NFS_LOCKING);
+ g_key_file_set_comment (key_file, GROUP_GENERAL, KEY_NFS_LOCKING,
+ " Set to TRUE when the home directory is in a NFS filesystem",
+ NULL);
+
/* Watches */
g_key_file_set_string_list (key_file, GROUP_WATCHES, KEY_WATCH_DIRECTORY_ROOTS,
@@ -1334,6 +1357,7 @@
config_load_int (config, "verbosity", key_file, GROUP_GENERAL, KEY_VERBOSITY);
config_load_int (config, "initial-sleep", key_file, GROUP_GENERAL, KEY_INITIAL_SLEEP);
config_load_boolean (config, "low-memory-mode", key_file, GROUP_GENERAL, KEY_LOW_MEMORY_MODE);
+ config_load_boolean (config, "nfs-locking", key_file, GROUP_GENERAL, KEY_NFS_LOCKING);
/* Watches */
config_load_string_list (config, "watch-directory-roots", key_file, GROUP_WATCHES, KEY_WATCH_DIRECTORY_ROOTS);
@@ -1449,6 +1473,19 @@
return priv->low_memory_mode;
}
+gboolean
+tracker_config_get_nfs_locking (TrackerConfig *config)
+{
+ TrackerConfigPriv *priv;
+
+ g_return_val_if_fail (TRACKER_IS_CONFIG (config), DEFAULT_NFS_LOCKING);
+
+ priv = GET_PRIV (config);
+
+ return priv->nfs_locking;
+}
+
+
GSList *
tracker_config_get_watch_directory_roots (TrackerConfig *config)
{
@@ -1860,6 +1897,21 @@
}
void
+tracker_config_set_nfs_locking (TrackerConfig *config,
+ gboolean value)
+{
+ TrackerConfigPriv *priv;
+
+ g_return_if_fail (TRACKER_IS_CONFIG (config));
+
+ priv = GET_PRIV (config);
+
+ priv->nfs_locking = value;
+ g_object_notify (G_OBJECT (config), "nfs-locking");
+}
+
+
+void
tracker_config_set_enable_watches (TrackerConfig *config,
gboolean value)
{
Modified: branches/indexer-split/src/libtracker-common/tracker-config.h
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-config.h (original)
+++ branches/indexer-split/src/libtracker-common/tracker-config.h Fri May 9 07:35:32 2008
@@ -50,10 +50,10 @@
void tracker_config_load_file (void);
TrackerConfig *tracker_config_new (void);
-
gint tracker_config_get_verbosity (TrackerConfig *config);
gint tracker_config_get_initial_sleep (TrackerConfig *config);
gboolean tracker_config_get_low_memory_mode (TrackerConfig *config);
+gboolean tracker_config_get_nfs_locking (TrackerConfig *config);
GSList * tracker_config_get_watch_directory_roots (TrackerConfig *config);
GSList * tracker_config_get_crawl_directory_roots (TrackerConfig *config);
GSList * tracker_config_get_no_watch_directory_roots (TrackerConfig *config);
@@ -72,7 +72,7 @@
gboolean tracker_config_get_disable_indexing_on_battery (TrackerConfig *config);
gboolean tracker_config_get_disable_indexing_on_battery_init (TrackerConfig *config);
gint tracker_config_get_low_disk_space_limit (TrackerConfig *config);
-gboolean tracker_config_get_index_removable_devices (TrackerConfig *config);
+gboolean tracker_config_get_index_removable_devices (TrackerConfig *config);
gboolean tracker_config_get_index_mounted_directories (TrackerConfig *config);
const gchar * tracker_config_get_email_client (TrackerConfig *config);
gint tracker_config_get_max_text_to_index (TrackerConfig *config);
@@ -90,6 +90,8 @@
gint value);
void tracker_config_set_low_memory_mode (TrackerConfig *config,
gboolean value);
+void tracker_config_set_nfs_locking (TrackerConfig *config,
+ gboolean value);
void tracker_config_set_enable_watches (TrackerConfig *config,
gboolean value);
void tracker_config_set_throttle (TrackerConfig *config,
@@ -142,6 +144,7 @@
gint value);
void tracker_config_set_thread_stack_size (TrackerConfig *config,
gint value);
+
/* Directory root APIs*/
void tracker_config_add_watch_directory_roots (TrackerConfig *config,
gchar * const *roots);
@@ -150,6 +153,7 @@
void tracker_config_add_no_watch_directory_roots (TrackerConfig *config,
gchar * const *roots);
+
G_END_DECLS
#endif /* __LIBTRACKER_COMMON_CONFIG_H__ */
Modified: branches/indexer-split/src/libtracker-common/tracker-nfs-lock.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-nfs-lock.c (original)
+++ branches/indexer-split/src/libtracker-common/tracker-nfs-lock.c Fri May 9 07:35:32 2008
@@ -148,12 +148,14 @@
}
void
-tracker_nfs_lock_init (const gchar *root_dir)
+tracker_nfs_lock_init (const gchar *root_dir, gboolean nfs)
{
if (is_initialized ()) {
return;
}
+ use_nfs_safe_locking = nfs;
+
if (lock_file == NULL) {
lock_file = g_build_filename (root_dir, "tracker.lock", NULL);
}
Modified: branches/indexer-split/src/libtracker-common/tracker-nfs-lock.h
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-nfs-lock.h (original)
+++ branches/indexer-split/src/libtracker-common/tracker-nfs-lock.h Fri May 9 07:35:32 2008
@@ -26,7 +26,7 @@
G_BEGIN_DECLS
-void tracker_nfs_lock_init (const gchar *root_dir);
+void tracker_nfs_lock_init (const gchar *root_dir, gboolean nfs);
gboolean tracker_nfs_lock_obtain (void);
void tracker_nfs_lock_release (void);
void tracker_nfs_lock_term (void);
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 07:35:32 2008
@@ -606,9 +606,10 @@
gboolean db_exists;
char *dbname;
- if (!pool)
+ if (!pool) {
pool = g_thread_pool_new (tracker_db_interface_sqlite_process_query,
- NULL, 1, TRUE, NULL);
+ NULL, 1, TRUE, NULL);
+ }
dbname = g_build_filename (dir, name, NULL);
db_exists = g_file_test (dbname, G_FILE_TEST_IS_REGULAR);
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 07:35:32 2008
@@ -139,6 +139,34 @@
static gint verbosity;
static gint initial_sleep = -1;
+static gchar *
+get_lock_file ()
+{
+ gchar *lock_file, *str;
+
+ str = g_strconcat (g_get_user_name (), "_tracker_lock", NULL);
+
+ /* check if setup for NFS usage (and enable atomic NFS safe locking) */
+ if (tracker_config_get_nfs_locking (tracker->config)) {
+
+ /* place lock file in tmp dir to allow multiple
+ * sessions on NFS
+ */
+ lock_file = g_build_filename (tracker->sys_tmp_root_dir, str, NULL);
+
+ } else {
+ /* place lock file in home dir to prevent multiple
+ * sessions on NFS (as standard locking might be
+ * broken on NFS)
+ */
+ lock_file = g_build_filename (tracker->root_dir, str, NULL);
+ }
+
+ g_free (str);
+ return lock_file;
+}
+
+
static GOptionEntry entries[] = {
{ "exclude-dir", 'e', 0,
G_OPTION_ARG_STRING_ARRAY, &no_watch_dirs,
@@ -191,6 +219,13 @@
{ NULL }
};
+gboolean
+tracker_die (void)
+{
+ tracker_error ("trackerd has failed to exit on time - terminating...");
+ exit (EXIT_FAILURE);
+}
+
static void
free_file_change_queue (gpointer data, gpointer user_data)
{
@@ -501,8 +536,6 @@
tracker->pause_battery = FALSE;
tracker->pause_io = FALSE;
- tracker->use_nfs_safe_locking = FALSE;
-
tracker->watch_limit = 0;
tracker->index_count = 0;
@@ -681,6 +714,35 @@
g_mutex_unlock (tracker->files_check_mutex);
}
+
+static gboolean
+check_multiple_instances ()
+{
+ gint lfp;
+ gboolean multiple = FALSE;
+ gchar *lock_file;
+
+ tracker_log ("Checking instances running");
+
+ lock_file = get_lock_file ();
+
+ lfp = g_open (lock_file, O_RDWR|O_CREAT, 0640);
+
+ if (lfp < 0) {
+ g_free (lock_file);
+ g_error ("Cannot open or create lockfile %s - exiting", lock_file);
+ }
+
+ if (lockf (lfp, F_TLOCK, 0) < 0) {
+ g_warning ("Tracker daemon is already running - attempting to run in readonly mode");
+ multiple = TRUE;
+ }
+ g_free (lock_file);
+
+ return multiple;
+}
+
+
static void
shutdown_indexer (void)
{
@@ -724,8 +786,6 @@
GOptionContext *context = NULL;
GError *error = NULL;
GSList *l;
- gint lfp;
- gchar *lock_file, *str, *lock_str;
gchar *example;
gboolean need_index = FALSE;
@@ -806,7 +866,8 @@
tracker_log ("Starting log");
/* Set up locking */
- tracker_nfs_lock_init (tracker->root_dir);
+ tracker_nfs_lock_init (tracker->root_dir,
+ tracker_config_get_nfs_locking (tracker->config));
/* Set up xesam */
tracker_xesam_init ();
@@ -819,44 +880,9 @@
need_index = TRUE;
}
- str = g_strconcat (g_get_user_name (), "_tracker_lock", NULL);
-
- /* Check if setup for NFS usage (and enable atomic NFS safe locking) */
- lock_str = NULL;
-
- if (lock_str != NULL) {
- tracker->use_nfs_safe_locking = (strcmp (str, "1") == 0);
-
- /* Place lock file in tmp dir to allow multiple
- * sessions on NFS.
- */
- lock_file = g_build_filename (tracker->sys_tmp_root_dir, str, NULL);
- g_free (lock_str);
- } else {
- tracker->use_nfs_safe_locking = FALSE;
-
- /* Place lock file in home dir to prevent multiple
- * sessions on NFS (as standard locking might be
- * broken on NFS)
- */
- lock_file = g_build_filename (tracker->root_dir, str, NULL);
- }
-
- g_free (str);
-
- /* Prevent muliple instances */
- lfp = g_open (lock_file, O_RDWR | O_CREAT, 0640);
- g_free (lock_file);
-
- if (lfp < 0) {
- g_warning ("Cannot open or create lockfile - exiting");
- exit (1);
- }
+ umask (077);
- if (lockf (lfp, F_TLOCK, 0) <0) {
- g_warning ("Tracker daemon is already running - attempting to run in readonly mode");
- tracker->readonly = TRUE;
- }
+ tracker->readonly = check_multiple_instances ();
/* Set child's niceness to 19 */
errno = 0;
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 07:35:32 2008
@@ -119,9 +119,6 @@
gint email_service_min;
gint email_service_max;
- /* NFS options */
- gboolean use_nfs_safe_locking;
-
/* Queue for recorad file changes */
GQueue *file_change_queue;
gboolean black_list_timer_active;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]