From: Sebastian Wagner Date: Tue, 9 Jul 2019 13:08:53 +0000 (+0200) Subject: mgr/orchestrator: Introduce OutdatableDictMixin X-Git-Tag: v14.2.3~82^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9ab890f9070216ea25a8ce6a7e25821a86325401;p=ceph.git mgr/orchestrator: Introduce OutdatableDictMixin No need for a persistent cache in DeepSea Signed-off-by: Sebastian Wagner (cherry picked from commit 5471da50f805fe0717d02e9744f57a6ff29235a6) --- diff --git a/src/pybind/mgr/deepsea/module.py b/src/pybind/mgr/deepsea/module.py index 826ef6aa602c..c7e20784aa18 100644 --- a/src/pybind/mgr/deepsea/module.py +++ b/src/pybind/mgr/deepsea/module.py @@ -108,8 +108,8 @@ class DeepSeaOrchestrator(MgrModule, orchestrator.Orchestrator): self._last_failure_msg = None self._all_completions = dict() self._completion_lock = Lock() - self.inventory_cache = orchestrator.OutdatableDict(self, 'inventory_cache') - self.service_cache = orchestrator.OutdatableDict(self, 'service_cache') + self.inventory_cache = orchestrator.OutdatableDict() + self.service_cache = orchestrator.OutdatableDict() def available(self): if not self._config_valid(): diff --git a/src/pybind/mgr/orchestrator.py b/src/pybind/mgr/orchestrator.py index b1af325609bc..dac70a3434a5 100644 --- a/src/pybind/mgr/orchestrator.py +++ b/src/pybind/mgr/orchestrator.py @@ -1040,7 +1040,7 @@ class OutdatableData(object): return 'OutdatableData(data={}, last_refresh={})'.format(self.data, self.last_refresh) -class OutdatableDict(PersistentStoreDict): +class OutdatableDictMixin(object): """ Toolbox for implementing a cache. As every orchestrator has different needs, we cannot implement any logic here. @@ -1048,16 +1048,16 @@ class OutdatableDict(PersistentStoreDict): def __getitem__(self, item): # type: (str) -> OutdatableData - return OutdatableData.from_json(super(OutdatableDict, self).__getitem__(item)) + return OutdatableData.from_json(super(OutdatableDictMixin, self).__getitem__(item)) def __setitem__(self, key, value): # type: (str, OutdatableData) -> None val = None if value is None else value.json() - super(OutdatableDict, self).__setitem__(key, val) + super(OutdatableDictMixin, self).__setitem__(key, val) def items(self): # type: () -> Iterator[Tuple[str, OutdatableData]] - for item in super(OutdatableDict, self).items(): + for item in super(OutdatableDictMixin, self).items(): k, v = item yield k, OutdatableData.from_json(v) @@ -1077,3 +1077,9 @@ class OutdatableDict(PersistentStoreDict): outdated = [item[0] for item in self.items() if item[1].outdated()] for o in outdated: del self[o] + +class OutdatablePersistentDict(OutdatableDictMixin, PersistentStoreDict): + pass + +class OutdatableDict(OutdatableDictMixin, dict): + pass diff --git a/src/pybind/mgr/ssh/module.py b/src/pybind/mgr/ssh/module.py index 43072c4d382d..73675e520572 100644 --- a/src/pybind/mgr/ssh/module.py +++ b/src/pybind/mgr/ssh/module.py @@ -147,7 +147,7 @@ class SSHOrchestrator(MgrModule, orchestrator.Orchestrator): # cache is invalidated by # 1. timeout # 2. refresh parameter - self.inventory_cache = orchestrator.OutdatableDict(self, self._STORE_HOST_PREFIX) + self.inventory_cache = orchestrator.OutdatablePersistentDict(self, self._STORE_HOST_PREFIX) def handle_command(self, inbuf, command): if command["prefix"] == "ssh set-ssh-config":