Revision 876d7486 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