[tracker] miner-fs: Fix handling files moved soon after creating



commit 7902523be2b813eefd3efd0f00d63fe55382fac5
Author: Martin Kampas <martin kampas tieto com>
Date:   Mon Oct 20 13:57:42 2014 +0200

    miner-fs: Fix handling files moved soon after creating
    
    Noticed this when executing functional tests for write-back:
    
    (tracker-miner-fs:21288): Tracker-CRITICAL **: Could not execute sparql:
     Subject `(null)' is not in domain `nfo:FileDataObject' of property
     `nfo:fileName'
    
    This warning happens in item_move() when the source just didn't have
    time to be indexed. One example:
    
    copy ("file.txt", "temp_XYZ.file.txt")
     - received G_FILE_MONITOR_EVENT_CREATED ("temp.file.txt")
     - received G_FILE_MONITOR_EVENT_CHANGED ("temp.file.txt")
     - received G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT ("temp.file.txt")
    modify ("temp_XYZ.file.txt")
     - received G_FILE_MONITOR_EVENT_CHANGED ("temp.file.txt")
     - received G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT ("temp.file.txt")
    mv ("temp_XYZ.file.txt", "file.txt")
     - received G_FILE_MONITOR_EVENT_MOVED ("temp.file.txt", "file.txt")
     - emitted  ITEM_MOVED ("temp.file.txt", "file.txt")
    
    It was already handled in item_move() in past, but removed with eef0e7f
    (libtracker-miner: Remove useless code) after previously misidentified
    as useless in scope of ee58e67 (libtracker-miner: Add compat layer for
    tracker_miner_fs_directory_*)
    
    The comment from ee58e67 """FIXME: This situation shouldn't happen from
    a TrackerFileNotifier event""" simply cannot be satisfied: no way to get
    "temp.file.txt" indexed before ITEM_MOVED is processed - the file
    disappears too fast.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=678986

 src/libtracker-miner/tracker-miner-fs.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index 6c00a50..02b4a47 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -1894,6 +1894,23 @@ item_move (TrackerMinerFS *fs,
                g_free (uri);
 
                return retval;
+       } else if (!source_exists) {
+               gboolean retval;
+
+               /* The source file might not be indexed yet (eg. temporary save
+                * files that are immediately renamed to the definitive path).
+                * Deal with those as newly added items.
+                */
+               g_debug ("Source file '%s' not yet in store, indexing '%s' "
+                        "from scratch", source_uri, uri);
+
+               retval = item_add_or_update (fs, file, G_PRIORITY_DEFAULT);
+
+               g_free (source_uri);
+               g_free (uri);
+               g_object_unref (file_info);
+
+               return retval;
        }
 
        g_debug ("Moving item from '%s' to '%s'",


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