Add flag to disable caching responses

This commit is contained in:
Shreerang Kale 2025-07-28 17:11:17 +05:30
parent 0735b30822
commit 07c6888bb6
4 changed files with 19 additions and 11 deletions

View File

@ -7,6 +7,7 @@ QUICKNODE_TOKEN=your_token_here
# Proxy settings # Proxy settings
PROXY_PORT=8545 PROXY_PORT=8545
CACHE_SIZE_GB=100 CACHE_SIZE_GB=100
DISABLE_CACHE=true
BACKOFF_MINUTES=30 BACKOFF_MINUTES=30
# Logging # Logging

View File

@ -36,6 +36,7 @@ def load_config() -> dict:
return { return {
"proxy_port": int(os.getenv("PROXY_PORT", 8545)), "proxy_port": int(os.getenv("PROXY_PORT", 8545)),
"cache_size_gb": int(os.getenv("CACHE_SIZE_GB", 100)), "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)), "backoff_minutes": int(os.getenv("BACKOFF_MINUTES", 30)),
"log_level": os.getenv("LOG_LEVEL", "INFO"), "log_level": os.getenv("LOG_LEVEL", "INFO"),
"error_db_path": os.getenv("ERROR_DB_PATH", "./errors.db"), "error_db_path": os.getenv("ERROR_DB_PATH", "./errors.db"),
@ -55,7 +56,7 @@ def create_app(config: dict) -> web.Application:
providers = create_providers() providers = create_providers()
cache = Cache(size_limit_gb=config["cache_size_gb"]) cache = Cache(size_limit_gb=config["cache_size_gb"])
error_logger = ErrorLogger(db_path=config["error_db_path"]) 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['router'] = router
app['config'] = config app['config'] = config
@ -72,7 +73,10 @@ def main() -> None:
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
logger.info(f"Starting Solana RPC Proxy on port {config['proxy_port']}") 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") logger.info(f"Provider backoff time: {config['backoff_minutes']} minutes")
app = create_app(config) app = create_app(config)

View File

@ -8,22 +8,24 @@ from errors import ErrorLogger
class Router: 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.providers = providers
self.cache = cache self.cache = cache
self.error_logger = error_logger self.error_logger = error_logger
self.disable_cache = disable_cache
self.current_provider_index = 0 self.current_provider_index = 0
self.logger = logging.getLogger(__name__) self.logger = logging.getLogger(__name__)
async def route_request(self, method: str, params: Dict[str, Any]) -> Dict[str, Any]: async def route_request(self, method: str, params: Dict[str, Any]) -> Dict[str, Any]:
request = {"method": method, "params": params} request = {"method": method, "params": params}
cached_response = self.cache.get(method, params) if not self.disable_cache:
if cached_response: cached_response = self.cache.get(method, params)
self.logger.debug(f"Cache hit for {method}") if cached_response:
cached_response["_cached"] = True self.logger.debug(f"Cache hit for {method}")
cached_response["_provider"] = "cache" cached_response["_cached"] = True
return cached_response cached_response["_provider"] = "cache"
return cached_response
for attempt in range(len(self.providers)): for attempt in range(len(self.providers)):
provider = self.get_next_available_provider() provider = self.get_next_available_provider()
@ -40,7 +42,8 @@ class Router:
transformed_response["_cached"] = False transformed_response["_cached"] = False
transformed_response["_provider"] = provider.name 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}") self.logger.info(f"Request succeeded via {provider.name}")
return transformed_response return transformed_response

View File

@ -127,7 +127,7 @@ class WebSocketProxy:
method = transformed_response.get("method", "") method = transformed_response.get("method", "")
params = transformed_response.get("params", {}) 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) self.router.cache.set(method, params, transformed_response)
await client_ws.send_str(json.dumps(transformed_response)) await client_ws.send_str(json.dumps(transformed_response))