Revision d0b67cbc snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py

b/snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py
49 49
ROOTNODE = 0
50 50

  
51 51
(SERIAL, NODE, HASH, SIZE, TYPE, SOURCE, MTIME, MUSER, UUID, CHECKSUM,
52
 CLUSTER) = range(11)
52
 CLUSTER, AVAILABLE, MAP_CHECK_TIMESTAMP) = range(13)
53 53

  
54 54
(MATCH_PREFIX, MATCH_EXACT) = range(2)
55 55

  
......
103 103
    'uuid': 8,
104 104
    'checksum': 9,
105 105
    'cluster': 10,
106
    'available':11,
107
    'map_check_timestamp':12
106 108
}
107 109

  
108 110

  
......
164 166
    columns.append(Column('uuid', String(64), nullable=False, default=''))
165 167
    columns.append(Column('checksum', String(256), nullable=False, default=''))
166 168
    columns.append(Column('cluster', Integer, nullable=False, default=0))
169
    columns.append(Column('available', Boolean, nullable=False, default=True))
170
    columns.append(Column('map_check_timestamp', DECIMAL(precision=16,
171
                                                         scale=6)))
167 172
    versions = Table('versions', metadata, *columns, mysql_engine='InnoDB')
168 173
    Index('idx_versions_node_mtime', versions.c.node, versions.c.mtime)
169 174
    Index('idx_versions_node_uuid', versions.c.uuid)
......
282 287
        """Return the properties of all versions at node.
283 288
           If keys is empty, return all properties in the order
284 289
           (serial, node, hash, size, type, source, mtime, muser, uuid,
285
            checksum, cluster).
290
            checksum, cluster, available, map_check_timestamp).
286 291
        """
287 292

  
288 293
        s = select([self.versions.c.serial,
......
295 300
                    self.versions.c.muser,
296 301
                    self.versions.c.uuid,
297 302
                    self.versions.c.checksum,
298
                    self.versions.c.cluster], self.versions.c.node == node)
303
                    self.versions.c.cluster,
304
                    self.versions.c.available,
305
                    self.versions.c.map_check_timestamp],
306
                   self.versions.c.node == node)
299 307
        s = s.order_by(self.versions.c.serial)
300 308
        r = self.conn.execute(s)
301 309
        rows = r.fetchall()
......
716 724

  
717 725
    def version_create(self, node, hash, size, type, source, muser, uuid,
718 726
                       checksum, cluster=0,
719
                       update_statistics_ancestors_depth=None):
727
                       update_statistics_ancestors_depth=None,
728
                       available=True):
720 729
        """Create a new version from the given properties.
721 730
           Return the (serial, mtime) of the new version.
722 731
        """
......
725 734
        s = self.versions.insert().values(
726 735
            node=node, hash=hash, size=size, type=type, source=source,
727 736
            mtime=mtime, muser=muser, uuid=uuid, checksum=checksum,
728
            cluster=cluster)
737
            cluster=cluster, available=available)
729 738
        serial = self.conn.execute(s).inserted_primary_key[0]
730 739
        self.statistics_update_ancestors(node, 1, size, mtime, cluster,
731 740
                                         update_statistics_ancestors_depth)
......
738 747
        """Lookup the current version of the given node.
739 748
           Return a list with its properties:
740 749
           (serial, node, hash, size, type, source, mtime,
741
            muser, uuid, checksum, cluster)
750
            muser, uuid, checksum, cluster, available, map_check_timestamp)
742 751
           or None if the current version is not found in the given cluster.
743 752
        """
744 753

  
......
749 758
            s = select([v.c.serial, v.c.node, v.c.hash,
750 759
                        v.c.size, v.c.type, v.c.source,
751 760
                        v.c.mtime, v.c.muser, v.c.uuid,
752
                        v.c.checksum, v.c.cluster])
761
                        v.c.checksum, v.c.cluster,
762
                        v.c.available, v.c.map_check_timestamp])
753 763
        if before != inf:
754 764
            c = select([func.max(self.versions.c.serial)],
755 765
                       self.versions.c.node == node)
......
771 781
        """Lookup the current versions of the given nodes.
772 782
           Return a list with their properties:
773 783
           (serial, node, hash, size, type, source, mtime, muser, uuid,
774
            checksum, cluster).
784
            checksum, cluster, available, map_check_timestamp).
775 785
        """
776 786
        if not nodes:
777 787
            return ()
......
783 793
            s = select([v.c.serial, v.c.node, v.c.hash,
784 794
                        v.c.size, v.c.type, v.c.source,
785 795
                        v.c.mtime, v.c.muser, v.c.uuid,
786
                        v.c.checksum, v.c.cluster])
796
                        v.c.checksum, v.c.cluster,
797
                        v.c.available, v.c.map_check_timestamp])
787 798
        if before != inf:
788 799
            c = select([func.max(self.versions.c.serial)],
789 800
                       self.versions.c.node.in_(nodes))
......
810 821
           the version specified by serial and the keys, in the order given.
811 822
           If keys is empty, return all properties in the order
812 823
           (serial, node, hash, size, type, source, mtime, muser, uuid,
813
            checksum, cluster).
824
            checksum, cluster, available, map_check_timestamp).
814 825
        """
815 826

  
816 827
        v = self.versions.alias()
817 828
        s = select([v.c.serial, v.c.node, v.c.hash,
818 829
                    v.c.size, v.c.type, v.c.source,
819 830
                    v.c.mtime, v.c.muser, v.c.uuid,
820
                    v.c.checksum, v.c.cluster], v.c.serial == serial)
831
                    v.c.checksum, v.c.cluster,
832
                    v.c.available, v.c.map_check_timestamp],
833
                   v.c.serial == serial)
821 834
        if node is not None:
822 835
            s = s.where(v.c.node == node)
823 836
        rp = self.conn.execute(s)

Also available in: Unified diff