From 6543a4705ad5431093385e696e1eeec1e5335b6d Mon Sep 17 00:00:00 2001 From: mindas Date: Fri, 12 Dec 2025 16:12:47 +0000 Subject: [PATCH 1/2] OPS-725 add circuit breaker support between the platform and inventory service --- build.gradle | 2 +- .../proto_service/provisioning_service.proto | 47 +++++++++++++++++++ src/main/swagger/inventory_api.json | 2 +- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 1115471..a9faed8 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ buildscript { } group 'io.bokun.inventory' -version '0.4.6' +version '0.4.7' apply plugin: "com.google.protobuf" apply plugin: "java" diff --git a/src/main/proto_service/provisioning_service.proto b/src/main/proto_service/provisioning_service.proto index 2ae5a5a..a385fb8 100644 --- a/src/main/proto_service/provisioning_service.proto +++ b/src/main/proto_service/provisioning_service.proto @@ -8,6 +8,16 @@ option java_package = "io.bokun.inventory.service.provisioning.grpc"; service ProvisioningService { // Returns IS build information rpc GetBuildInfo (GetBuildInfoRequest) returns (GetBuildInfoResponse) {} + + // List plugin/breaker type pairs which have breakers open. + // Note: this will return relevant entry even if only some servers in the cluster have this open (as opposed to all). + rpc GetOpenCircuitBreakers (GetOpenCircuitBreakersRequest) returns (GetOpenCircuitBreakersResponse) {} + + // Forces certain plugin/breaker type to open the breaker. + rpc OpenBreaker (OpenCircuitBreakerRequest) returns (OpenCircuitBreakerResponse) {} + + // Forces certain plugin/breaker type to close the breaker. + rpc CloseBreaker (CloseCircuitBreakerRequest) returns (CloseCircuitBreakerResponse) {} } message GetBuildInfoRequest { @@ -17,3 +27,40 @@ message GetBuildInfoResponse { // May contain elements such as branch, build number, etc. Does not imply any particular structure. Mandatory. string buildInformation = 1; } + +message GetOpenCircuitBreakersRequest { +} + +message GetOpenCircuitBreakersResponse { + // a list of breaker type/plugin id pairs which have the breaker open + repeated CircuitBreakerMetadata metadata = 1; +} + +message CircuitBreakerMetadata { + enum BreakerType { + UNKNOWN = 0; + AVAILABILITY = 1; + } + + // mandatory + BreakerType type = 1; + + // mandatory + string pluginId = 2; +} + +message OpenCircuitBreakerRequest { + // a list of breaker type/plugin id pairs which are requested to have them open + repeated CircuitBreakerMetadata metadata = 1; +} + +message OpenCircuitBreakerResponse { +} + +message CloseCircuitBreakerRequest { + // a list of breaker type/plugin id pairs which are requested to have them closed + repeated CircuitBreakerMetadata metadata = 1; +} + +message CloseCircuitBreakerResponse { +} diff --git a/src/main/swagger/inventory_api.json b/src/main/swagger/inventory_api.json index a7e3a11..42f0251 100644 --- a/src/main/swagger/inventory_api.json +++ b/src/main/swagger/inventory_api.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "description": "Channel Manager REST API. You can find out more about Channel Manager [here](https://www.bokun.io/sell/channel-manager).", - "version": "0.4.6", + "version": "0.4.7", "title": "Channel Manager REST API", "contact": { "email": "support@bokun.io" From 4d603be3c0be507bd95efa0b5e86c88182f98b08 Mon Sep 17 00:00:00 2001 From: mindas Date: Tue, 16 Dec 2025 10:09:30 +0000 Subject: [PATCH 2/2] OPS-725 rename models to make a distinction between explicit mute/unmute VS circuit breaking which happens automatically --- build.gradle | 2 +- .../proto_service/provisioning_service.proto | 74 +++++++++++++------ src/main/swagger/inventory_api.json | 2 +- 3 files changed, 52 insertions(+), 26 deletions(-) diff --git a/build.gradle b/build.gradle index a9faed8..98087f1 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ buildscript { } group 'io.bokun.inventory' -version '0.4.7' +version '0.4.9' apply plugin: "com.google.protobuf" apply plugin: "java" diff --git a/src/main/proto_service/provisioning_service.proto b/src/main/proto_service/provisioning_service.proto index a385fb8..9ebe372 100644 --- a/src/main/proto_service/provisioning_service.proto +++ b/src/main/proto_service/provisioning_service.proto @@ -9,15 +9,16 @@ service ProvisioningService { // Returns IS build information rpc GetBuildInfo (GetBuildInfoRequest) returns (GetBuildInfoResponse) {} - // List plugin/breaker type pairs which have breakers open. - // Note: this will return relevant entry even if only some servers in the cluster have this open (as opposed to all). - rpc GetOpenCircuitBreakers (GetOpenCircuitBreakersRequest) returns (GetOpenCircuitBreakersResponse) {} + // List plugin/toggle pairs which have toggles open (e.g. disarm availability). + rpc GetMutedPlugins (GetMutedPluginsRequest) returns (GetMutedPluginsResponse) {} - // Forces certain plugin/breaker type to open the breaker. - rpc OpenBreaker (OpenCircuitBreakerRequest) returns (OpenCircuitBreakerResponse) {} + // Forces certain plugin/toggle type to disarm. + rpc MutePlugin(MutePluginRequest) returns (MutePluginResponse) {} - // Forces certain plugin/breaker type to close the breaker. - rpc CloseBreaker (CloseCircuitBreakerRequest) returns (CloseCircuitBreakerResponse) {} + // Forces certain plugin/toggle type to exit disarmed state. + rpc UnmutePlugin (UnmutePluginRequest) returns (UnmutePluginResponse) {} + + rpc GetOpenBreakers (GetOpenBreakersRequest) returns (GetOpenBreakersResponse) {} } message GetBuildInfoRequest { @@ -28,39 +29,64 @@ message GetBuildInfoResponse { string buildInformation = 1; } -message GetOpenCircuitBreakersRequest { +message GetMutedPluginsRequest { + // for which type of functionality results should be retrieved? Mandatory + FunctionType functionType = 1; } -message GetOpenCircuitBreakersResponse { - // a list of breaker type/plugin id pairs which have the breaker open - repeated CircuitBreakerMetadata metadata = 1; +message GetMutedPluginsResponse { + // a list of type/plugin id pairs which have the functionality muted + repeated FunctionTypePlugin metadata = 1; } -message CircuitBreakerMetadata { - enum BreakerType { - UNKNOWN = 0; - AVAILABILITY = 1; - } +enum FunctionType { + UNKNOWN = 0; + AVAILABILITY = 1; +} +// wrapper which contains function type & plugin id +message FunctionTypePlugin { // mandatory - BreakerType type = 1; + FunctionType type = 1; // mandatory string pluginId = 2; } -message OpenCircuitBreakerRequest { +message MutePluginRequest { // a list of breaker type/plugin id pairs which are requested to have them open - repeated CircuitBreakerMetadata metadata = 1; + repeated FunctionTypePlugin metadata = 1; +} + +message MutePluginResponse { } -message OpenCircuitBreakerResponse { +message UnmutePluginRequest { + // a list of type/plugin id pairs which are requested to have them closed + repeated FunctionTypePlugin metadata = 1; } -message CloseCircuitBreakerRequest { - // a list of breaker type/plugin id pairs which are requested to have them closed - repeated CircuitBreakerMetadata metadata = 1; +message UnmutePluginResponse { +} + +message GetOpenBreakersRequest { + // for which type of functionality results should be retrieved? Mandatory + FunctionType functionType = 1; +} + +// wrapper which contains function type & plugin id & counter +message FunctionTypePluginCount { + // mandatory + FunctionType type = 1; + + // mandatory + string pluginId = 2; + + // how many nodes have this breaker open? Mandatory + int32 count = 3; } -message CloseCircuitBreakerResponse { +message GetOpenBreakersResponse { + // a list of breaker type/plugin id pairs which have the breaker open, plus count (how many nodes have this open) + repeated FunctionTypePluginCount metadata = 1; } diff --git a/src/main/swagger/inventory_api.json b/src/main/swagger/inventory_api.json index 42f0251..ee8a61f 100644 --- a/src/main/swagger/inventory_api.json +++ b/src/main/swagger/inventory_api.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "description": "Channel Manager REST API. You can find out more about Channel Manager [here](https://www.bokun.io/sell/channel-manager).", - "version": "0.4.7", + "version": "0.4.9", "title": "Channel Manager REST API", "contact": { "email": "support@bokun.io"