From d2dc4b18f1f7322b283e599d3cfc5531662e78d5 Mon Sep 17 00:00:00 2001 From: Simon Schrottner Date: Thu, 28 Nov 2024 19:15:40 +0100 Subject: [PATCH 1/9] feat(flagd-rpc): add caching with tests Signed-off-by: Simon Schrottner --- .../contrib/provider/flagd/resolvers/grpc.py | 14 ++ .../tests/e2e/config.feature | 189 ++++++++++++++++++ .../tests/e2e/rpc_cache.feature | 44 ++++ 3 files changed, 247 insertions(+) create mode 100644 providers/openfeature-provider-flagd/tests/e2e/config.feature create mode 100644 providers/openfeature-provider-flagd/tests/e2e/rpc_cache.feature diff --git a/providers/openfeature-provider-flagd/src/openfeature/contrib/provider/flagd/resolvers/grpc.py b/providers/openfeature-provider-flagd/src/openfeature/contrib/provider/flagd/resolvers/grpc.py index 8dfda518..4699fb53 100644 --- a/providers/openfeature-provider-flagd/src/openfeature/contrib/provider/flagd/resolvers/grpc.py +++ b/providers/openfeature-provider-flagd/src/openfeature/contrib/provider/flagd/resolvers/grpc.py @@ -65,6 +65,12 @@ def __init__( self.deadline = config.deadline_ms * 0.001 self.connected = False + self._cache: typing.Optional[BaseCacheImpl] = ( + LRUCache(maxsize=self.config.max_cache_size) + if self.config.cache_type == CacheType.LRU + else None + ) + def _create_stub( self, ) -> typing.Tuple[evaluation_pb2_grpc.ServiceStub, grpc.Channel]: @@ -80,6 +86,14 @@ def _create_stub( def initialize(self, evaluation_context: EvaluationContext) -> None: self.connect() + self.retry_backoff_seconds = 0.1 + self.connected = False + + self._cache = ( + LRUCache(maxsize=self.config.max_cache_size) + if self.config.cache_type == CacheType.LRU + else None + ) def shutdown(self) -> None: self.active = False diff --git a/providers/openfeature-provider-flagd/tests/e2e/config.feature b/providers/openfeature-provider-flagd/tests/e2e/config.feature new file mode 100644 index 00000000..f2bd715e --- /dev/null +++ b/providers/openfeature-provider-flagd/tests/e2e/config.feature @@ -0,0 +1,189 @@ +Feature: Configuration Test + + @rpc @in-process + Scenario Outline: Default Config + When we initialize a config + Then the option "