|
10 | 10 | import prometheus_client as prom_client
|
11 | 11 | from prometheus_client import core as prom_core
|
12 | 12 |
|
| 13 | +RESOURCE_PROVIDER_AGGREGATE_CACHE = {} |
| 14 | + |
13 | 15 |
|
14 | 16 | def get_capacity_per_flavor(placement_client, flavors):
|
15 | 17 | capacity_per_flavor = {}
|
@@ -122,13 +124,20 @@ def get_resource_provider_info(compute_client, placement_client):
|
122 | 124 | # skip checking every resource provider for their aggregates
|
123 | 125 | continue
|
124 | 126 |
|
125 |
| - response = placement_client.get( |
126 |
| - f"/resource_providers/{raw_rp.id}/aggregates", |
127 |
| - headers={"OpenStack-API-Version": "placement 1.19"}, |
128 |
| - ) |
129 |
| - response.raise_for_status() |
130 |
| - aggs = response.json() |
131 |
| - rp["aggregates"] = aggs["aggregates"] |
| 127 | + # TODO(johngarbutt): maybe check if cached aggregate still exists? |
| 128 | + aggregates = RESOURCE_PROVIDER_AGGREGATE_CACHE.get(raw_rp.id) |
| 129 | + if aggregates is None: |
| 130 | + response = placement_client.get( |
| 131 | + f"/resource_providers/{raw_rp.id}/aggregates", |
| 132 | + headers={"OpenStack-API-Version": "placement 1.19"}, |
| 133 | + ) |
| 134 | + response.raise_for_status() |
| 135 | + aggs = response.json() |
| 136 | + rp["aggregates"] = aggs["aggregates"] |
| 137 | + RESOURCE_PROVIDER_AGGREGATE_CACHE[raw_rp.id] = aggs["aggregates"] |
| 138 | + else: |
| 139 | + rp["aggregates"] = aggregates |
| 140 | + |
132 | 141 | for agg_id in rp["aggregates"]:
|
133 | 142 | if agg_id in azones:
|
134 | 143 | rp["az"] = azones[agg_id]
|
|
0 commit comments