Skip to content

Commit e1f1183

Browse files
csweichelroboquat
authored andcommitted
[ws-manager-bridge] Support forced cluster dereg
1 parent 158acc4 commit e1f1183

File tree

6 files changed

+99
-50
lines changed

6 files changed

+99
-50
lines changed

components/ws-manager-bridge-api/cluster-service.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ message UpdateResponse {}
107107

108108
message DeregisterRequest {
109109
string name = 1;
110+
bool force = 2;
110111
}
111112

112113
message DeregisterResponse {}

components/ws-manager-bridge-api/go/cluster-service.pb.go

Lines changed: 56 additions & 47 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/ws-manager-bridge-api/typescript/src/cluster-service_pb.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,8 @@ export namespace UpdateResponse {
423423
export class DeregisterRequest extends jspb.Message {
424424
getName(): string;
425425
setName(value: string): DeregisterRequest;
426+
getForce(): boolean;
427+
setForce(value: boolean): DeregisterRequest;
426428

427429
serializeBinary(): Uint8Array;
428430
toObject(includeInstance?: boolean): DeregisterRequest.AsObject;
@@ -437,6 +439,7 @@ export class DeregisterRequest extends jspb.Message {
437439
export namespace DeregisterRequest {
438440
export type AsObject = {
439441
name: string,
442+
force: boolean,
440443
}
441444
}
442445

components/ws-manager-bridge-api/typescript/src/cluster-service_pb.js

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3266,7 +3266,8 @@ proto.workspacemanagerbridge.DeregisterRequest.prototype.toObject = function(opt
32663266
*/
32673267
proto.workspacemanagerbridge.DeregisterRequest.toObject = function(includeInstance, msg) {
32683268
var f, obj = {
3269-
name: jspb.Message.getFieldWithDefault(msg, 1, "")
3269+
name: jspb.Message.getFieldWithDefault(msg, 1, ""),
3270+
force: jspb.Message.getBooleanFieldWithDefault(msg, 2, false)
32703271
};
32713272

32723273
if (includeInstance) {
@@ -3307,6 +3308,10 @@ proto.workspacemanagerbridge.DeregisterRequest.deserializeBinaryFromReader = fun
33073308
var value = /** @type {string} */ (reader.readString());
33083309
msg.setName(value);
33093310
break;
3311+
case 2:
3312+
var value = /** @type {boolean} */ (reader.readBool());
3313+
msg.setForce(value);
3314+
break;
33103315
default:
33113316
reader.skipField();
33123317
break;
@@ -3343,6 +3348,13 @@ proto.workspacemanagerbridge.DeregisterRequest.serializeBinaryToWriter = functio
33433348
f
33443349
);
33453350
}
3351+
f = message.getForce();
3352+
if (f) {
3353+
writer.writeBool(
3354+
2,
3355+
f
3356+
);
3357+
}
33463358
};
33473359

33483360

@@ -3364,6 +3376,24 @@ proto.workspacemanagerbridge.DeregisterRequest.prototype.setName = function(valu
33643376
};
33653377

33663378

3379+
/**
3380+
* optional bool force = 2;
3381+
* @return {boolean}
3382+
*/
3383+
proto.workspacemanagerbridge.DeregisterRequest.prototype.getForce = function() {
3384+
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false));
3385+
};
3386+
3387+
3388+
/**
3389+
* @param {boolean} value
3390+
* @return {!proto.workspacemanagerbridge.DeregisterRequest} returns this
3391+
*/
3392+
proto.workspacemanagerbridge.DeregisterRequest.prototype.setForce = function(value) {
3393+
return jspb.Message.setProto3BooleanField(this, 2, value);
3394+
};
3395+
3396+
33673397

33683398

33693399

components/ws-manager-bridge/src/cluster-service-server.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,8 @@ export class ClusterService implements IClusterServiceServer {
240240

241241
const instances = await this.workspaceDB.findRegularRunningInstances();
242242
const relevantInstances = instances.filter(i => i.region === req.name);
243-
if (relevantInstances.length > 0) {
243+
if (!req.force && relevantInstances.length > 0) {
244+
log.info({}, "forced cluster deregistration even though there are still instances running", {cluster: req.name});
244245
throw new GRPCError(grpc.status.FAILED_PRECONDITION, `cluster is not empty (${relevantInstances.length} instances remaining)`);
245246
}
246247

dev/gpctl/cmd/clusters-deregister.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import (
1515
"github.com/gitpod-io/gitpod/ws-manager-bridge/api"
1616
)
1717

18+
var clustersDeregisterOpts struct {
19+
Force bool
20+
}
21+
1822
// clustersDeregisterCmd represents the clustersDeregisterCmd command
1923
var clustersDeregisterCmd = &cobra.Command{
2024
Use: "deregister --name [cluster name]",
@@ -31,7 +35,7 @@ var clustersDeregisterCmd = &cobra.Command{
3135
defer conn.Close()
3236

3337
name := getClusterName()
34-
_, err = client.Deregister(ctx, &api.DeregisterRequest{Name: name})
38+
_, err = client.Deregister(ctx, &api.DeregisterRequest{Name: name, Force: clustersDeregisterOpts.Force})
3539
if err != nil && err != io.EOF {
3640
log.Fatal(err)
3741
}
@@ -42,4 +46,5 @@ var clustersDeregisterCmd = &cobra.Command{
4246

4347
func init() {
4448
clustersCmd.AddCommand(clustersDeregisterCmd)
49+
clustersDeregisterCmd.Flags().BoolVar(&clustersDeregisterOpts.Force, "force", false, "⚠️💥 force cluster deregistration even if there are still instances running. Use with great caution: this will break people's experience.")
4550
}

0 commit comments

Comments
 (0)