Skip to content

Commit 37093b4

Browse files
authored
Merge pull request canonical#6 from canonical/MK-66/grpc-keepalive
Configure keepalive and move to etcd v3.5
2 parents dfaf1ea + 9856e35 commit 37093b4

15 files changed

+623
-105
lines changed

go.mod

+14-9
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
module github.com/rancher/kine
22

3-
go 1.12
3+
go 1.15
44

55
require (
66
github.com/Rican7/retry v0.1.0
7-
github.com/canonical/go-dqlite v1.5.1
8-
github.com/go-sql-driver/mysql v1.4.1
9-
github.com/lib/pq v1.1.1
10-
github.com/mattn/go-sqlite3 v1.10.0
11-
github.com/pkg/errors v0.8.1
12-
github.com/rancher/wrangler v0.4.0
13-
github.com/sirupsen/logrus v1.4.2
7+
github.com/canonical/go-dqlite v1.8.0
8+
github.com/go-sql-driver/mysql v1.6.0
9+
github.com/lib/pq v1.10.2
10+
github.com/mattn/go-sqlite3 v2.0.3+incompatible
11+
github.com/peterh/liner v1.2.0 // indirect
12+
github.com/pkg/errors v0.9.1
13+
github.com/rancher/wrangler v0.8.3
14+
github.com/sirupsen/logrus v1.7.0
1415
github.com/urfave/cli v1.21.0
1516
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738
16-
google.golang.org/grpc v1.23.1
17+
go.etcd.io/etcd/api/v3 v3.5.0
18+
go.etcd.io/etcd/client/pkg/v3 v3.5.0
19+
go.etcd.io/etcd/client/v3 v3.5.0
20+
go.etcd.io/etcd/server/v3 v3.5.0
21+
google.golang.org/grpc v1.38.0
1722
)

go.sum

+555-78
Large diffs are not rendered by default.

pkg/client/client.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"time"
88

99
"github.com/rancher/kine/pkg/endpoint"
10-
"go.etcd.io/etcd/clientv3"
10+
clientv3 "go.etcd.io/etcd/client/v3"
1111
)
1212

