2
0
mirror of https://github.com/xcat2/confluent.git synced 2026-09-22 00:49:32 +00:00

Fix erroneous cache retention

Do not refresh cache vintage an every access.

Also, give callers finer grained control over cache.
This commit is contained in:
Jarrod Johnson
2026-09-18 13:58:05 -04:00
parent 046ace6dba
commit 3dad193926
+11 -10
View File
@@ -30,7 +30,6 @@ from aiohmi.util.parse import parse_time
from datetime import datetime
from datetime import timedelta
from dateutil import tz
import re
import socket
@@ -954,10 +953,10 @@ class OEMHandler(object):
etag='*') # thetag)
return {'bootdev': reqbootdev}
def _get_cache(self, url):
def _get_cache(self, url, maxage=30):
now = os.times()[4]
cachent = self._urlcache.get(url, None)
if cachent and cachent['vintage'] > now - 30:
if cachent and cachent['vintage'] > now - maxage:
return cachent['contents']
return None
@@ -1816,7 +1815,9 @@ class OEMHandler(object):
async def _do_web_request(self, url, payload=None, method=None, cache=True, etag=None):
res = None
if cache and payload is None and method is None:
res = self._get_cache(url)
if cache is True:
cache = 30
res = self._get_cache(url, maxage=cache)
if res:
return res
# If doing a method that may change remote url state, invalidate cache
@@ -1953,7 +1954,7 @@ class OEMHandler(object):
if 'sensedata' in sensor:
reading = sensor['sensedata']
else:
reading = await self._do_web_request(sensor['url'], cache=1)
reading = await self._do_web_request(sensor['url'], cache=False)
return self._extract_reading(sensor, reading)
async def get_sensor_data(self):
@@ -1961,7 +1962,7 @@ class OEMHandler(object):
yield await self.get_sensor_reading(sensor)
async def _sensormap(self):
if self._varsensormapvintage < time.time() - 2:
if self._varsensormapvintage < time.monotonic() - 2:
self._varsensormap = {}
if not self._varsensormap:
sysinfo = await self.sysinfo()
@@ -1975,7 +1976,7 @@ class OEMHandler(object):
chassislist = await self._do_web_request(chassiscol)
if len(chassislist.get('Members', [])) == 1:
await self._mapchassissensors(chassislist['Members'][0])
self._varsensormapvintage = time.time()
self._varsensormapvintage = time.monotonic()
return self._varsensormap
async def _mapchassissensors(self, chassis):
@@ -1987,7 +1988,7 @@ class OEMHandler(object):
if sensors:
self._invalidate_url_cache(sensors)
sensorinf = await self._get_expanded_data(sensors)
vintage = time.time()
vintage = time.monotonic()
for sensedata in sensorinf.get('Members', []):
if 'Name' in sensedata:
sensetype = sensedata.get('ReadingType', 'Unknown')
@@ -1998,7 +1999,7 @@ class OEMHandler(object):
else:
powurl = chassisinfo.get('Power', {}).get('@odata.id', '')
if powurl:
powinf = await self._do_web_request(powurl)
powinf = await self._do_web_request(powurl, cache=1)
for voltage in powinf.get('Voltages', []):
if 'Name' in voltage:
self._varsensormap[voltage['Name']] = {
@@ -2006,7 +2007,7 @@ class OEMHandler(object):
'type': 'Voltage'}
thermurl = chassisinfo.get('Thermal', {}).get('@odata.id', '')
if thermurl:
therminf = await self._do_web_request(thermurl)
therminf = await self._do_web_request(thermurl, cache=1)
for fan in therminf.get('Fans', []):
if 'Name' in fan:
self._varsensormap[fan['Name']] = {