diff --git a/packages/api/internal/api/api.gen.go b/packages/api/internal/api/api.gen.go index 0f02092ca7..631d59f362 100644 --- a/packages/api/internal/api/api.gen.go +++ b/packages/api/internal/api/api.gen.go @@ -72,6 +72,7 @@ const ( NodeStatusConnecting NodeStatus = "connecting" NodeStatusDraining NodeStatus = "draining" NodeStatusReady NodeStatus = "ready" + NodeStatusStandby NodeStatus = "standby" NodeStatusUnhealthy NodeStatus = "unhealthy" ) @@ -471,7 +472,9 @@ type Node struct { // ServiceInstanceID Service instance identifier of the node ServiceInstanceID string `json:"serviceInstanceID"` - // Status Status of the node + // Status Status of the node. + // - draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. + // - standby: the node is not actively used, but it can return to ready and continue serving traffic. Status NodeStatus `json:"status"` // Version Version of the orchestrator @@ -508,7 +511,9 @@ type NodeDetail struct { // ServiceInstanceID Service instance identifier of the node ServiceInstanceID string `json:"serviceInstanceID"` - // Status Status of the node + // Status Status of the node. + // - draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. + // - standby: the node is not actively used, but it can return to ready and continue serving traffic. Status NodeStatus `json:"status"` // Version Version of the orchestrator @@ -539,7 +544,9 @@ type NodeMetrics struct { MemoryUsedBytes uint64 `json:"memoryUsedBytes"` } -// NodeStatus Status of the node +// NodeStatus Status of the node. +// - draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. +// - standby: the node is not actively used, but it can return to ready and continue serving traffic. type NodeStatus string // NodeStatusChange defines model for NodeStatusChange. @@ -547,7 +554,9 @@ type NodeStatusChange struct { // ClusterID Identifier of the cluster ClusterID *openapi_types.UUID `json:"clusterID,omitempty"` - // Status Status of the node + // Status Status of the node. + // - draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. + // - standby: the node is not actively used, but it can return to ready and continue serving traffic. Status NodeStatus `json:"status"` } @@ -12080,162 +12089,164 @@ func RegisterHandlersWithOptions(router gin.IRouter, si ServerInterface, options // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/packages/api/internal/orchestrator/nodemanager/client.go b/packages/api/internal/orchestrator/nodemanager/client.go index 7524a32931..b7acc734a4 100644 --- a/packages/api/internal/orchestrator/nodemanager/client.go +++ b/packages/api/internal/orchestrator/nodemanager/client.go @@ -20,6 +20,7 @@ var OrchestratorToApiNodeStateMapper = map[orchestratorinfo.ServiceInfoStatus]ap orchestratorinfo.ServiceInfoStatus_Healthy: api.NodeStatusReady, orchestratorinfo.ServiceInfoStatus_Draining: api.NodeStatusDraining, orchestratorinfo.ServiceInfoStatus_Unhealthy: api.NodeStatusUnhealthy, + orchestratorinfo.ServiceInfoStatus_Standby: api.NodeStatusStandby, } func NewClient(tracerProvider trace.TracerProvider, meterProvider metric.MeterProvider, host string) (*clusters.GRPCClient, error) { diff --git a/packages/api/internal/orchestrator/nodemanager/status.go b/packages/api/internal/orchestrator/nodemanager/status.go index 8c45c0f66a..3065fdd707 100644 --- a/packages/api/internal/orchestrator/nodemanager/status.go +++ b/packages/api/internal/orchestrator/nodemanager/status.go @@ -16,6 +16,7 @@ var ApiNodeToOrchestratorStateMapper = map[api.NodeStatus]orchestratorinfo.Servi api.NodeStatusReady: orchestratorinfo.ServiceInfoStatus_Healthy, api.NodeStatusDraining: orchestratorinfo.ServiceInfoStatus_Draining, api.NodeStatusUnhealthy: orchestratorinfo.ServiceInfoStatus_Unhealthy, + api.NodeStatusStandby: orchestratorinfo.ServiceInfoStatus_Standby, } func (n *Node) Status() api.NodeStatus { diff --git a/packages/orchestrator/info.proto b/packages/orchestrator/info.proto index 63f1ecfb82..9453b8caa9 100644 --- a/packages/orchestrator/info.proto +++ b/packages/orchestrator/info.proto @@ -8,8 +8,11 @@ option go_package = "https://github.com/e2b-dev/infra/orchestrator"; // needs to be different from the enumeration in the template manager enum ServiceInfoStatus { Healthy = 0; + // Draining means the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. Draining = 1; Unhealthy = 2; + // Standby means the node is not actively used, but it can return to Healthy and continues serving traffic. + Standby = 3; } enum ServiceInfoRole { diff --git a/packages/orchestrator/internal/healthcheck/healthcheck.go b/packages/orchestrator/internal/healthcheck/healthcheck.go index 3df4b93c86..6f1557b962 100644 --- a/packages/orchestrator/internal/healthcheck/healthcheck.go +++ b/packages/orchestrator/internal/healthcheck/healthcheck.go @@ -39,7 +39,7 @@ func (h *Healthcheck) getStatus() e2bHealth.Status { switch h.info.GetStatus() { case e2borchestratorinfo.ServiceInfoStatus_Healthy: return e2bHealth.Healthy - case e2borchestratorinfo.ServiceInfoStatus_Draining: + case e2borchestratorinfo.ServiceInfoStatus_Draining, e2borchestratorinfo.ServiceInfoStatus_Standby: return e2bHealth.Draining } diff --git a/packages/orchestrator/main.go b/packages/orchestrator/main.go index 9582738807..6d58e75ac7 100644 --- a/packages/orchestrator/main.go +++ b/packages/orchestrator/main.go @@ -673,7 +673,7 @@ func run(config cfg.Config) (success bool) { // Mark service draining if not already. // If service stats was previously changed via API, we don't want to override it. logger.L().Info(ctx, "Starting drain phase", zap.Int("sandbox_count", sandboxes.Count())) - if serviceInfo.GetStatus() == orchestratorinfo.ServiceInfoStatus_Healthy { + if status := serviceInfo.GetStatus(); status == orchestratorinfo.ServiceInfoStatus_Healthy || status == orchestratorinfo.ServiceInfoStatus_Standby { serviceInfo.SetStatus(ctx, orchestratorinfo.ServiceInfoStatus_Draining) // Wait for draining state to propagate to all consumers diff --git a/packages/shared/pkg/grpc/orchestrator-info/info.pb.go b/packages/shared/pkg/grpc/orchestrator-info/info.pb.go index 72af47eef7..ee0ab18150 100644 --- a/packages/shared/pkg/grpc/orchestrator-info/info.pb.go +++ b/packages/shared/pkg/grpc/orchestrator-info/info.pb.go @@ -26,9 +26,12 @@ const ( type ServiceInfoStatus int32 const ( - ServiceInfoStatus_Healthy ServiceInfoStatus = 0 + ServiceInfoStatus_Healthy ServiceInfoStatus = 0 + // Draining means the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. ServiceInfoStatus_Draining ServiceInfoStatus = 1 ServiceInfoStatus_Unhealthy ServiceInfoStatus = 2 + // Standby means the node is not actively used, but it can return to Healthy and continues serving traffic. + ServiceInfoStatus_Standby ServiceInfoStatus = 3 ) // Enum value maps for ServiceInfoStatus. @@ -37,11 +40,13 @@ var ( 0: "Healthy", 1: "Draining", 2: "Unhealthy", + 3: "Standby", } ServiceInfoStatus_value = map[string]int32{ "Healthy": 0, "Draining": 1, "Unhealthy": 2, + "Standby": 3, } ) @@ -641,28 +646,29 @@ var file_info_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, 0x3d, 0x0a, 0x11, 0x53, 0x65, 0x72, + 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, 0x4a, 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x6e, 0x68, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x10, 0x02, 0x2a, 0x38, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x10, 0x00, - 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x10, 0x01, 0x32, 0x98, 0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4c, 0x0a, 0x15, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x1b, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x2f, 0x5a, - 0x2d, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, - 0x61, 0x2f, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x74, 0x61, 0x6e, + 0x64, 0x62, 0x79, 0x10, 0x03, 0x2a, 0x38, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x10, 0x00, 0x12, 0x10, 0x0a, + 0x0c, 0x4f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x10, 0x01, 0x32, + 0x98, 0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x3b, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x15, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x76, 0x65, + 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x1b, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x2f, 0x5a, 0x2d, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x6f, + 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/packages/shared/pkg/http/edge/generated.go b/packages/shared/pkg/http/edge/generated.go index 17da390630..d77b8d8607 100644 --- a/packages/shared/pkg/http/edge/generated.go +++ b/packages/shared/pkg/http/edge/generated.go @@ -24,6 +24,7 @@ const ( const ( Draining ClusterNodeStatus = "draining" Healthy ClusterNodeStatus = "healthy" + Standby ClusterNodeStatus = "standby" Unhealthy ClusterNodeStatus = "unhealthy" ) diff --git a/spec/openapi-edge.yml b/spec/openapi-edge.yml index d21db2d0c8..e30ef1ffa3 100644 --- a/spec/openapi-edge.yml +++ b/spec/openapi-edge.yml @@ -78,6 +78,7 @@ components: - healthy - draining - unhealthy + - standby ClusterOrchestratorRole: type: string diff --git a/spec/openapi.yml b/spec/openapi.yml index fb9cc11617..c42d173c23 100644 --- a/spec/openapi.yml +++ b/spec/openapi.yml @@ -1294,17 +1294,22 @@ components: NodeStatus: type: string - description: Status of the node + description: | + Status of the node. + - draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. + - standby: the node is not actively used, but it can return to ready and continue serving traffic. enum: - ready - draining - connecting - unhealthy + - standby x-enum-varnames: - NodeStatusReady - NodeStatusDraining - NodeStatusConnecting - NodeStatusUnhealthy + - NodeStatusStandby NodeStatusChange: required: diff --git a/tests/integration/internal/api/generated.go b/tests/integration/internal/api/generated.go index e1b1f028aa..5cda151730 100644 --- a/tests/integration/internal/api/generated.go +++ b/tests/integration/internal/api/generated.go @@ -67,6 +67,7 @@ const ( NodeStatusConnecting NodeStatus = "connecting" NodeStatusDraining NodeStatus = "draining" NodeStatusReady NodeStatus = "ready" + NodeStatusStandby NodeStatus = "standby" NodeStatusUnhealthy NodeStatus = "unhealthy" ) @@ -466,7 +467,9 @@ type Node struct { // ServiceInstanceID Service instance identifier of the node ServiceInstanceID string `json:"serviceInstanceID"` - // Status Status of the node + // Status Status of the node. + // - draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. + // - standby: the node is not actively used, but it can return to ready and continue serving traffic. Status NodeStatus `json:"status"` // Version Version of the orchestrator @@ -503,7 +506,9 @@ type NodeDetail struct { // ServiceInstanceID Service instance identifier of the node ServiceInstanceID string `json:"serviceInstanceID"` - // Status Status of the node + // Status Status of the node. + // - draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. + // - standby: the node is not actively used, but it can return to ready and continue serving traffic. Status NodeStatus `json:"status"` // Version Version of the orchestrator @@ -534,7 +539,9 @@ type NodeMetrics struct { MemoryUsedBytes uint64 `json:"memoryUsedBytes"` } -// NodeStatus Status of the node +// NodeStatus Status of the node. +// - draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. +// - standby: the node is not actively used, but it can return to ready and continue serving traffic. type NodeStatus string // NodeStatusChange defines model for NodeStatusChange. @@ -542,7 +549,9 @@ type NodeStatusChange struct { // ClusterID Identifier of the cluster ClusterID *openapi_types.UUID `json:"clusterID,omitempty"` - // Status Status of the node + // Status Status of the node. + // - draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done. + // - standby: the node is not actively used, but it can return to ready and continue serving traffic. Status NodeStatus `json:"status"` }