Skip to content

Commit 9a74f04

Browse files
authored
Merge pull request #944 from haozturk/update-weights
Make `dm_weight`s sum up to 100 and improve reporting
2 parents 644cd6b + 6b039d9 commit 9a74f04

File tree

1 file changed

+26
-18
lines changed

1 file changed

+26
-18
lines changed

docker/rucio_client/scripts/updateDDMQuota

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,32 @@ client = Client()
99
# https://cmsdmops.docs.cern.ch/Operators/ManageDMWeight/
1010

1111
DRY_RUN = False
12-
MAX_DM_WEIGHT = 100
13-
MIN_DM_WEIGHT = 1
12+
TOTAL_DM_WEIGHT = 100
1413
stats = {}
1514

1615
def print_results():
17-
headers = ['RSE', 'PLEDGE (PB)', 'FREE SPACE (PB)', "RELATIVE FREE (%)", "DM WEIGHT COEFFICIENT", "DM_WEIGHT"]
16+
headers = ['RSE', 'PLEDGE (PB)', 'FREE SPACE (PB)', 'EXPIRED SPACE (PB)', 'RELATIVE PLEDGE (%)', "RELATIVE FREE (%)", "RELATIVE EXPIRED (%)", "DM WEIGHT COEFFICIENT", "DM_WEIGHT"]
1817
table_disk = []
1918
table_tape = []
2019
for rse, values in stats.items():
2120
pledge = values["pledge"] / 1e15
2221
free = values["free"] / 1e15
22+
expired = values["expired"] / 1e15
23+
2324
relative_free = (free/pledge) * 100
25+
relative_expired = (expired/pledge) * 100
26+
relative_pledge = values["relative_pledge"] * 100
27+
2428
dm_weight_coefficient = values["dm_weight_coefficient"]
2529
dm_weight = values["dm_weight"]
2630
if "Tape" in rse:
27-
table_tape.append([rse,pledge,free,relative_free,dm_weight_coefficient, dm_weight])
31+
table_tape.append([rse,pledge,free,expired,relative_pledge,relative_free,relative_expired,dm_weight_coefficient, dm_weight])
2832
else:
29-
table_disk.append([rse,pledge,free,relative_free,dm_weight_coefficient, dm_weight])
33+
table_disk.append([rse,pledge,free,expired,relative_pledge,relative_free,relative_expired,dm_weight_coefficient, dm_weight])
34+
35+
# Sort tables by DM_WEIGHT (column 8) in descending order
36+
table_disk.sort(key=lambda x: x[8], reverse=True)
37+
table_tape.sort(key=lambda x: x[8], reverse=True)
3038

3139
print(tabulate(table_disk, headers=headers))
3240
print(tabulate(table_tape, headers=headers))
@@ -40,6 +48,8 @@ def get_sum_of_all_rse_statics(rse_expression):
4048
result += static
4149
return result
4250

51+
def get_min_free_space(rse):
52+
return client.get_rse_limits(rse)["MinFreeSpace"]
4353

4454
def get_rse_usage(rse):
4555
rse_usage = list(client.get_rse_usage(rse))
@@ -70,12 +80,17 @@ def calculate_dm_weights(rse_expression, static_weight, free_weight, expired_wei
7080

7181
for rse in rses:
7282
static, rucio, expired = get_rse_usage(rse)
83+
try:
84+
min_free_space = get_min_free_space(rse)
85+
except Exception as e:
86+
print(f"Error getting min free space for {rse}: {e}")
87+
min_free_space = 0
7388

7489
# Normalise
7590
if static == 0:
7691
continue # Skip if static is 0
7792

78-
free = static - rucio
93+
free = static - rucio - min_free_space
7994

8095
# Control dm_weight for specially configured rses
8196
rse_attributes = client.list_rse_attributes(rse)
@@ -108,7 +123,9 @@ def calculate_dm_weights(rse_expression, static_weight, free_weight, expired_wei
108123

109124
stats[rse] = {
110125
"pledge": static,
126+
"relative_pledge": static / total_static,
111127
"free": free,
128+
"expired": expired,
112129
"dm_weight_coefficient" : dm_weight_coefficient,
113130
}
114131
dm_weights[rse] = dm_weight
@@ -120,16 +137,7 @@ def normalize_dm_weights(dm_weights):
120137
min_positive_weight = min([n for n in weights if n > 0])
121138
for rse, weight in dm_weights.items():
122139

123-
# Don't take 0 weights into normalization, since they are manually overriden
124-
if weight == 0:
125-
dm_weight = weight
126-
else:
127-
# This normalization sets the lowest dm_weight to 0
128-
dm_weight = int(((weight - min_positive_weight) / (max(weights) - min_positive_weight)) * MAX_DM_WEIGHT)
129-
# Make the lowest dm_weight non-zero
130-
if dm_weight == 0:
131-
dm_weight = MIN_DM_WEIGHT
132-
#dm_weight = int((weight/sum(weights)) * MAX_DM_WEIGHT)
140+
dm_weight = (weight/sum(weights)) * TOTAL_DM_WEIGHT
133141
dm_weights[rse] = dm_weight
134142
stats[rse]["dm_weight"] = dm_weight
135143

@@ -166,8 +174,8 @@ def main():
166174
# T3s do not have the "static" usage set, they are quasi-static
167175

168176
run(rse_expression = "rse_type=DISK&cms_type=real&tier<3&tier>0",
169-
static_weight = 0.2,
170-
free_weight = 0.5,
177+
static_weight = 0.35,
178+
free_weight = 0.35,
171179
expired_weight = 0.3,
172180
make_quadratic = True)
173181

0 commit comments

Comments
 (0)