From 07c6888bb6030098483b90fba7d7070d9c2126aa Mon Sep 17 00:00:00 2001 From: Shreerang Kale Date: Mon, 28 Jul 2025 17:11:17 +0530 Subject: [PATCH] Add flag to disable caching responses --- .env.example | 1 + main.py | 8 ++++++-- router.py | 19 +++++++++++-------- ws_proxy.py | 2 +- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/.env.example b/.env.example index 845f69b..afc68a9 100644 --- a/.env.example +++ b/.env.example @@ -7,6 +7,7 @@ QUICKNODE_TOKEN=your_token_here # Proxy settings PROXY_PORT=8545 CACHE_SIZE_GB=100 +DISABLE_CACHE=true BACKOFF_MINUTES=30 # Logging diff --git a/main.py b/main.py index 3914a43..cf8785a 100644 --- a/main.py +++ b/main.py @@ -36,6 +36,7 @@ def load_config() -> dict: return { "proxy_port": int(os.getenv("PROXY_PORT", 8545)), "cache_size_gb": int(os.getenv("CACHE_SIZE_GB", 100)), + "disable_cache": os.getenv("DISABLE_CACHE", "true").lower() == "true", "backoff_minutes": int(os.getenv("BACKOFF_MINUTES", 30)), "log_level": os.getenv("LOG_LEVEL", "INFO"), "error_db_path": os.getenv("ERROR_DB_PATH", "./errors.db"), @@ -55,7 +56,7 @@ def create_app(config: dict) -> web.Application: providers = create_providers() cache = Cache(size_limit_gb=config["cache_size_gb"]) error_logger = ErrorLogger(db_path=config["error_db_path"]) - router = Router(providers, cache, error_logger) + router = Router(providers, cache, error_logger, config["disable_cache"]) app['router'] = router app['config'] = config @@ -72,7 +73,10 @@ def main() -> None: logger = logging.getLogger(__name__) logger.info(f"Starting Solana RPC Proxy on port {config['proxy_port']}") - logger.info(f"Cache size limit: {config['cache_size_gb']}GB") + if config['disable_cache']: + logger.info("Cache is DISABLED - all responses will be fresh") + else: + logger.info(f"Cache size limit: {config['cache_size_gb']}GB") logger.info(f"Provider backoff time: {config['backoff_minutes']} minutes") app = create_app(config) diff --git a/router.py b/router.py index fd1dca5..19c9693 100644 --- a/router.py +++ b/router.py @@ -8,22 +8,24 @@ from errors import ErrorLogger class Router: - def __init__(self, providers: List[Provider], cache: Cache, error_logger: ErrorLogger): + def __init__(self, providers: List[Provider], cache: Cache, error_logger: ErrorLogger, disable_cache: bool = False): self.providers = providers self.cache = cache self.error_logger = error_logger + self.disable_cache = disable_cache self.current_provider_index = 0 self.logger = logging.getLogger(__name__) async def route_request(self, method: str, params: Dict[str, Any]) -> Dict[str, Any]: request = {"method": method, "params": params} - cached_response = self.cache.get(method, params) - if cached_response: - self.logger.debug(f"Cache hit for {method}") - cached_response["_cached"] = True - cached_response["_provider"] = "cache" - return cached_response + if not self.disable_cache: + cached_response = self.cache.get(method, params) + if cached_response: + self.logger.debug(f"Cache hit for {method}") + cached_response["_cached"] = True + cached_response["_provider"] = "cache" + return cached_response for attempt in range(len(self.providers)): provider = self.get_next_available_provider() @@ -40,7 +42,8 @@ class Router: transformed_response["_cached"] = False transformed_response["_provider"] = provider.name - self.cache.set(method, params, transformed_response) + if not self.disable_cache: + self.cache.set(method, params, transformed_response) self.logger.info(f"Request succeeded via {provider.name}") return transformed_response diff --git a/ws_proxy.py b/ws_proxy.py index 0885337..8477c27 100644 --- a/ws_proxy.py +++ b/ws_proxy.py @@ -127,7 +127,7 @@ class WebSocketProxy: method = transformed_response.get("method", "") params = transformed_response.get("params", {}) - if method and params: + if method and params and not self.router.disable_cache: self.router.cache.set(method, params, transformed_response) await client_ws.send_str(json.dumps(transformed_response))