Skip to content

Commit af4b67d

Browse files
authored
refactor so that using the PD API avoids unnecessary imports (#618)
* refactor so that using the PD API avoids unecessary imports PD API no longer imports Kubernetes and the CRD. In the create-statefulset-immediately PR this reduced the binary by ~20M
1 parent 9a73329 commit af4b67d

30 files changed

+1185
-1120
lines changed

pkg/controller/pd_control.go

+10-794
Large diffs are not rendered by default.

pkg/controller/pod_control.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/golang/glog"
2222
"github.com/pingcap/tidb-operator/pkg/apis/pingcap.com/v1alpha1"
2323
"github.com/pingcap/tidb-operator/pkg/label"
24+
"github.com/pingcap/tidb-operator/pkg/pdapi"
2425
corev1 "k8s.io/api/core/v1"
2526
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2627
coreinformers "k8s.io/client-go/informers/core/v1"
@@ -41,15 +42,15 @@ type PodControlInterface interface {
4142

4243
type realPodControl struct {
4344
kubeCli kubernetes.Interface
44-
pdControl PDControlInterface
45+
pdControl pdapi.PDControlInterface
4546
podLister corelisters.PodLister
4647
recorder record.EventRecorder
4748
}
4849

4950
// NewRealPodControl creates a new PodControlInterface
5051
func NewRealPodControl(
5152
kubeCli kubernetes.Interface,
52-
pdControl PDControlInterface,
53+
pdControl pdapi.PDControlInterface,
5354
podLister corelisters.PodLister,
5455
recorder record.EventRecorder,
5556
) PodControlInterface {
@@ -110,7 +111,7 @@ func (rpc *realPodControl) UpdateMetaInfo(tc *v1alpha1.TidbCluster, pod *corev1.
110111
clusterID := labels[label.ClusterIDLabelKey]
111112
memberID := labels[label.MemberIDLabelKey]
112113
storeID := labels[label.StoreIDLabelKey]
113-
pdClient := rpc.pdControl.GetPDClient(tc)
114+
pdClient := rpc.pdControl.GetPDClient(pdapi.Namespace(tc.GetNamespace()), tcName)
114115
if labels[label.ClusterIDLabelKey] == "" {
115116
cluster, err := pdClient.GetCluster()
116117
if err != nil {

pkg/controller/pod_control_test.go

+47-52
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/pingcap/kvproto/pkg/pdpb"
2424
"github.com/pingcap/tidb-operator/pkg/apis/pingcap.com/v1alpha1"
2525
"github.com/pingcap/tidb-operator/pkg/label"
26+
"github.com/pingcap/tidb-operator/pkg/pdapi"
2627
corev1 "k8s.io/api/core/v1"
2728
apierrors "k8s.io/apimachinery/pkg/api/errors"
2829
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -43,16 +44,15 @@ func TestPodControlUpdateMetaInfoSuccess(t *testing.T) {
4344
pod := newPod(tc)
4445
fakeClient, pdControl, podLister, _, recorder := newFakeClientRecorderAndPDControl()
4546
control := NewRealPodControl(fakeClient, pdControl, podLister, recorder)
46-
pdClient := NewFakePDClient()
47-
pdControl.SetPDClient(tc, pdClient)
48-
pdClient.AddReaction(GetClusterActionType, func(action *Action) (interface{}, error) {
47+
pdClient := NewFakePDClient(pdControl, tc)
48+
pdClient.AddReaction(pdapi.GetClusterActionType, func(action *pdapi.Action) (interface{}, error) {
4949
cluster := &metapb.Cluster{
5050
Id: 222,
5151
}
5252
return cluster, nil
5353
})
54-
pdClient.AddReaction(GetMembersActionType, func(action *Action) (interface{}, error) {
55-
membersInfo := &MembersInfo{
54+
pdClient.AddReaction(pdapi.GetMembersActionType, func(action *pdapi.Action) (interface{}, error) {
55+
membersInfo := &pdapi.MembersInfo{
5656
Members: []*pdpb.Member{
5757
{
5858
MemberId: 111,
@@ -61,11 +61,11 @@ func TestPodControlUpdateMetaInfoSuccess(t *testing.T) {
6161
}
6262
return membersInfo, nil
6363
})
64-
pdClient.AddReaction(GetStoresActionType, func(action *Action) (interface{}, error) {
65-
storesInfo := &StoresInfo{
66-
Stores: []*StoreInfo{
64+
pdClient.AddReaction(pdapi.GetStoresActionType, func(action *pdapi.Action) (interface{}, error) {
65+
storesInfo := &pdapi.StoresInfo{
66+
Stores: []*pdapi.StoreInfo{
6767
{
68-
Store: &MetaStore{
68+
Store: &pdapi.MetaStore{
6969
Store: &metapb.Store{
7070
Id: 333,
7171
Address: fmt.Sprintf("%s.web", TestPodName),
@@ -94,13 +94,12 @@ func TestPodControlUpdateMetaInfoGetClusterFailed(t *testing.T) {
9494
pod := newPod(tc)
9595
fakeClient, pdControl, podLister, _, recorder := newFakeClientRecorderAndPDControl()
9696
control := NewRealPodControl(fakeClient, pdControl, podLister, recorder)
97-
pdClient := NewFakePDClient()
98-
pdControl.SetPDClient(tc, pdClient)
99-
pdClient.AddReaction(GetClusterActionType, func(action *Action) (interface{}, error) {
97+
pdClient := NewFakePDClient(pdControl, tc)
98+
pdClient.AddReaction(pdapi.GetClusterActionType, func(action *pdapi.Action) (interface{}, error) {
10099
return nil, errors.New("failed to get cluster info from PD server")
101100
})
102-
pdClient.AddReaction(GetMembersActionType, func(action *Action) (interface{}, error) {
103-
membersInfo := &MembersInfo{
101+
pdClient.AddReaction(pdapi.GetMembersActionType, func(action *pdapi.Action) (interface{}, error) {
102+
membersInfo := &pdapi.MembersInfo{
104103
Members: []*pdpb.Member{
105104
{
106105
MemberId: 111,
@@ -109,11 +108,11 @@ func TestPodControlUpdateMetaInfoGetClusterFailed(t *testing.T) {
109108
}
110109
return membersInfo, nil
111110
})
112-
pdClient.AddReaction(GetStoresActionType, func(action *Action) (interface{}, error) {
113-
storesInfo := &StoresInfo{
114-
Stores: []*StoreInfo{
111+
pdClient.AddReaction(pdapi.GetStoresActionType, func(action *pdapi.Action) (interface{}, error) {
112+
storesInfo := &pdapi.StoresInfo{
113+
Stores: []*pdapi.StoreInfo{
115114
{
116-
Store: &MetaStore{
115+
Store: &pdapi.MetaStore{
117116
Store: &metapb.Store{
118117
Id: 333,
119118
Address: fmt.Sprintf("%s.web", TestPodName),
@@ -141,22 +140,21 @@ func TestPodControlUpdateMetaInfoGetMemberFailed(t *testing.T) {
141140
pod := newPod(tc)
142141
fakeClient, pdControl, podLister, _, recorder := newFakeClientRecorderAndPDControl()
143142
control := NewRealPodControl(fakeClient, pdControl, podLister, recorder)
144-
pdClient := NewFakePDClient()
145-
pdControl.SetPDClient(tc, pdClient)
146-
pdClient.AddReaction(GetClusterActionType, func(action *Action) (interface{}, error) {
143+
pdClient := NewFakePDClient(pdControl, tc)
144+
pdClient.AddReaction(pdapi.GetClusterActionType, func(action *pdapi.Action) (interface{}, error) {
147145
cluster := &metapb.Cluster{
148146
Id: 222,
149147
}
150148
return cluster, nil
151149
})
152-
pdClient.AddReaction(GetMembersActionType, func(action *Action) (interface{}, error) {
150+
pdClient.AddReaction(pdapi.GetMembersActionType, func(action *pdapi.Action) (interface{}, error) {
153151
return nil, errors.New("failed to get member info from PD server")
154152
})
155-
pdClient.AddReaction(GetStoresActionType, func(action *Action) (interface{}, error) {
156-
storesInfo := &StoresInfo{
157-
Stores: []*StoreInfo{
153+
pdClient.AddReaction(pdapi.GetStoresActionType, func(action *pdapi.Action) (interface{}, error) {
154+
storesInfo := &pdapi.StoresInfo{
155+
Stores: []*pdapi.StoreInfo{
158156
{
159-
Store: &MetaStore{
157+
Store: &pdapi.MetaStore{
160158
Store: &metapb.Store{
161159
Id: 333,
162160
Address: fmt.Sprintf("%s.web", TestPodName),
@@ -185,16 +183,15 @@ func TestPodControlUpdateMetaInfoGetStoreFailed(t *testing.T) {
185183
pod := newPod(tc)
186184
fakeClient, pdControl, podLister, _, recorder := newFakeClientRecorderAndPDControl()
187185
control := NewRealPodControl(fakeClient, pdControl, podLister, recorder)
188-
pdClient := NewFakePDClient()
189-
pdControl.SetPDClient(tc, pdClient)
190-
pdClient.AddReaction(GetClusterActionType, func(action *Action) (interface{}, error) {
186+
pdClient := NewFakePDClient(pdControl, tc)
187+
pdClient.AddReaction(pdapi.GetClusterActionType, func(action *pdapi.Action) (interface{}, error) {
191188
cluster := &metapb.Cluster{
192189
Id: 222,
193190
}
194191
return cluster, nil
195192
})
196-
pdClient.AddReaction(GetMembersActionType, func(action *Action) (interface{}, error) {
197-
membersInfo := &MembersInfo{
193+
pdClient.AddReaction(pdapi.GetMembersActionType, func(action *pdapi.Action) (interface{}, error) {
194+
membersInfo := &pdapi.MembersInfo{
198195
Members: []*pdpb.Member{
199196
{
200197
MemberId: 111,
@@ -203,7 +200,7 @@ func TestPodControlUpdateMetaInfoGetStoreFailed(t *testing.T) {
203200
}
204201
return membersInfo, nil
205202
})
206-
pdClient.AddReaction(GetStoresActionType, func(action *Action) (interface{}, error) {
203+
pdClient.AddReaction(pdapi.GetStoresActionType, func(action *pdapi.Action) (interface{}, error) {
207204
return nil, errors.New("failed to get store info from PD server")
208205
})
209206

@@ -224,16 +221,15 @@ func TestPodControlUpdateMetaInfoUpdatePodFailed(t *testing.T) {
224221
pod := newPod(tc)
225222
fakeClient, pdControl, podLister, _, recorder := newFakeClientRecorderAndPDControl()
226223
control := NewRealPodControl(fakeClient, pdControl, podLister, recorder)
227-
pdClient := NewFakePDClient()
228-
pdControl.SetPDClient(tc, pdClient)
229-
pdClient.AddReaction(GetClusterActionType, func(action *Action) (interface{}, error) {
224+
pdClient := NewFakePDClient(pdControl, tc)
225+
pdClient.AddReaction(pdapi.GetClusterActionType, func(action *pdapi.Action) (interface{}, error) {
230226
cluster := &metapb.Cluster{
231227
Id: 222,
232228
}
233229
return cluster, nil
234230
})
235-
pdClient.AddReaction(GetMembersActionType, func(action *Action) (interface{}, error) {
236-
membersInfo := &MembersInfo{
231+
pdClient.AddReaction(pdapi.GetMembersActionType, func(action *pdapi.Action) (interface{}, error) {
232+
membersInfo := &pdapi.MembersInfo{
237233
Members: []*pdpb.Member{
238234
{
239235
MemberId: 111,
@@ -242,11 +238,11 @@ func TestPodControlUpdateMetaInfoUpdatePodFailed(t *testing.T) {
242238
}
243239
return membersInfo, nil
244240
})
245-
pdClient.AddReaction(GetStoresActionType, func(action *Action) (interface{}, error) {
246-
storesInfo := &StoresInfo{
247-
Stores: []*StoreInfo{
241+
pdClient.AddReaction(pdapi.GetStoresActionType, func(action *pdapi.Action) (interface{}, error) {
242+
storesInfo := &pdapi.StoresInfo{
243+
Stores: []*pdapi.StoreInfo{
248244
{
249-
Store: &MetaStore{
245+
Store: &pdapi.MetaStore{
250246
Store: &metapb.Store{
251247
Id: 333,
252248
Address: fmt.Sprintf("%s.web", TestPodName),
@@ -278,16 +274,15 @@ func TestPodControlUpdateMetaInfoConflictSuccess(t *testing.T) {
278274
fakeClient, pdControl, podLister, podIndexer, recorder := newFakeClientRecorderAndPDControl()
279275
podIndexer.Add(oldPod)
280276
control := NewRealPodControl(fakeClient, pdControl, podLister, recorder)
281-
pdClient := NewFakePDClient()
282-
pdControl.SetPDClient(tc, pdClient)
283-
pdClient.AddReaction(GetClusterActionType, func(action *Action) (interface{}, error) {
277+
pdClient := NewFakePDClient(pdControl, tc)
278+
pdClient.AddReaction(pdapi.GetClusterActionType, func(action *pdapi.Action) (interface{}, error) {
284279
cluster := &metapb.Cluster{
285280
Id: 222,
286281
}
287282
return cluster, nil
288283
})
289-
pdClient.AddReaction(GetMembersActionType, func(action *Action) (interface{}, error) {
290-
membersInfo := &MembersInfo{
284+
pdClient.AddReaction(pdapi.GetMembersActionType, func(action *pdapi.Action) (interface{}, error) {
285+
membersInfo := &pdapi.MembersInfo{
291286
Members: []*pdpb.Member{
292287
{
293288
MemberId: 111,
@@ -296,11 +291,11 @@ func TestPodControlUpdateMetaInfoConflictSuccess(t *testing.T) {
296291
}
297292
return membersInfo, nil
298293
})
299-
pdClient.AddReaction(GetStoresActionType, func(action *Action) (interface{}, error) {
300-
storesInfo := &StoresInfo{
301-
Stores: []*StoreInfo{
294+
pdClient.AddReaction(pdapi.GetStoresActionType, func(action *pdapi.Action) (interface{}, error) {
295+
storesInfo := &pdapi.StoresInfo{
296+
Stores: []*pdapi.StoreInfo{
302297
{
303-
Store: &MetaStore{
298+
Store: &pdapi.MetaStore{
304299
Store: &metapb.Store{
305300
Id: 333,
306301
Address: fmt.Sprintf("%s.web", TestPodName),
@@ -385,9 +380,9 @@ func TestPodControlUpdatePodConflictSuccess(t *testing.T) {
385380
g.Expect(events[0]).To(ContainSubstring(corev1.EventTypeNormal))
386381
}
387382

388-
func newFakeClientRecorderAndPDControl() (*fake.Clientset, *FakePDControl, corelisters.PodLister, cache.Indexer, *record.FakeRecorder) {
383+
func newFakeClientRecorderAndPDControl() (*fake.Clientset, *pdapi.FakePDControl, corelisters.PodLister, cache.Indexer, *record.FakeRecorder) {
389384
fakeClient := &fake.Clientset{}
390-
pdControl := NewFakePDControl()
385+
pdControl := pdapi.NewFakePDControl()
391386
kubeCli := kubefake.NewSimpleClientset()
392387
recorder := record.NewFakeRecorder(10)
393388
kubeInformerFactory := kubeinformers.NewSharedInformerFactory(kubeCli, 0)

pkg/controller/tidb_control.go

+8-5
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,18 @@ import (
1818
"fmt"
1919
"io/ioutil"
2020
"net/http"
21+
"time"
2122

2223
"github.com/pingcap/tidb-operator/pkg/apis/pingcap.com/v1alpha1"
24+
"github.com/pingcap/tidb-operator/pkg/httputil"
2325
"github.com/pingcap/tidb/config"
2426
)
2527

2628
const (
2729
// https://github.com/pingcap/tidb/blob/master/owner/manager.go#L183
2830
// NotDDLOwnerError is the error message which was returned when the tidb node is not a ddl owner
2931
NotDDLOwnerError = "This node is not a ddl owner, can't be resigned."
32+
timeout = 5 * time.Second
3033
)
3134

3235
type dbInfo struct {
@@ -88,11 +91,11 @@ func (tdc *defaultTiDBControl) ResignDDLOwner(tc *v1alpha1.TidbCluster, ordinal
8891
if err != nil {
8992
return false, err
9093
}
91-
defer DeferClose(res.Body, &err)
94+
defer httputil.DeferClose(res.Body, &err)
9295
if res.StatusCode == http.StatusOK {
9396
return false, nil
9497
}
95-
err2 := readErrorBody(res.Body)
98+
err2 := httputil.ReadErrorBody(res.Body)
9699
if err2.Error() == NotDDLOwnerError {
97100
return true, nil
98101
}
@@ -113,7 +116,7 @@ func (tdc *defaultTiDBControl) GetInfo(tc *v1alpha1.TidbCluster, ordinal int32)
113116
if err != nil {
114117
return nil, err
115118
}
116-
defer DeferClose(res.Body, &err)
119+
defer httputil.DeferClose(res.Body, &err)
117120
if res.StatusCode != http.StatusOK {
118121
errMsg := fmt.Errorf(fmt.Sprintf("Error response %v URL: %s", res.StatusCode, url))
119122
return nil, errMsg
@@ -144,7 +147,7 @@ func (tdc *defaultTiDBControl) GetSettings(tc *v1alpha1.TidbCluster, ordinal int
144147
if err != nil {
145148
return nil, err
146149
}
147-
defer DeferClose(res.Body, &err)
150+
defer httputil.DeferClose(res.Body, &err)
148151
if res.StatusCode != http.StatusOK {
149152
errMsg := fmt.Errorf(fmt.Sprintf("Error response %v URL: %s", res.StatusCode, url))
150153
return nil, errMsg
@@ -171,7 +174,7 @@ func (tdc *defaultTiDBControl) getBodyOK(apiURL string) ([]byte, error) {
171174
return nil, errMsg
172175
}
173176

174-
defer DeferClose(res.Body, &err)
177+
defer httputil.DeferClose(res.Body, &err)
175178
body, err := ioutil.ReadAll(res.Body)
176179
if err != nil {
177180
return nil, err

pkg/controller/tidbcluster/tidb_cluster_controller.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/pingcap/tidb-operator/pkg/controller"
2727
mm "github.com/pingcap/tidb-operator/pkg/manager/member"
2828
"github.com/pingcap/tidb-operator/pkg/manager/meta"
29+
"github.com/pingcap/tidb-operator/pkg/pdapi"
2930
apps "k8s.io/api/apps/v1beta1"
3031
corev1 "k8s.io/api/core/v1"
3132
"k8s.io/apimachinery/pkg/api/errors"
@@ -92,7 +93,7 @@ func NewController(
9293
nodeInformer := kubeInformerFactory.Core().V1().Nodes()
9394

9495
tcControl := controller.NewRealTidbClusterControl(cli, tcInformer.Lister(), recorder)
95-
pdControl := controller.NewDefaultPDControl()
96+
pdControl := pdapi.NewDefaultPDControl()
9697
tidbControl := controller.NewDefaultTiDBControl()
9798
setControl := controller.NewRealStatefuSetControl(kubeCli, setInformer.Lister(), recorder)
9899
svcControl := controller.NewRealServiceControl(kubeCli, svcInformer.Lister(), recorder)

pkg/controller/tidbcluster/tidb_cluster_controller_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/pingcap/tidb-operator/pkg/controller"
2525
mm "github.com/pingcap/tidb-operator/pkg/manager/member"
2626
"github.com/pingcap/tidb-operator/pkg/manager/meta"
27+
"github.com/pingcap/tidb-operator/pkg/pdapi"
2728
apps "k8s.io/api/apps/v1beta1"
2829
corev1 "k8s.io/api/core/v1"
2930
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -240,7 +241,7 @@ func newFakeTidbClusterController() (*Controller, cache.Indexer, cache.Indexer)
240241
tcc.setListerSynced = alwaysReady
241242
recorder := record.NewFakeRecorder(10)
242243

243-
pdControl := controller.NewFakePDControl()
244+
pdControl := pdapi.NewFakePDControl()
244245
tidbControl := controller.NewFakeTiDBControl()
245246
svcControl := controller.NewRealServiceControl(
246247
kubeCli,

pkg/discovery/discovery.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
"github.com/golang/glog"
2323
"github.com/pingcap/tidb-operator/pkg/apis/pingcap.com/v1alpha1"
2424
"github.com/pingcap/tidb-operator/pkg/client/clientset/versioned"
25-
"github.com/pingcap/tidb-operator/pkg/controller"
25+
"github.com/pingcap/tidb-operator/pkg/pdapi"
2626
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2727
)
2828

@@ -36,7 +36,7 @@ type tidbDiscovery struct {
3636
lock sync.Mutex
3737
clusters map[string]*clusterInfo
3838
tcGetFn func(ns, tcName string) (*v1alpha1.TidbCluster, error)
39-
pdControl controller.PDControlInterface
39+
pdControl pdapi.PDControlInterface
4040
}
4141

4242
type clusterInfo struct {
@@ -48,7 +48,7 @@ type clusterInfo struct {
4848
func NewTiDBDiscovery(cli versioned.Interface) TiDBDiscovery {
4949
td := &tidbDiscovery{
5050
cli: cli,
51-
pdControl: controller.NewDefaultPDControl(),
51+
pdControl: pdapi.NewDefaultPDControl(),
5252
clusters: map[string]*clusterInfo{},
5353
}
5454
td.tcGetFn = td.realTCGetFn
@@ -97,7 +97,7 @@ func (td *tidbDiscovery) Discover(advertisePeerUrl string) (string, error) {
9797
return fmt.Sprintf("--initial-cluster=%s=http://%s", podName, advertisePeerUrl), nil
9898
}
9999

100-
pdClient := td.pdControl.GetPDClient(tc)
100+
pdClient := td.pdControl.GetPDClient(pdapi.Namespace(tc.GetNamespace()), tc.GetName())
101101
membersInfo, err := pdClient.GetMembers()
102102
if err != nil {
103103
return "", err

0 commit comments

Comments
 (0)