From cf80a55659774108aec98a71a7ea876bf5eb5c59 Mon Sep 17 00:00:00 2001 From: Valery Piashchynski Date: Mon, 11 May 2026 20:27:26 +0200 Subject: [PATCH] feat(service): mark GetStatus, GetStatuses, ListServices as NO_SIDE_EFFECTS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Annotate the three read-only methods on service.v1.ServiceManager with idempotency_level = NO_SIDE_EFFECTS so Connect-RPC handlers accept HTTP GET for them. The service plugin's read endpoints can then sit behind CDN/proxy caches and be probed from cacheable URLs. CreateService, Terminate, Restart stay POST-only — each mutates the service plugin's process table. Additive proto change; existing POST clients keep working. --- roadrunner/api/service/v1/service_rpc.proto | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/roadrunner/api/service/v1/service_rpc.proto b/roadrunner/api/service/v1/service_rpc.proto index 5273882..63f465b 100644 --- a/roadrunner/api/service/v1/service_rpc.proto +++ b/roadrunner/api/service/v1/service_rpc.proto @@ -15,7 +15,13 @@ service ServiceManager { rpc CreateService(Create) returns (Response); rpc Terminate(Service) returns (Response); rpc Restart(Service) returns (Response); - rpc GetStatus(Service) returns (Status); - rpc GetStatuses(Service) returns (Statuses); - rpc ListServices(Service) returns (List); + rpc GetStatus(Service) returns (Status) { + option idempotency_level = NO_SIDE_EFFECTS; + } + rpc GetStatuses(Service) returns (Statuses) { + option idempotency_level = NO_SIDE_EFFECTS; + } + rpc ListServices(Service) returns (List) { + option idempotency_level = NO_SIDE_EFFECTS; + } }