Skip to content

Commit 1437524

Browse files
committed
expose remove pod API in grpc
1 parent 9c655b8 commit 1437524

14 files changed

+338
-163
lines changed

cluster/calcium/create_container_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func TestClean(t *testing.T) {
9191
initMockConfig()
9292

9393
// delete pod, which will fail because there are remaining nodes
94-
err := mockc.store.DeletePod(podname)
94+
err := mockc.store.RemovePod(podname)
9595
assert.Error(t, err)
9696
assert.Contains(t, err.Error(), "still has nodes")
9797
}

cluster/calcium/meta.go

+4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ func (c *calcium) AddPod(podname, favor, desc string) (*types.Pod, error) {
1616
return c.store.AddPod(podname, favor, desc)
1717
}
1818

19+
func (c *calcium) RemovePod(podname string) error {
20+
return c.store.RemovePod(podname)
21+
}
22+
1923
func (c *calcium) GetPod(podname string) (*types.Pod, error) {
2024
return c.store.GetPod(podname)
2125
}

cluster/calcium/mock_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ func initMockConfig() {
344344
return true
345345
})).Return(nil)
346346

347-
mockStore.On("DeletePod", mockStringType).Return(nil)
347+
mockStore.On("RemovePod", mockStringType).Return(nil)
348348

