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



Author: ifrade
Date: Thu Jul  3 14:54:54 2008
New Revision: 1848
URL: http://svn.gnome.org/viewvc/tracker?rev=1848&view=rev

Log:
Name in nfs lock file. Revamped code to handle multiple instances

Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/libtracker-common/tracker-nfs-lock.c
   branches/indexer-split/src/trackerd/tracker-main.c

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	Thu Jul  3 14:54:54 2008
@@ -83,9 +83,9 @@
                 return FALSE;
         }
  
-	filename = g_strdup_printf ("%s_%d.lock", 
+	filename = g_strdup_printf ("%s_%s.lock", 
                                     tmp_dir, 
-                                    (guint32) getpid ());
+                                    g_get_user_name ());
 
 	for (attempt = 0; attempt < 10000; ++attempt) {
 		/* Delete existing lock file if older than 5 mins */
@@ -139,9 +139,9 @@
                 return;
         }
  
-	filename = g_strdup_printf ("%s_%d.lock", 
+	filename = g_strdup_printf ("%s_%s.lock", 
 				    tmp_dir, 
-				    (guint32) getpid ());
+				    g_get_user_name ());
 	
 	g_unlink (filename);
 	g_unlink (lock_filename);

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	Thu Jul  3 14:54:54 2008
@@ -194,6 +194,13 @@
 	{ NULL }
 };
 
+typedef enum {
+	TRACKER_RUNNING_NON_ALLOWED,
+	TRACKER_RUNNING_READ_ONLY,
+	TRACKER_RUNNING_MAIN_INSTANCE
+} TrackerRunningLevel;
+
+
 static gchar *
 get_lock_file (void) 
 {
@@ -202,25 +209,9 @@
 	
 	filename = 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_filename = g_build_filename (sys_tmp_dir, 
-						  filename, 
-						  NULL);
-	} else {
-		/* Place lock file in home dir to prevent multiple 
-		 * sessions on NFS (as standard locking might be 
-		 * broken on NFS) 
-		 */
-		lock_filename = g_build_filename (g_get_user_data_dir (), 
-						  "tracker", 
-						  filename, 
-						  NULL);
-	}
-
+	lock_filename = g_build_filename (sys_tmp_dir, 
+					  filename, 
+					  NULL);
 	g_free (filename);
 
 	return lock_filename;
@@ -520,14 +511,24 @@
 	return TRUE;
 }
 
-static gboolean
-check_multiple_instances (void)
+static TrackerRunningLevel
+check_runtime_level (TrackerConfig *config)
 {
-	gchar    *lock_file;
-	gint      lfp;
-	gboolean  multiple = FALSE;
+	gchar               *lock_file;
+	gint                 lfp;
+	TrackerRunningLevel  runlevel = TRACKER_RUNNING_MAIN_INSTANCE;
+	gboolean             use_nfs;
+
 
-	g_message ("Checking instances running");
+	if (!tracker_config_get_enable_indexing (config)) {
+		g_message ("Read-only mode set in configuration options");
+		return TRACKER_RUNNING_READ_ONLY;
+	}
+
+
+	use_nfs = tracker_config_get_nfs_locking (config);
+
+	g_message ("Checking instances running %s", (use_nfs ? "(using NFS)" : ""));
 
 	lock_file = get_lock_file ();
 
@@ -535,16 +536,23 @@
 
 	if (lfp < 0) {
                 g_error ("Cannot open or create lockfile:'%s'", lock_file);
+		return TRACKER_RUNNING_NON_ALLOWED;
 	}
 
 	if (lockf (lfp, F_TLOCK, 0) < 0) {
+
 		g_warning ("Tracker daemon is already running - attempting to run in readonly mode");
-		multiple = TRUE;
+
+		if (use_nfs) {
+			runlevel = TRACKER_RUNNING_READ_ONLY;
+		} else {
+			runlevel = TRACKER_RUNNING_NON_ALLOWED;
+		}
 	}
 
 	g_free (lock_file);
 
-	return multiple;
+	return runlevel;
 }
 
 
@@ -769,7 +777,23 @@
 
 	umask (077);
 
-	tracker->readonly = check_multiple_instances ();
+	/*
+	 * Check instances running
+	 */
+	switch (check_runtime_level (tracker->config)) {
+
+	case TRACKER_RUNNING_NON_ALLOWED: 
+		return EXIT_FAILURE;
+
+	case TRACKER_RUNNING_READ_ONLY:     
+		tracker->readonly = TRUE;
+		break;
+
+	case TRACKER_RUNNING_MAIN_INSTANCE: 
+		tracker->readonly = FALSE;
+		break;
+	}
+
 
 	if (!initialize_databases ()) {
 		return EXIT_FAILURE;
@@ -791,8 +815,7 @@
 
 	g_message ("Waiting for DBus requests...");
 
-	if (!tracker->readonly && 
-	    tracker_config_get_enable_indexing (tracker->config)) {
+	if (!tracker->readonly) {
 		gint seconds;
 		
 		seconds = tracker_config_get_initial_sleep (tracker->config);



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