1313
type Value struct {
@@ -26,6 +26,7 @@ type Client interface {
2626
Put(ctx context.Context, key string, value []byte) error
2727
Create(ctx context.Context, key string, value []byte) error
2828
Update(ctx context.Context, key string, revision int64, value []byte) error
29+
Delete(ctx context.Context, key string, revision int64) error
2930
Close() error
3031
}
3132

@@ -128,6 +129,21 @@ func (c *client) Update(ctx context.Context, key string, revision int64, value [
128129
return nil
129130
}
130131

132+
func (c *client) Delete(ctx context.Context, key string, revision int64) error {
133+
resp, err := c.c.Txn(ctx).
134+
If(clientv3.Compare(clientv3.ModRevision(key), "=", revision)).
135+
Then(clientv3.OpDelete(key)).
136+
Else(clientv3.OpGet(key)).
137+
Commit()
138+
if err != nil {
139+
return err
140+
}
141+
if !resp.Succeeded {
142+
return fmt.Errorf("revision %d doesnt match", revision)
143+
}
144+
return nil
145+
}
146+
131147
func (c *client) Close() error {
132148
return c.c.Close()
133149
}

pkg/endpoint/endpoint.go

+14-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ import (
1515
"github.com/rancher/kine/pkg/server"
1616
"github.com/rancher/kine/pkg/tls"
1717
"github.com/sirupsen/logrus"
18+
"go.etcd.io/etcd/server/v3/embed"
1819
"google.golang.org/grpc"
20+
"google.golang.org/grpc/keepalive"
1921
)
2022

2123
const (
@@ -112,7 +114,18 @@ func grpcServer(config Config) *grpc.Server {
112114
if config.GRPCServer != nil {
113115
return config.GRPCServer
114116
}
115-
return grpc.NewServer()
117+
gopts := []grpc.ServerOption{
118+
grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{
119+
MinTime: embed.DefaultGRPCKeepAliveMinTime,
120+
PermitWithoutStream: false,
121+
}),
122+
grpc.KeepaliveParams(keepalive.ServerParameters{
123+
Time: embed.DefaultGRPCKeepAliveInterval,
124+
Timeout: embed.DefaultGRPCKeepAliveTimeout,
125+
}),
126+
}
127+
128+
return grpc.NewServer(gopts...)
116129
}
117130

118131
func getKineStorageBackend(ctx context.Context, driver, dsn string, cfg Config) (bool, server.Backend, error) {

pkg/server/compact.go

+11-4
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package server
33
import (
44
"context"
55

6-
"go.etcd.io/etcd/etcdserver/etcdserverpb"
6+
"go.etcd.io/etcd/api/v3/etcdserverpb"
7+
"go.etcd.io/etcd/api/v3/mvccpb"
78
)
89

910
func isCompact(txn *etcdserverpb.TxnRequest) bool {
11+
// See https://github.com/kubernetes/kubernetes/blob/442a69c3bdf6fe8e525b05887e57d89db1e2f3a5/staging/src/k8s.io/apiserver/pkg/storage/etcd3/compact.go#L72
1012
return len(txn.Compare) == 1 &&
1113
txn.Compare[0].Target == etcdserverpb.Compare_VERSION &&
1214
txn.Compare[0].Result == etcdserverpb.Compare_EQUAL &&
@@ -18,14 +20,19 @@ func isCompact(txn *etcdserverpb.TxnRequest) bool {
1820
}
1921

2022
func (l *LimitedServer) compact(ctx context.Context) (*etcdserverpb.TxnResponse, error) {
23+
// return comparison failure so that the apiserver does not bother compacting
2124
return &etcdserverpb.TxnResponse{
2225
Header: &etcdserverpb.ResponseHeader{},
23-
Succeeded: true,
26+
Succeeded: false,
2427
Responses: []*etcdserverpb.ResponseOp{
2528
{
26-
Response: &etcdserverpb.ResponseOp_ResponsePut{
27-
ResponsePut: &etcdserverpb.PutResponse{
29+
Response: &etcdserverpb.ResponseOp_ResponseRange{
30+
ResponseRange: &etcdserverpb.RangeResponse{
2831
Header: &etcdserverpb.ResponseHeader{},
32+
Kvs: []*mvccpb.KeyValue{
33+
&mvccpb.KeyValue{},
34+
},
35+
Count: 1,
2936
},
3037
},
3138
},

pkg/server/create.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package server
33
import (
44
"context"
55

6-
"go.etcd.io/etcd/etcdserver/etcdserverpb"
6+
"go.etcd.io/etcd/api/v3/etcdserverpb"
77
)
88

99
func isCreate(txn *etcdserverpb.TxnRequest) *etcdserverpb.PutRequest {

pkg/server/delete.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package server
33
import (
44
"context"
55

6-
"go.etcd.io/etcd/etcdserver/etcdserverpb"
6+
"go.etcd.io/etcd/api/v3/etcdserverpb"
77
)
88

99
func isDelete(txn *etcdserverpb.TxnRequest) (int64, string, bool) {

pkg/server/get.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"fmt"
66

7-
"go.etcd.io/etcd/etcdserver/etcdserverpb"
7+
"go.etcd.io/etcd/api/v3/etcdserverpb"
88
)
99

1010
func (l *LimitedServer) get(ctx context.Context, r *etcdserverpb.RangeRequest) (*RangeResponse, error) {

pkg/server/lease.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"fmt"
66

7-
"go.etcd.io/etcd/etcdserver/etcdserverpb"
7+
"go.etcd.io/etcd/api/v3/etcdserverpb"
88
)
99

1010
func (s *KVServerBridge) LeaseGrant(ctx context.Context, req *etcdserverpb.LeaseGrantRequest) (*etcdserverpb.LeaseGrantResponse, error) {

pkg/server/limited.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"fmt"
66

7-
"go.etcd.io/etcd/etcdserver/etcdserverpb"
7+
"go.etcd.io/etcd/api/v3/etcdserverpb"
88
)
99

1010
type LimitedServer struct {

pkg/server/list.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"fmt"
77
"strings"
88

9-
"go.etcd.io/etcd/etcdserver/etcdserverpb"
9+
"go.etcd.io/etcd/api/v3/etcdserverpb"
1010
)
1111

1212
func (l *LimitedServer) list(ctx context.Context, r *etcdserverpb.RangeRequest) (*RangeResponse, error) {

pkg/server/server.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import (
55
"fmt"
66

77
"github.com/sirupsen/logrus"
8-
"go.etcd.io/etcd/etcdserver/etcdserverpb"
9-
"go.etcd.io/etcd/mvcc/mvccpb"
8+
"go.etcd.io/etcd/api/v3/etcdserverpb"
9+
"go.etcd.io/etcd/api/v3/mvccpb"
1010
"google.golang.org/grpc"
1111
"google.golang.org/grpc/health"
1212
healthpb "google.golang.org/grpc/health/grpc_health_v1"

pkg/server/update.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package server
33
import (
44
"context"
55

6-
"go.etcd.io/etcd/etcdserver/etcdserverpb"
6+
"go.etcd.io/etcd/api/v3/etcdserverpb"
77
)
88

99
func isUpdate(txn *etcdserverpb.TxnRequest) (int64, string, []byte, int64, bool) {

pkg/server/watch.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import (
66
"sync/atomic"
77

88
"github.com/sirupsen/logrus"
9-
"go.etcd.io/etcd/etcdserver/etcdserverpb"
10-
"go.etcd.io/etcd/mvcc/mvccpb"
9+
"go.etcd.io/etcd/api/v3/etcdserverpb"
10+
"go.etcd.io/etcd/api/v3/mvccpb"
1111
)
1212

1313
var (

pkg/tls/config.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package tls
33
import (
44
"crypto/tls"
55

6-
"go.etcd.io/etcd/pkg/transport"
6+
"go.etcd.io/etcd/client/pkg/v3/transport"
77
)
88

99
type Config struct {

0 commit comments

Comments
 (0)