349349
deployNodeInfo := []coretypes.NodeInfo{
350350
coretypes.NodeInfo{

cluster/cluster.go

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ type Cluster interface {
1010
// meta data methods
1111
ListPods() ([]*types.Pod, error)
1212
AddPod(podname, favor, desc string) (*types.Pod, error)
13+
RemovePod(podname string) error
1314
GetPod(podname string) (*types.Pod, error)
1415
AddNode(nodename, endpoint, podname, cafile, certfile, keyfile string, public bool) (*types.Node, error)
1516
RemoveNode(nodename, podname string) (*types.Pod, error)

devtools/client.py

+16
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,22 @@ def add_pod(ctx, name, favor, desc):
6464
click.echo(click.style('create pod %s successfully' % pod, fg='green'))
6565

6666

67+
@cli.command('pod:remove')
68+
@click.argument('name')
69+
@click.pass_context
70+
def remove_pod(ctx, name):
71+
stub = _get_stub(ctx)
72+
opts = pb.RemovePodOptions(name=name)
73+
74+
try:
75+
stub.RemovePod(opts, 5)
76+
except AbortionError as e:
77+
click.echo(click.style('abortion error: %s' % e.details, fg='red', bold=True))
78+
ctx.exit(-1)
79+
80+
click.echo(click.style('pod %s removed' % name, fg='green'))
81+
82+
6783
@cli.command('pod:get')
6884
@click.argument('name')
6985
@click.pass_context

devtools/core_pb2.py

+110-39
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rpc/gen/core.pb.go

+167-114
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rpc/gen/core.proto

+5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package pb;
55
service CoreRPC {
66
rpc ListPods(Empty) returns (Pods) {};
77
rpc AddPod(AddPodOptions) returns (Pod) {};
8+
rpc RemovePod(RemovePodOptions) returns (Empty) {};
89
rpc GetPod(GetPodOptions) returns (Pod) {};
910

1011
rpc AddNode(AddNodeOptions) returns (Node) {};
@@ -101,6 +102,10 @@ message AddPodOptions {
101102
string desc = 3;
102103
}
103104

105+
message RemovePodOptions {
106+
string name = 1;
107+
}
108+
104109
message GetPodOptions {
105110
string name = 1;
106111
}

rpc/gen/core_pb2_grpc.py

+17
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ def __init__(self, channel):
2424
request_serializer=core__pb2.AddPodOptions.SerializeToString,
2525
response_deserializer=core__pb2.Pod.FromString,
2626
)
27+
self.RemovePod = channel.unary_unary(
28+
'/pb.CoreRPC/RemovePod',
29+
request_serializer=core__pb2.RemovePodOptions.SerializeToString,
30+
response_deserializer=core__pb2.Empty.FromString,
31+
)
2732
self.GetPod = channel.unary_unary(
2833
'/pb.CoreRPC/GetPod',
2934
request_serializer=core__pb2.GetPodOptions.SerializeToString,
@@ -124,6 +129,13 @@ def AddPod(self, request, context):
124129
context.set_details('Method not implemented!')
125130
raise NotImplementedError('Method not implemented!')
126131

132+
def RemovePod(self, request, context):
133+
# missing associated documentation comment in .proto file
134+
pass
135+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
136+
context.set_details('Method not implemented!')
137+
raise NotImplementedError('Method not implemented!')
138+
127139
def GetPod(self, request, context):
128140
# missing associated documentation comment in .proto file
129141
pass
@@ -249,6 +261,11 @@ def add_CoreRPCServicer_to_server(servicer, server):
249261
request_deserializer=core__pb2.AddPodOptions.FromString,
250262
response_serializer=core__pb2.Pod.SerializeToString,
251263
),
264+
'RemovePod': grpc.unary_unary_rpc_method_handler(
265+
servicer.RemovePod,
266+
request_deserializer=core__pb2.RemovePodOptions.FromString,
267+
response_serializer=core__pb2.Empty.SerializeToString,
268+
),
252269
'GetPod': grpc.unary_unary_rpc_method_handler(
253270
servicer.GetPod,
254271
request_deserializer=core__pb2.GetPodOptions.FromString,

rpc/rpc.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type vibranium struct {
2525
// Many data types should be transformed
2626

2727
// ListPods returns a list of pods
28-
func (v *vibranium) ListPods(ctx context.Context, empty *pb.Empty) (*pb.Pods, error) {
28+
func (v *vibranium) ListPods(ctx context.Context, _ *pb.Empty) (*pb.Pods, error) {
2929
ps, err := v.cluster.ListPods()
3030
if err != nil {
3131
return nil, err
@@ -50,6 +50,15 @@ func (v *vibranium) AddPod(ctx context.Context, opts *pb.AddPodOptions) (*pb.Pod
5050
return toRPCPod(p), nil
5151
}
5252

53+
// RemovePod removes a pod only if it's empty
54+
func (v *vibranium) RemovePod(ctx context.Context, opts *pb.RemovePodOptions) (*pb.Empty, error) {
55+
err := v.cluster.RemovePod(opts.Name)
56+
if err != nil {
57+
return nil, err
58+
}
59+
return &pb.Empty{}, nil
60+
}
61+
5362
// GetPod
5463
func (v *vibranium) GetPod(ctx context.Context, opts *pb.GetPodOptions) (*pb.Pod, error) {
5564
p, err := v.cluster.GetPod(opts.Name)

rpc/rpc_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ func TestPods(t *testing.T) {
3535
clnt := pb.NewCoreRPCClient(conn)
3636

3737
// Add a pod
38-
log.Infoln("testing add a pod")
3938
pod := &types.Pod{Name: "testpod", Desc: "desc", Favor: "MEM"}
4039
store.On("AddPod", "testpod", "", "desc").Return(pod, nil)
4140
addpodoptions := pb.AddPodOptions{

store/etcd/pod.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -85,16 +85,16 @@ func (k *krypton) GetAllPods() ([]*types.Pod, error) {
8585
return pods, err
8686
}
8787

88-
// DeletePod if the pod has no nodes left, otherwise return an error
89-
func (k *krypton) DeletePod(podname string) error {
88+
// RemovePod if the pod has no nodes left, otherwise return an error
89+
func (k *krypton) RemovePod(podname string) error {
9090
key := fmt.Sprintf("%s/%s", allPodsKey, podname)
9191

9292
ns, err := k.GetNodesByPod(podname)
9393
if err != nil && !client.IsKeyNotFound(err) {
9494
return err
9595
}
9696
if len(ns) != 0 {
97-
return fmt.Errorf("[DeletePod] pod %s still has nodes: %s, delete them first", podname, ns)
97+
return fmt.Errorf("[RemovePod] pod %s still has nodes: %s, delete them first", podname, ns)
9898
}
9999

100100
_, err = k.etcd.Delete(context.Background(), key, &client.DeleteOptions{Dir: true, Recursive: true})

store/mock/store.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ func (m *MockStore) AddPod(name, favor, desc string) (*types.Pod, error) {
4242
return nil, args.Error(1)
4343
}
4444

45-
func (m *MockStore) DeletePod(podname string) error {
45+
func (m *MockStore) RemovePod(podname string) error {
4646
nodes, err := m.GetNodesByPod(podname)
4747
if err != nil {
4848
return err
4949
}
5050
if len(nodes) != 0 {
51-
return fmt.Errorf("[DeletePod] pod %s still has nodes, delete the nodes first", podname)
51+
return fmt.Errorf("[RemovePod] pod %s still has nodes, delete the nodes first", podname)
5252
}
5353
args := m.Called(podname)
5454
if args.Get(0) != nil {

store/store.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ type Store interface {
99
// pod
1010
AddPod(name, favor, desc string) (*types.Pod, error)
1111
GetPod(podname string) (*types.Pod, error)
12-
DeletePod(podname string) error
12+
RemovePod(podname string) error
1313
GetAllPods() ([]*types.Pod, error)
1414

1515
// node

0 commit comments

Comments
 (0)