Revision 9c0c8aa9
b/snf-pithos-app/pithos/api/management/commands/pithos-usage.py | ||
---|---|---|
89 | 89 |
s = s.group_by(table['versions'].c.cluster) |
90 | 90 |
s = s.where(table['nodes'].c.node == table['versions'].c.node) |
91 | 91 |
s = s.where(table['nodes'].c.node.in_(select_descendants)) |
92 |
s = s.where(table['versions'].c.cluster == CLUSTER_NORMAL) |
|
92 | 93 |
d2 = dict(conn.execute(s).fetchall()) |
93 | 94 |
|
94 |
for cluster in clusters: |
|
95 |
try: |
|
96 |
size = d2[cluster] |
|
97 |
except KeyError: |
|
98 |
size = 0 |
|
99 |
append(Statistics( |
|
100 |
node=node, |
|
101 |
path=path, |
|
102 |
size=size, |
|
103 |
cluster=cluster)) |
|
95 |
try: |
|
96 |
size = d2[CLUSTER_NORMAL] |
|
97 |
except KeyError: |
|
98 |
size = 0 |
|
99 |
append(Statistics( |
|
100 |
node=node, |
|
101 |
path=path, |
|
102 |
size=size, |
|
103 |
cluster=CLUSTER_NORMAL)) |
|
104 | 104 |
return statistics |
105 | 105 |
|
106 |
|
|
107 |
def _get_verified_usage(statistics): |
|
106 |
def _verify_statistics(item): |
|
107 |
"""Verify statistics""" |
|
108 |
s = select([table['statistics'].c.size]) |
|
109 |
s = s.where(table['statistics'].c.node == item.node) |
|
110 |
s = s.where(table['statistics'].c.cluster == item.cluster) |
|
111 |
db_item = conn.execute(s).fetchone() |
|
112 |
if not db_item: |
|
113 |
return |
|
114 |
try: |
|
115 |
assert item.size == db_item.size, \ |
|
116 |
'%d[%s][%d], size: %d != %d' % ( |
|
117 |
item.node, item.path, item.cluster, |
|
118 |
item.size, db_item.size) |
|
119 |
except AssertionError, e: |
|
120 |
print e |
|
121 |
|
|
122 |
def _prepare_reset_holding(statistics, verify=False): |
|
108 | 123 |
"""Verify statistics and set quotaholder user usage""" |
109 | 124 |
reset_holding = [] |
110 | 125 |
append = reset_holding.append |
111 | 126 |
for item in statistics: |
112 |
s = select([table['statistics'].c.size]) |
|
113 |
s = s.where(table['statistics'].c.node == item.node) |
|
114 |
s = s.where(table['statistics'].c.cluster == item.cluster) |
|
115 |
db_item = conn.execute(s).fetchone() |
|
116 |
if not db_item: |
|
117 |
continue |
|
118 |
try: |
|
119 |
assert item.size == db_item.size, \ |
|
120 |
'%d[%s][%d], size: %d != %d' % ( |
|
121 |
item.node, item.path, item.cluster, |
|
122 |
item.size, db_item.size) |
|
123 |
except AssertionError, e: |
|
124 |
print e |
|
127 |
if verify: |
|
128 |
_verify_statistics(item) |
|
125 | 129 |
if item.cluster == CLUSTER_NORMAL: |
126 | 130 |
append(ResetHoldingPayload( |
127 | 131 |
entity=item.path, |
... | ... | |
148 | 152 |
action="store_true", |
149 | 153 |
default=False, |
150 | 154 |
help="Reset usage for all or specified users"), |
155 |
make_option('--verify', |
|
156 |
dest='verify', |
|
157 |
action="store_true", |
|
158 |
default=False, |
|
159 |
help=("Verify statistics consistency for all " |
|
160 |
"or specified users")), |
|
151 | 161 |
make_option('--user', |
152 | 162 |
dest='users', |
153 | 163 |
action='append', |
... | ... | |
162 | 172 |
if not user_nodes: |
163 | 173 |
raise CommandError('No users found.') |
164 | 174 |
statistics = _compute_statistics(user_nodes) |
165 |
reset_holding = _get_verified_usage(statistics) |
|
175 |
reset_holding = _prepare_reset_holding( |
|
176 |
statistics, verify=options['verify'] |
|
177 |
) |
|
166 | 178 |
print '\n'.join([str(i) for i in reset_holding]) |
167 | 179 |
|
168 | 180 |
if options['reset']: |
Also available in: Unified diff