Fix size & type of copied files
authorSofia Papagiannaki <papagian@gmail.com>
Thu, 28 Jun 2012 16:33:09 +0000 (19:33 +0300)
committerSofia Papagiannaki <papagian@gmail.com>
Thu, 28 Jun 2012 16:33:09 +0000 (19:33 +0300)
Refs: #2611

snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py
snf-pithos-backend/pithos/backends/modular.py
snf-pithos-tools/pithos/tools/test.py

index 130c764..7a1f8b3 100644 (file)
@@ -631,6 +631,7 @@ class Node(DBWorker):
             c = c.where(self.versions.c.mtime < before)
         s = s.where(and_(v.c.serial.in_(c),
                          v.c.cluster == cluster))
+        s = s.order_by(v.c.node)
         r = self.conn.execute(s)
         rproxy = r.fetchall()
         r.close()
index e2a55a7..d3cd0c9 100644 (file)
@@ -785,6 +785,7 @@ class ModularBackend(BaseBackend):
         if delimiter:
             prefix = src_name + delimiter if not src_name.endswith(delimiter) else src_name
             src_names = self._list_objects_no_limit(user, src_account, src_container, prefix, delimiter=None, virtual=True, domain=None, keys=[], shared=False, until=None, size_range=None, all_props=True, public=False)
+            src_names.sort(key=lambda x: x[2]) # order by nodes
             paths = [elem[0] for elem in src_names]
             nodes = [elem[2] for elem in src_names]
             # TODO: Will do another fetch of the properties in duplicate version...
@@ -794,6 +795,7 @@ class ModularBackend(BaseBackend):
                 src_version_id = prop[self.SERIAL]
                 hash = prop[self.HASH]
                 vtype = prop[self.TYPE]
+                size = prop[self.SIZE]
                 dest_prefix = dest_name + delimiter if not dest_name.endswith(delimiter) else dest_name
                 vdest_name = path.replace(prefix, dest_prefix, 1)
                 dest_version_ids.append(self._update_object_hash(user, dest_account, dest_container, vdest_name, size, vtype, hash, None, dest_domain, dest_meta, replace_meta, permissions, src_node=node, src_version_id=src_version_id, is_copy=is_copy))
index 803d9ce..b778beb 100755 (executable)
@@ -1432,9 +1432,9 @@ class ObjectCopy(BaseTestCase):
     
     def test_copy_dir(self):
         self.client.create_folder(self.containers[0], 'dir')
-        objects = ('object1', 'subdir/object2', 'dirs')
-        for name in objects[:-1]:
-            self.upload_random_data(self.containers[0], 'dir/%s' % name)
+        objects = ('object1.jpg', 'subdir/object2.pdf', 'dirs')
+        for name, i in zip(objects[:-1], range(1, len(objects[:-1])+1)):
+            self.upload_random_data(self.containers[0], 'dir/%s' % name, length=i*1024)
         self.upload_random_data(self.containers[0], 'dirs')
         
         self.client.copy_object(self.containers[0], 'dir', self.containers[1], 'dir-backup', delimiter='/')
@@ -1485,10 +1485,10 @@ class ObjectMove(BaseTestCase):
     
     def test_move_dir(self):
         self.client.create_folder(self.containers[0], 'dir')
-        objects = ('object1', 'subdir/object2', 'dirs')
+        objects = ('object1.jpg', 'subdir/object2.pdf', 'dirs')
         meta = {}
-        for name in objects[:-1]:
-            self.upload_random_data(self.containers[0], 'dir/%s' % name)
+        for name, i in zip(objects[:-1], range(1, len(objects[:-1])+1)):
+            self.upload_random_data(self.containers[0], 'dir/%s' % name, length=i*1024)
             meta[name] = self.client.retrieve_object_metadata(self.containers[0], 'dir/%s' % name)
         self.upload_random_data(self.containers[0], 'dirs')
         
@@ -1799,7 +1799,7 @@ class ObjectDelete(BaseTestCase):
     
     def test_delete_dir(self):
         self.client.create_folder(self.containers[0], 'dir')
-        objects = ('object1', 'subdir/object2', 'dirs')
+        objects = ('object1.jpg', 'subdir/object2.pdf', 'dirs')
         for name in objects[:-1]:
             self.upload_random_data(self.containers[0], 'dir/%s' % name)
         self.upload_random_data(self.containers[0], 'dirs')