diff options
author | Martin Kampas <martin.kampas@tieto.com> | 2014-10-20 13:57:42 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2016-06-05 00:46:16 +0200 |
commit | 7902523be2b813eefd3efd0f00d63fe55382fac5 (patch) | |
tree | 733973215730a36aea2a8c28ae07147acc06f33f | |
parent | e5f565fba7bedc2bb6d9a40ef7384684637e57dc (diff) | |
download | tracker-7902523be2b813eefd3efd0f00d63fe55382fac5.tar.gz |
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
-rw-r--r-- | 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 6c00a50e9..02b4a4755 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'", |