tracker r1848 - in branches/indexer-split: . src/libtracker-common src/trackerd
- From: ifrade svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1848 - in branches/indexer-split: . src/libtracker-common src/trackerd
- Date: Thu, 3 Jul 2008 14:54:54 +0000 (UTC)
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]