From 522508df289f531b6dcd1f5b1f9ba98acc6b7fdd Mon Sep 17 00:00:00 2001 From: 17hz <0x149527@gmail.com> Date: Thu, 20 Nov 2025 13:34:05 +0800 Subject: [PATCH] fix: add app_id to Redis cache keys for trigger nodes to ensure uniqueness (#28243) Co-authored-by: Claude Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com> --- api/services/trigger/trigger_service.py | 8 ++++---- api/services/trigger/webhook_service.py | 8 +++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/api/services/trigger/trigger_service.py b/api/services/trigger/trigger_service.py index c47c98c4de..7f12c2e19c 100644 --- a/api/services/trigger/trigger_service.py +++ b/api/services/trigger/trigger_service.py @@ -210,7 +210,7 @@ class TriggerService: for node_info in nodes_in_graph: node_id = node_info["node_id"] # firstly check if the node exists in cache - if not redis_client.get(f"{cls.__PLUGIN_TRIGGER_NODE_CACHE_KEY__}:{node_id}"): + if not redis_client.get(f"{cls.__PLUGIN_TRIGGER_NODE_CACHE_KEY__}:{app.id}:{node_id}"): not_found_in_cache.append(node_info) continue @@ -255,7 +255,7 @@ class TriggerService: subscription_id=node_info["subscription_id"], ) redis_client.set( - f"{cls.__PLUGIN_TRIGGER_NODE_CACHE_KEY__}:{node_info['node_id']}", + f"{cls.__PLUGIN_TRIGGER_NODE_CACHE_KEY__}:{app.id}:{node_info['node_id']}", cache.model_dump_json(), ex=60 * 60, ) @@ -285,7 +285,7 @@ class TriggerService: subscription_id=node_info["subscription_id"], ) redis_client.set( - f"{cls.__PLUGIN_TRIGGER_NODE_CACHE_KEY__}:{node_id}", + f"{cls.__PLUGIN_TRIGGER_NODE_CACHE_KEY__}:{app.id}:{node_id}", cache.model_dump_json(), ex=60 * 60, ) @@ -295,7 +295,7 @@ class TriggerService: for node_id in nodes_id_in_db: if node_id not in nodes_id_in_graph: session.delete(nodes_id_in_db[node_id]) - redis_client.delete(f"{cls.__PLUGIN_TRIGGER_NODE_CACHE_KEY__}:{node_id}") + redis_client.delete(f"{cls.__PLUGIN_TRIGGER_NODE_CACHE_KEY__}:{app.id}:{node_id}") session.commit() except Exception: logger.exception("Failed to sync plugin trigger relationships for app %s", app.id) diff --git a/api/services/trigger/webhook_service.py b/api/services/trigger/webhook_service.py index e2be4934e9..6e0ee7a191 100644 --- a/api/services/trigger/webhook_service.py +++ b/api/services/trigger/webhook_service.py @@ -833,7 +833,7 @@ class WebhookService: not_found_in_cache: list[str] = [] for node_id in nodes_id_in_graph: # firstly check if the node exists in cache - if not redis_client.get(f"{cls.__WEBHOOK_NODE_CACHE_KEY__}:{node_id}"): + if not redis_client.get(f"{cls.__WEBHOOK_NODE_CACHE_KEY__}:{app.id}:{node_id}"): not_found_in_cache.append(node_id) continue @@ -866,14 +866,16 @@ class WebhookService: session.add(webhook_record) session.flush() cache = Cache(record_id=webhook_record.id, node_id=node_id, webhook_id=webhook_record.webhook_id) - redis_client.set(f"{cls.__WEBHOOK_NODE_CACHE_KEY__}:{node_id}", cache.model_dump_json(), ex=60 * 60) + redis_client.set( + f"{cls.__WEBHOOK_NODE_CACHE_KEY__}:{app.id}:{node_id}", cache.model_dump_json(), ex=60 * 60 + ) session.commit() # delete the nodes not found in the graph for node_id in nodes_id_in_db: if node_id not in nodes_id_in_graph: session.delete(nodes_id_in_db[node_id]) - redis_client.delete(f"{cls.__WEBHOOK_NODE_CACHE_KEY__}:{node_id}") + redis_client.delete(f"{cls.__WEBHOOK_NODE_CACHE_KEY__}:{app.id}:{node_id}") session.commit() except Exception: logger.exception("Failed to sync webhook relationships for app %s", app.id)