From a70d7f3ecb58bde76a78e17d4be6b6a15eb5d5b1 Mon Sep 17 00:00:00 2001 From: Simon Schrottner Date: Mon, 10 Mar 2025 10:29:40 +0100 Subject: [PATCH 1/4] feat(load-generator): Adapt OpenFeature OFREP instead of IN_PROCESS OpenFeature supports multiple different modes. The newest implementation relies on threads and other python internal, which seem to be monkeypatched by locust. Due to this, the IN_PROCESS mode is not working properly anymore and is causing issues. Instead we suggest to switch to the OFREP (OpenFeature Remote Evaluation Protocol) for this usecase. This is a simple http call which will return all evaluate flags, and will regularly poll for changes. Signed-off-by: Simon Schrottner --- .env | 1 + CHANGELOG.md | 3 +++ docker-compose.yml | 3 ++- src/load-generator/locustfile.py | 5 +++-- src/load-generator/requirements.txt | 3 ++- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.env b/.env index b1850e547b..3dd0999d7a 100644 --- a/.env +++ b/.env @@ -133,6 +133,7 @@ SHIPPING_DOCKERFILE=./src/shipping/Dockerfile # Flagd FLAGD_HOST=flagd FLAGD_PORT=8013 +FLAGD_OFREP_PORT=8016 # Flagd UI FLAGD_UI_HOST=flagd-ui diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ae0eb55b6..044fdbe551 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ the release. * [quote] Updated open-telemetry/exporter-otlp to 1.2.1 which includes the fix for `IS_REMOTE` flag feature ([#2112](https://github.com/open-telemetry/opentelemetry-demo/pull/2112)) +* [load-generator] Change OpenFeature Evaluation to Remote Evaluation Protocol, + based on [this issue in OpenFeature/python-sdk-contrib](https://github.com/open-feature/python-sdk-contrib/issues/198) + ([#2114](https://github.com/open-telemetry/opentelemetry-demo/pull/2114)) ## 2.0.1 diff --git a/docker-compose.yml b/docker-compose.yml index 7013b1028f..50208432f7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -608,7 +608,8 @@ services: "file:./etc/flagd/demo.flagd.json" ] ports: - - 8013 + - "${FLAGD_PORT}" + - "${FLAGD_OFREP_PORT}" volumes: - ./src/flagd:/etc/flagd logging: diff --git a/src/load-generator/locustfile.py b/src/load-generator/locustfile.py index 387ae5d152..4f86fe4b79 100644 --- a/src/load-generator/locustfile.py +++ b/src/load-generator/locustfile.py @@ -34,7 +34,7 @@ from opentelemetry.sdk.resources import Resource from openfeature import api -from openfeature.contrib.provider.flagd import FlagdProvider +from openfeature.contrib.provider.ofrep import OFREPProvider from openfeature.contrib.hook.opentelemetry import TracingHook from playwright.async_api import Route, Request @@ -69,7 +69,8 @@ logging.info("Instrumentation complete") # Initialize Flagd provider -api.set_provider(FlagdProvider(host=os.environ.get('FLAGD_HOST', 'flagd'), port=os.environ.get('FLAGD_PORT', 8013))) +base_url = f"http://{os.environ.get('FLAGD_HOST', 'localhost')}:{os.environ.get('FLAGD_OFREP_PORT', 8016)}" +api.set_provider(OFREPProvider(base_url=base_url)) api.add_hooks([TracingHook()]) def get_flagd_value(FlagName): diff --git a/src/load-generator/requirements.txt b/src/load-generator/requirements.txt index 8201b094aa..97ec73b7ac 100644 --- a/src/load-generator/requirements.txt +++ b/src/load-generator/requirements.txt @@ -31,7 +31,7 @@ opentelemetry-sdk==1.30.0 opentelemetry-semantic-conventions==0.51b0 opentelemetry-util-http==0.51b0 openfeature-sdk==0.8.0 -openfeature-provider-flagd==0.1.5 +openfeature-provider-ofrep==0.1.1 openfeature-hooks-opentelemetry==0.2.0 protobuf==5.29.3 psutil==6.1.1 @@ -46,3 +46,4 @@ wrapt==1.17.2 zope-event==5.0 zope-interface==7.2 python-json-logger==3.2.1 + From 0bd7abf7dcbed9b4b8abcb1deec9f41ad0a6b7aa Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Tue, 11 Mar 2025 08:36:21 +0100 Subject: [PATCH 2/4] Add ports to docker-compose.minimal --- docker-compose.minimal.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index a52755b0cc..d8a3f83fde 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -522,7 +522,8 @@ services: "file:./etc/flagd/demo.flagd.json" ] ports: - - 8013 + - "${FLAGD_PORT}" + - "${FLAGD_OFREP_PORT}" volumes: - ./src/flagd:/etc/flagd logging: From 76c20806e5926312659c5ac760f5547af0d087ac Mon Sep 17 00:00:00 2001 From: Simon Schrottner Date: Tue, 11 Mar 2025 09:34:25 +0100 Subject: [PATCH 3/4] fixup: add missing envvar for the ofrepport to the loadgenerator Signed-off-by: Simon Schrottner --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 50208432f7..d5ec0b79e6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -421,7 +421,7 @@ services: - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python - LOCUST_WEB_HOST=0.0.0.0 - FLAGD_HOST - - FLAGD_PORT + - FLAGD_OFREP_PORT depends_on: frontend: condition: service_started From 0aaf37cc9793607c1840ae93fe95370e3fedff14 Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Tue, 11 Mar 2025 09:52:01 +0100 Subject: [PATCH 4/4] Add FLAGD_OFREP_PORT to docker compose minimal --- docker-compose.minimal.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index d8a3f83fde..b751a808f1 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -345,7 +345,7 @@ services: - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python - LOCUST_WEB_HOST=0.0.0.0 - FLAGD_HOST - - FLAGD_PORT + - FLAGD_OFREP_PORT depends_on: frontend: condition: service_started