From 1506cc44d0810402c928efeffcbdba4b0ea58216 Mon Sep 17 00:00:00 2001 From: ImMin5 Date: Tue, 4 Mar 2025 11:30:16 +0900 Subject: [PATCH] fix: fix get endpoint error with current index --- .../plugin/manager/repository_manager.py | 2 +- src/spaceone/plugin/service/plugin_service.py | 22 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/spaceone/plugin/manager/repository_manager.py b/src/spaceone/plugin/manager/repository_manager.py index 066b869..1cd738c 100644 --- a/src/spaceone/plugin/manager/repository_manager.py +++ b/src/spaceone/plugin/manager/repository_manager.py @@ -34,7 +34,7 @@ def check_plugin_version( if version not in response.get("results", []): raise ERROR_INVALID_PLUGIN_VERSION(plugin_id=plugin_id, version=version) - @cacheable(key="plugin-latest-version:{domain_id}:{plugin_id}", expire=600) + @cacheable(key="plugin-latest-version:{domain_id}:{plugin_id}", expire=300) def get_plugin_latest_version( self, plugin_id: str, domain_id: str, token: str ) -> Union[str, None]: diff --git a/src/spaceone/plugin/service/plugin_service.py b/src/spaceone/plugin/service/plugin_service.py index d3793c8..885b303 100644 --- a/src/spaceone/plugin/service/plugin_service.py +++ b/src/spaceone/plugin/service/plugin_service.py @@ -264,7 +264,9 @@ def _select_endpoint(self, plugin_ref, updated_version=None): f"[_select_endpoint] select endpoint. (index = {current_index}, endpoints = {endpoints})" ) - endpoint = endpoints[installed_plugin.current_index] + endpoint = self._get_current_index_endpoint( + endpoints, installed_plugin.current_index, installed_plugin.plugin_id + ) endpoint_info = {"endpoint": endpoint} @@ -357,3 +359,21 @@ def verify(self, params: dict): self.plugin_mgr.verify_plugin( plugin_endpoint_info.get("endpoint"), api_class, options, secret_data ) + + @staticmethod + def _get_current_index_endpoint( + endpoints: list, current_index: int, plugin_id: str + ) -> str: + try: + return endpoints[current_index] + except IndexError: + randon_index = secrets.randbelow(len(endpoints)) + _LOGGER.debug( + f"[_get_current_index_endpoint] current_index: {current_index}, randon_index: {randon_index}" + ) + return endpoints[randon_index] + except Exception as e: + _LOGGER.error( + f"[_get_current_index_endpoint] plugin_id: {plugin_id}, endpoints: {endpoints}, current_index: {current_index}, error: {e}" + ) + raise ERROR_PLUGIN_ENDPOINT_NOT_FOUND(plugin_id=plugin_id)