diff --git a/.gitignore b/.gitignore index 0414a0f..1a9f505 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,4 @@ /tracker-miners-3.7.beta.tar.xz /tracker-miners-3.7.rc.tar.xz /tracker-miners-3.7.0.tar.xz +/tracker-miners-3.7.1.tar.xz diff --git a/sources b/sources index 115aab8..f777dba 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (tracker-miners-3.7.0.tar.xz) = ea109618abb5266f28a697e75b5b074d10f698de2f09c32d4b368bd1614809f46e6a2853772c3ab441ee7575267531d3ffaaf73b95d239b874de03c0d4324a28 +SHA512 (tracker-miners-3.7.1.tar.xz) = a093ed25f81f71ca728c8c7438fd25c7bc058ee30a22383c4e0f6466e377ce3e1da2d3068e0dcb27927081cfbb2fee2e1f4fa656c4a64e53813986eed73c2428 diff --git a/tracker-miners-3.7.0-db-corruption.patch b/tracker-miners-3.7.0-db-corruption.patch deleted file mode 100644 index b4e89bb..0000000 --- a/tracker-miners-3.7.0-db-corruption.patch +++ /dev/null @@ -1,228 +0,0 @@ -From 084eb656da162d051a3a02bfa82d45908c2919f2 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Fri, 15 Mar 2024 16:53:32 +0100 -Subject: [PATCH 1/3] tracker-miner-fs: Handle corruption on startup - -This situation may happen after a database got corrupted, and -the attempts to repair it failed. The tracker-miner-fs-3 database -is simply a cache, so it is safe to move the corrupted database -aside (for possible later forensics) and restart from scratch. - -Closes: https://gitlab.gnome.org/GNOME/tracker-miners/-/issues/324 ---- - src/miners/fs/tracker-main.c | 35 +++++++++++++++++++++++++++++++---- - 1 file changed, 31 insertions(+), 4 deletions(-) - -diff --git a/src/miners/fs/tracker-main.c b/src/miners/fs/tracker-main.c -index d84fe9237..02097f1c8 100644 ---- a/src/miners/fs/tracker-main.c -+++ b/src/miners/fs/tracker-main.c -@@ -732,18 +732,45 @@ setup_connection (TrackerDomainOntology *domain, - GError **error) - { - TrackerSparqlConnection *sparql_conn; -- GFile *store = NULL, *ontology; -+ g_autoptr (GFile) store = NULL, ontology = NULL; -+ GError *internal_error = NULL; - - if (!dry_run) - store = get_cache_dir (domain); - ontology = tracker_sparql_get_ontology_nepomuk (); -+ - sparql_conn = tracker_sparql_connection_new (get_fts_connection_flags (), - store, - ontology, - NULL, -- error); -- g_clear_object (&store); -- g_clear_object (&ontology); -+ &internal_error); -+ -+ if (store && g_error_matches (internal_error, TRACKER_SPARQL_ERROR, TRACKER_SPARQL_ERROR_CORRUPT)) { -+ g_autoptr (GFile) backup_location = NULL, parent = NULL; -+ g_autofree gchar *filename = NULL; -+ -+ /* Move the database directory away, for possible forensics */ -+ parent = g_file_get_parent (store); -+ filename = g_strdup_printf ("files.%" G_GINT64_FORMAT, g_get_monotonic_time ()); -+ backup_location = g_file_get_child (parent, filename); -+ -+ if (g_file_move (store, backup_location, -+ G_FILE_COPY_NONE, -+ NULL, NULL, NULL, NULL)) { -+ g_autofree gchar *path = NULL; -+ -+ path = g_file_get_path (backup_location); -+ g_message ("Database is corrupt, it is now backed up at %s. Reindexing from scratch", path); -+ sparql_conn = tracker_sparql_connection_new (get_fts_connection_flags (), -+ store, -+ ontology, -+ NULL, -+ &internal_error); -+ } -+ } -+ -+ if (internal_error) -+ g_propagate_error (error, internal_error); - - return sparql_conn; - } --- -GitLab - - -From ece1926692115e17271af0d0ff084f2a96a34f0a Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Fri, 15 Mar 2024 17:03:28 +0100 -Subject: [PATCH 2/3] tracker-miner-fs: Bail out early on corruption detection - -If some of our updates result in a corruption error, there's not -really good prospects for any pending work. Raise a signal in this -case so that the miner will exit uncleanly, and handle repair attempts -in the next run. ---- - src/miners/fs/tracker-main.c | 16 +++++++++++++--- - src/miners/fs/tracker-miner-fs.c | 12 ++++++++++++ - 2 files changed, 25 insertions(+), 3 deletions(-) - -diff --git a/src/miners/fs/tracker-main.c b/src/miners/fs/tracker-main.c -index 02097f1c8..29e8a9647 100644 ---- a/src/miners/fs/tracker-main.c -+++ b/src/miners/fs/tracker-main.c -@@ -77,6 +77,7 @@ static gboolean dry_run = FALSE; - - static gboolean slept = TRUE; - static gboolean graphs_ready = FALSE; -+static gboolean corrupted = FALSE; - - static GOptionEntry entries[] = { - { "initial-sleep", 's', 0, -@@ -438,6 +439,14 @@ miner_status_cb (TrackerMinerFS *fs) - stop_cleanup_timeout (); - } - -+static void -+miner_corrupt_cb (TrackerMinerFS *fs) -+{ -+ g_warning ("Database corruption detected, bailing out"); -+ corrupted = TRUE; -+ g_main_loop_quit (main_loop); -+} -+ - static void - graphs_created_cb (GObject *source, - GAsyncResult *res, -@@ -995,6 +1004,9 @@ main (gint argc, gchar *argv[]) - g_signal_connect (miner_files, "notify::status", - G_CALLBACK (miner_status_cb), - NULL); -+ g_signal_connect (miner_files, "corrupt", -+ G_CALLBACK (miner_corrupt_cb), -+ NULL); - - #if GLIB_CHECK_VERSION (2, 64, 0) - memory_monitor = g_memory_monitor_dup_default (); -@@ -1050,7 +1062,5 @@ main (gint argc, gchar *argv[]) - g_object_unref (memory_monitor); - #endif - -- g_print ("\nOK\n\n"); -- -- return EXIT_SUCCESS; -+ return corrupted ? EXIT_FAILURE : EXIT_SUCCESS; - } -diff --git a/src/miners/fs/tracker-miner-fs.c b/src/miners/fs/tracker-miner-fs.c -index 7666a080c..0ec2101c3 100644 ---- a/src/miners/fs/tracker-miner-fs.c -+++ b/src/miners/fs/tracker-miner-fs.c -@@ -146,6 +146,7 @@ typedef enum { - enum { - FINISHED, - FINISHED_ROOT, -+ CORRUPT, - LAST_SIGNAL - }; - -@@ -342,6 +343,12 @@ tracker_miner_fs_class_init (TrackerMinerFSClass *klass) - 1, - G_TYPE_FILE); - -+ signals[CORRUPT] = g_signal_new ("corrupt", -+ G_TYPE_FROM_CLASS (object_class), -+ G_SIGNAL_RUN_LAST, 0, -+ NULL, NULL, NULL, -+ G_TYPE_NONE, 0); -+ - quark_last_queue_event = g_quark_from_static_string ("tracker-last-queue-event"); - } - -@@ -848,6 +855,11 @@ sparql_buffer_flush_cb (GObject *object, - - if (error) { - g_warning ("Could not execute sparql: %s", error->message); -+ -+ if (g_error_matches (error, TRACKER_SPARQL_ERROR, TRACKER_SPARQL_ERROR_CORRUPT)) { -+ g_signal_emit (fs, signals[CORRUPT], 0); -+ return; -+ } - } - - for (i = 0; i < tasks->len; i++) { --- -GitLab - - -From bb45b8bf2b22b89112ff7f0c201996e7b4a71ea6 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Fri, 22 Mar 2024 13:23:29 +0100 -Subject: [PATCH 3/3] reference: Document behavior when finding corrupted - databases - ---- - docs/mkdocs.yml | 1 + - docs/reference/corruption.md | 21 +++++++++++++++++++++ - 2 files changed, 22 insertions(+) - create mode 100644 docs/reference/corruption.md - -diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml -index e1c1c0ef4..b3c12a441 100644 ---- a/docs/mkdocs.yml -+++ b/docs/mkdocs.yml -@@ -11,6 +11,7 @@ nav: - - SPARQL Endpoint: 'endpoint.md' - - Miscellaneous D-Bus API: 'dbus-api.md' - - Command Line: 'commandline.md' -+ - Handling of corrupted databases: 'corruption.md' - - theme: - name: readthedocs -diff --git a/docs/reference/corruption.md b/docs/reference/corruption.md -new file mode 100644 -index 000000000..02db36492 ---- /dev/null -+++ b/docs/reference/corruption.md -@@ -0,0 +1,21 @@ -+# Handling of corrupted databases -+ -+The database offered by Tracker Miners is a fast access cache of filesystem -+data. In the unlikely event of major database corruption (e.g. filesystem-level -+corruption), this data can be disposed and reproduceably rebuilt with no major -+loss other than the CPU and I/O time spent. -+ -+Still, the preferred action is to attempt database repairs first. The expected -+order of events is: -+ -+1. `tracker-miner-fs-3` receives an unexpected `TRACKER_SPARQL_ERROR_CORRUPTED` -+ error from the Tracker SPARQL library. -+2. The `tracker-miner-fs-3` will handle this error by exiting uncleanly. -+3. The process gets restarted. -+4. When the database is re-opened, the Tracker SPARQL library will detect the -+ prior corruption, and run repair attempts. See the -+ [related library documentation](https://gnome.pages.gitlab.gnome.org/tracker/ctor.SparqlConnection.new.html) -+ for more details. -+5. If the repair attempt failed, the corrupted database file(s) will be moved -+ aside at `~/.cache/tracker3/files.$TIMESTAMP`, and the filesystem data will -+ be reindexed from scratch. --- -GitLab - diff --git a/tracker-miners-3.7.0-syscall-allow.patch b/tracker-miners-3.7.0-syscall-allow.patch deleted file mode 100644 index a9f73b5..0000000 --- a/tracker-miners-3.7.0-syscall-allow.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 75e848ba920e82739db225bedf715dc8a2ccc838 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Mon, 25 Mar 2024 00:21:09 +0100 -Subject: [PATCH] libtracker-miners-common: Allow sched_get_priority_max/min - syscalls - -This is done somewhere in the libraries we depend on, and seems innocuous -to allow. - -Closes: https://gitlab.gnome.org/GNOME/tracker-miners/-/issues/316 ---- - src/libtracker-miners-common/tracker-seccomp.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/libtracker-miners-common/tracker-seccomp.c b/src/libtracker-miners-common/tracker-seccomp.c -index 9432ed6f3..3537c6d55 100644 ---- a/src/libtracker-miners-common/tracker-seccomp.c -+++ b/src/libtracker-miners-common/tracker-seccomp.c -@@ -208,6 +208,8 @@ tracker_seccomp_init (void) - ALLOW_RULE (rt_sigreturn); - ALLOW_RULE (sched_yield); - ALLOW_RULE (sched_getaffinity); -+ ALLOW_RULE (sched_get_priority_max); -+ ALLOW_RULE (sched_get_priority_min); - ALLOW_RULE (sched_setattr); - ALLOW_RULE (nanosleep); - ALLOW_RULE (clock_nanosleep); --- -GitLab - diff --git a/tracker-miners.spec b/tracker-miners.spec index 4cdefe3..a54b4a3 100644 --- a/tracker-miners.spec +++ b/tracker-miners.spec @@ -32,8 +32,8 @@ %global tarball_version %%(echo %{version} | tr '~' '.') Name: tracker-miners -Version: 3.7.0 -Release: 2%{?dist} +Version: 3.7.1 +Release: 1%{?dist} Summary: Tracker miners and metadata extractors # libtracker-extract and libtracker-miner libraries are LGPLv2+; the miners are a mix of GPLv2+ and LGPLv2+ code @@ -41,12 +41,6 @@ License: GPL-2.0-or-later AND LGPL-2.1-or-later URL: https://gnome.pages.gitlab.gnome.org/tracker/ Source0: https://download.gnome.org/sources/%{name}/3.7/%{name}-%{tarball_version}.tar.xz Source1: flatpak-fixup.sh -# https://gitlab.gnome.org/GNOME/tracker-miners/-/issues/324 -# https://gitlab.gnome.org/GNOME/tracker-miners/-/merge_requests/525 -Patch: tracker-miners-3.7.0-db-corruption.patch -# https://gitlab.gnome.org/GNOME/tracker-miners/-/issues/316 -# https://gitlab.gnome.org/GNOME/tracker-miners/-/merge_requests/527 -Patch: tracker-miners-3.7.0-syscall-allow.patch BuildRequires: asciidoc BuildRequires: gcc @@ -185,6 +179,9 @@ install -D -m 0755 %{SOURCE1} %{buildroot}%{_bindir}/%{name}-flatpak-fixup.sh %changelog +* Thu Mar 28 2024 David King - 3.7.1-1 +- Update to 3.7.1 + * Tue Mar 26 2024 David King - 3.7.0-2 - Backport 2 upstream MRs for crash and db corruption