Skip to content

Commit be81d8a

Browse files
authored
server, etcd: integrate vip manager into the server (#592)
1 parent f0acd80 commit be81d8a

File tree

8 files changed

+177
-107
lines changed

8 files changed

+177
-107
lines changed

pkg/manager/elect/mock_test.go

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@ import (
88
"testing"
99
"time"
1010

11-
"github.com/pingcap/tiproxy/lib/config"
1211
"github.com/pingcap/tiproxy/lib/util/logger"
1312
"github.com/pingcap/tiproxy/pkg/manager/cert"
14-
"github.com/pingcap/tiproxy/pkg/manager/infosync"
13+
"github.com/pingcap/tiproxy/pkg/util/etcd"
1514
"github.com/stretchr/testify/require"
1615
clientv3 "go.etcd.io/etcd/client/v3"
1716
"go.etcd.io/etcd/server/v3/embed"
@@ -95,13 +94,13 @@ func newEtcdTestSuite(t *testing.T, elecCfg electionConfig, key string) *etcdTes
9594

9695
ts.startServer("0.0.0.0:0")
9796
endpoint := ts.server.Clients[0].Addr().String()
98-
cfg := newConfig(endpoint)
97+
cfg := etcd.ConfigForEtcdTest(endpoint)
9998

10099
certMgr := cert.NewCertManager()
101100
err := certMgr.Init(cfg, lg, nil)
102101
require.NoError(t, err)
103102

104-
ts.client, err = infosync.InitEtcdClient(ts.lg, cfg, certMgr)
103+
ts.client, err = etcd.InitEtcdClient(ts.lg, cfg, certMgr)
105104
require.NoError(t, err)
106105
ts.kv = clientv3.NewKV(ts.client)
107106
return ts
@@ -175,7 +174,7 @@ func (ts *etcdTestSuite) close() {
175174
}
176175

177176
func (ts *etcdTestSuite) startServer(addr string) {
178-
etcd, err := infosync.CreateEtcdServer(addr, ts.t.TempDir(), ts.lg)
177+
etcd, err := etcd.CreateEtcdServer(addr, ts.t.TempDir(), ts.lg)
179178
require.NoError(ts.t, err)
180179
ts.server = etcd
181180
}
@@ -188,18 +187,6 @@ func (ts *etcdTestSuite) shutdownServer() string {
188187
return addr
189188
}
190189

191-
func newConfig(endpoint string) *config.Config {
192-
return &config.Config{
193-
Proxy: config.ProxyServer{
194-
Addr: "0.0.0.0:6000",
195-
PDAddrs: endpoint,
196-
},
197-
API: config.API{
198-
Addr: "0.0.0.0:3080",
199-
},
200-
}
201-
}
202-
203190
func electionConfigForTest(ttl int) electionConfig {
204191
return electionConfig{
205192
sessionTTL: ttl,

pkg/manager/infosync/info.go

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"github.com/pingcap/tiproxy/lib/util/retry"
1919
"github.com/pingcap/tiproxy/lib/util/sys"
2020
"github.com/pingcap/tiproxy/lib/util/waitgroup"
21-
"github.com/pingcap/tiproxy/pkg/manager/cert"
2221
"github.com/pingcap/tiproxy/pkg/util/versioninfo"
2322
"github.com/siddontang/go/hack"
2423
clientv3 "go.etcd.io/etcd/client/v3"
@@ -108,7 +107,7 @@ type PrometheusInfo struct {
108107
Port int `json:"port"`
109108
}
110109

111-
func NewInfoSyncer(lg *zap.Logger) *InfoSyncer {
110+
func NewInfoSyncer(lg *zap.Logger, etcdCli *clientv3.Client) *InfoSyncer {
112111
return &InfoSyncer{
113112
lg: lg,
114113
syncConfig: syncConfig{
@@ -121,16 +120,11 @@ func NewInfoSyncer(lg *zap.Logger) *InfoSyncer {
121120
getPromRetryCnt: getPromRetryCnt,
122121
getPromRetryIntvl: getPromRetryIntvl,
123122
},
123+
etcdCli: etcdCli,
124124
}
125125
}
126126

127-
func (is *InfoSyncer) Init(ctx context.Context, cfg *config.Config, certMgr *cert.CertManager) error {
128-
etcdCli, err := InitEtcdClient(is.lg, cfg, certMgr)
129-
if err != nil {
130-
return err
131-
}
132-
is.etcdCli = etcdCli
133-
127+
func (is *InfoSyncer) Init(ctx context.Context, cfg *config.Config) error {
134128
topologyInfo, err := is.getTopologyInfo(cfg)
135129
if err != nil {
136130
is.lg.Error("get topology failed", zap.Error(err))
@@ -338,14 +332,5 @@ func (is *InfoSyncer) Close() error {
338332
is.cancelFunc()
339333
}
340334
is.wg.Wait()
341-
errs := make([]error, 0)
342-
if err := is.removeTopology(context.Background()); err != nil {
343-
errs = append(errs, err)
344-
}
345-
if is.etcdCli != nil {
346-
if err := is.etcdCli.Close(); err != nil {
347-
errs = append(errs, errors.WithStack(err))
348-
}
349-
}
350-
return errors.Collect(errors.New("closing InfoSyncer"), errs...)
335+
return is.removeTopology(context.Background())
351336
}

pkg/manager/infosync/info_test.go

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/pingcap/tiproxy/lib/util/sys"
1818
"github.com/pingcap/tiproxy/lib/util/waitgroup"
1919
"github.com/pingcap/tiproxy/pkg/manager/cert"
20+
"github.com/pingcap/tiproxy/pkg/util/etcd"
2021
"github.com/stretchr/testify/require"
2122
clientv3 "go.etcd.io/etcd/client/v3"
2223
"go.etcd.io/etcd/server/v3/embed"
@@ -276,12 +277,16 @@ func newEtcdTestSuite(t *testing.T) *etcdTestSuite {
276277

277278
ts.startServer("0.0.0.0:0")
278279
endpoint := ts.server.Clients[0].Addr().String()
279-
cfg := newConfig(endpoint)
280+
cfg := etcd.ConfigForEtcdTest(endpoint)
280281

281282
certMgr := cert.NewCertManager()
282283
err := certMgr.Init(cfg, lg, nil)
283284
require.NoError(t, err)
284-
is := NewInfoSyncer(lg)
285+
ts.client, err = etcd.InitEtcdClient(ts.lg, cfg, certMgr)
286+
require.NoError(t, err)
287+
ts.kv = clientv3.NewKV(ts.client)
288+
289+
is := NewInfoSyncer(lg, ts.client)
285290
is.syncConfig = syncConfig{
286291
sessionTTL: 1,
287292
refreshIntvl: 50 * time.Millisecond,
@@ -293,14 +298,10 @@ func newEtcdTestSuite(t *testing.T) *etcdTestSuite {
293298
getPromRetryCnt: 2,
294299
}
295300
ctx, cancel := context.WithCancel(context.Background())
296-
err = is.Init(ctx, cfg, certMgr)
301+
err = is.Init(ctx, cfg)
297302
require.NoError(t, err)
298303
ts.is = is
299304
ts.cancel = cancel
300-
301-
ts.client, err = InitEtcdClient(ts.lg, cfg, certMgr)
302-
require.NoError(t, err)
303-
ts.kv = clientv3.NewKV(ts.client)
304305
return ts
305306
}
306307

@@ -386,19 +387,7 @@ func (ts *etcdTestSuite) setPromInfo(info *PrometheusInfo) {
386387
}
387388

388389
func (ts *etcdTestSuite) createEtcdServer(addr string) {
389-
etcd, err := CreateEtcdServer(addr, ts.t.TempDir(), ts.lg)
390+
etcd, err := etcd.CreateEtcdServer(addr, ts.t.TempDir(), ts.lg)
390391
require.NoError(ts.t, err)
391392
ts.server = etcd
392393
}
393-
394-
func newConfig(endpoint string) *config.Config {
395-
return &config.Config{
396-
Proxy: config.ProxyServer{
397-
Addr: "0.0.0.0:6000",
398-
PDAddrs: endpoint,
399-
},
400-
API: config.API{
401-
Addr: "0.0.0.0:3080",
402-
},
403-
}
404-
}

pkg/manager/vip/network_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@
66
package vip
77

88
import (
9+
"runtime"
910
"strings"
1011
"testing"
1112

1213
"github.com/stretchr/testify/require"
1314
)
1415

1516
func TestAddDelIP(t *testing.T) {
17+
if runtime.GOOS != "linux" {
18+
t.Skipf("unsupported on %s", runtime.GOOS)
19+
}
20+
1621
tests := []struct {
1722
virtualIP string
1823
link string

0 commit comments

Comments
 (0)