]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blobdiff - src/allmydata/frontends/magic_folder.py
Merge branch '2438.magic-folder-stable.9' of https://github.com/tahoe-lafs/tahoe...
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / frontends / magic_folder.py
index 353b8facc8d2e2ad14d7448667dd20e8bd180353..bd226156d23b81c576b988c32d1babe63c3d3512 100644 (file)
@@ -492,6 +492,10 @@ class WriteFileMixin(object):
         finally:
             os.umask(old_mask)
 
+        # FUDGE_SECONDS is used to determine if another process
+        # has written to the same file concurrently. This is described
+        # in the Earth Dragon section of our design document:
+        # docs/proposed/magic-folder/remote-to-local-sync.rst
         os.utime(replacement_path_u, (now, now - self.FUDGE_SECONDS))
         if is_conflict:
             print "0x00 ------------ <><> is conflict; calling _rename_conflicted_file... %r %r" % (abspath_u, replacement_path_u)
@@ -612,6 +616,10 @@ class Downloader(QueueMixin, WriteFileMixin):
             node = None
             for success, result in deferredList:
                 if success:
+                    if 'version' not in result[1]:
+                        self._log("invalid remote metadata detected")
+                        continue
+
                     if result[1]['version'] > max_version:
                         node, metadata = result
                         max_version = result[1]['version']
@@ -629,10 +637,15 @@ class Downloader(QueueMixin, WriteFileMixin):
 
                 file_node, metadata = listing_map[encoded_relpath_u]
                 local_version = self._get_local_latest(relpath_u)
-                remote_version = metadata.get('version', None)
+
+                if 'version' not in metadata:
+                    self._log("invalid remote metadata detected for %r" % (relpath_u,))
+                    continue
+
+                remote_version = metadata['version']
                 self._log("%r has local version %r, remote version %r" % (relpath_u, local_version, remote_version))
 
-                if local_version is None or remote_version is None or local_version < remote_version:
+                if local_version is None or local_version < remote_version:
                     self._log("%r added to download queue" % (relpath_u,))
                     if scan_batch.has_key(relpath_u):
                         scan_batch[relpath_u] += [(file_node, metadata)]