tracker r1383 - in branches/indexer-split: . src/libtracker-common src/trackerd



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]