In version_remove recompute nodes latest version
authorSofia Papagiannaki <papagian@gmail.com>
Sat, 21 Jul 2012 08:00:06 +0000 (11:00 +0300)
committerSofia Papagiannaki <papagian@gmail.com>
Sat, 21 Jul 2012 08:00:06 +0000 (11:00 +0300)
snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py
snf-pithos-backend/pithos/backends/lib/sqlite/node.py

index a72f9e5..ad44f6f 100644 (file)
@@ -596,7 +596,14 @@ class Node(DBWorker):
         mtime = max(mtime, r[2])
         return (count, size, mtime)
     
-    def nodes_set_latest_version(self, node, serial):
+    def nodes_set_latest_version(self, node, serial=None):
+        v = self.versions
+        if not serial:
+            s = select(v.c.serial, v.c.node == node).order_by(desc(v.c.mtime)).limit(1)
+            r = self.conn.excecute(s)
+            row = r.fetchone()
+            serial = row[0] if row else None
+            r.close()
         s = self.nodes.update().where(self.nodes.c.node == node)
         s = s.values(latest_version = serial)
         self.conn.execute(s).close()
@@ -748,9 +755,7 @@ class Node(DBWorker):
         s = self.versions.delete().where(self.versions.c.serial == serial)
         self.conn.execute(s).close()
         
-        props = self.version_lookup(node, cluster=cluster, all_props=False)
-        if props:
-            self.nodes_set_latest_version(v.node, serial)
+        self.nodes_set_latest_version(v.node)
         
         return hash, size
     
index 7779e51..0c69a31 100644 (file)
@@ -482,7 +482,12 @@ class Node(DBWorker):
         mtime = max(mtime, r[2])
         return (count, size, mtime)
     
-    def nodes_set_latest_version(self, node, serial):
+    def nodes_set_latest_version(self, node, serial=None):
+       if not serial:
+               q = ("select serial from versions where node = ? order_by mtime desc limit 1")
+               self.execute(q, (node,))
+               r = self.fetchone()
+                       serial = r[0] of r else None
        q = ("update nodes set latest_version = ? where node = ?")
         props = (serial, node)
         self.execute(q, props)
@@ -611,9 +616,8 @@ class Node(DBWorker):
         q = "delete from versions where serial = ?"
         self.execute(q, (serial,))
         
-        props = self.version_lookup(node, cluster=cluster, all_props=False)
-        if props:
-               self.nodes_set_latest_version(node, props[0])
+        self.nodes_set_latest_version(node)
+        
         return hash, size
     
     def attribute_get(self, serial, domain, keys=()):