Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sync pump status to tidb-cluster. #1292

Merged
merged 27 commits into from
Dec 21, 2019
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
6506e0b
Specifiy terraform ack version.
shonge Dec 4, 2019
b14b99a
Add sync pump status to tidb-cluster CR
shonge Dec 5, 2019
bfb44f0
Revert "Specifiy terraform ack version."
shonge Dec 5, 2019
acf17da
fix some comments
shonge Dec 5, 2019
f743dfe
add unit test and fix syncTiDBClusterStatus func
shonge Dec 10, 2019
0b36b1c
fix updateTC and remove PumpStatus Members
shonge Dec 11, 2019
9ba6e6b
Update pkg/manager/member/pump_member_manager_test.go
shonge Dec 12, 2019
4c68349
Merge branch 'sync_pump_status_to_tc' of https://github.com/shonge/ti…
shonge Dec 11, 2019
0a2d0fd
Merge branch 'master' into sync_pump_status_to_tc
shonge Dec 12, 2019
85ef9cf
Update pump_member_manager.go
shonge Dec 12, 2019
0ff3a71
Merge branch 'master' into sync_pump_status_to_tc
aylei Dec 13, 2019
e9a8264
fix tidbclusterstatus struct pkg/apis/pingcap/v1alpha1/types.go
shonge Dec 13, 2019
6237a59
fix cmControl
shonge Dec 13, 2019
9a20889
Merge branch 'master' into sync_pump_status_to_tc
shonge Dec 13, 2019
00019ed
update codegenerated deepcopy
shonge Dec 13, 2019
b43e4f6
Merge branch 'master' into sync_pump_status_to_tc
shonge Dec 16, 2019
798e595
Merge branch 'master' into sync_pump_status_to_tc
shonge Dec 17, 2019
6029bc3
Merge branch 'master' into sync_pump_status_to_tc
shonge Dec 17, 2019
2416015
fix zz_generated.deepcopy.go
shonge Dec 17, 2019
700df98
run hack/codegen.sh
shonge Dec 17, 2019
57dee26
Merge branch 'master' into sync_pump_status_to_tc
shonge Dec 17, 2019
1d59cf3
Merge branch 'master' into sync_pump_status_to_tc
aylei Dec 18, 2019
5486edd
Update pump_member_manager.go
shonge Dec 19, 2019
6925701
Merge branch 'master' into sync_pump_status_to_tc
shonge Dec 19, 2019
0c40ec4
Merge branch 'master' into sync_pump_status_to_tc
aylei Dec 20, 2019
273fb3f
Merge branch 'master' into sync_pump_status_to_tc
aylei Dec 20, 2019
3c396e6
Merge branch 'master' into sync_pump_status_to_tc
sre-bot Dec 21, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions pkg/apis/pingcap/v1alpha1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ type TidbClusterStatus struct {
PD PDStatus `json:"pd,omitempty"`
TiKV TiKVStatus `json:"tikv,omitempty"`
TiDB TiDBStatus `json:"tidb,omitempty"`
Pump PumpStatus `josn:"tidb,omitempty"`
shonge marked this conversation as resolved.
Show resolved Hide resolved
}

// +k8s:openapi-gen=true
Expand Down Expand Up @@ -460,6 +461,18 @@ type TiKVFailureStore struct {
CreatedAt metav1.Time `json:"createdAt,omitempty"`
}

// PumpStatus is Pump status
type PumpStatus struct {
Phase MemberPhase `json:"phase,omitempty"`
StatefulSet *apps.StatefulSetStatus `json:"statefulSet,omitempty"`
Members map[string]PumpMember `json:"members,omitempty"`
}

// PumpMember is Pump member
type PumpMember struct {
Name string `json:"name"`
}

// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

Expand Down
1 change: 1 addition & 0 deletions pkg/controller/tidbcluster/tidb_cluster_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ func NewController(
setInformer.Lister(),
svcInformer.Lister(),
cmInformer.Lister(),
podInformer.Lister(),
),
recorder,
),
Expand Down
61 changes: 56 additions & 5 deletions pkg/manager/member/pump_member_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/pingcap/tidb-operator/pkg/label"
"github.com/pingcap/tidb-operator/pkg/manager"
"github.com/pingcap/tidb-operator/pkg/util"
apps "k8s.io/api/apps/v1"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
apiequality "k8s.io/apimachinery/pkg/api/equality"
Expand Down Expand Up @@ -64,6 +65,7 @@ type pumpMemberManager struct {
setLister v1.StatefulSetLister
svcLister corelisters.ServiceLister
cmLister corelisters.ConfigMapLister
podLister corelisters.PodLister
}

// NewPumpMemberManager returns a controller to reconcile pump clusters
Expand All @@ -73,14 +75,16 @@ func NewPumpMemberManager(
cmControl controller.ConfigMapControlInterface,
setLister v1.StatefulSetLister,
svcLister corelisters.ServiceLister,
cmLister corelisters.ConfigMapLister) manager.Manager {
cmLister corelisters.ConfigMapLister,
podLister corelisters.PodLister) manager.Manager {
return &pumpMemberManager{
setControl,
svcControl,
cmControl,
setLister,
svcLister,
cmLister,
podLister,
}
}

Expand All @@ -91,12 +95,11 @@ func (pmm *pumpMemberManager) Sync(tc *v1alpha1.TidbCluster) error {
if err := pmm.syncHeadlessService(tc); err != nil {
return err
}
return pmm.syncStatefulSet(tc)
return pmm.syncPumpStatefulSetForTidbCluster(tc)
}

// syncStatefulSet syncs the pump statefulset
// TODO: sync statefulset status of pump to tidbcluster
func (pmm *pumpMemberManager) syncStatefulSet(tc *v1alpha1.TidbCluster) error {
//syncPumpStatefulSetForTidbCluster sync statefulset status of pump to tidbcluster
func (pmm *pumpMemberManager) syncPumpStatefulSetForTidbCluster(tc *v1alpha1.TidbCluster) error {

oldPumpSetTemp, err := pmm.setLister.StatefulSets(tc.Namespace).Get(controller.PumpMemberName(tc.Name))
if err != nil && !errors.IsNotFound(err) {
Expand Down Expand Up @@ -143,6 +146,27 @@ func (pmm *pumpMemberManager) syncStatefulSet(tc *v1alpha1.TidbCluster) error {
return nil
}

func (pmm *pumpMemberManager) syncTiDBClusterStatus(tc *v1alpha1.TidbCluster, set *apps.StatefulSet) error {
aylei marked this conversation as resolved.
Show resolved Hide resolved

tc.Status.Pump.StatefulSet = &set.Status

upgrading, err := pmm.pumpStatefulSetIsUpgrading(set, tc)
if err != nil {
return err
}
if upgrading {
tc.Status.Pump.Phase = v1alpha1.UpgradePhase
} else {
tc.Status.Pump.Phase = v1alpha1.NormalPhase
}

pumpStatus := map[string]v1alpha1.PumpMember{}

tc.Status.Pump.Members = pumpStatus
shonge marked this conversation as resolved.
Show resolved Hide resolved

return nil
}

func (pmm *pumpMemberManager) syncHeadlessService(tc *v1alpha1.TidbCluster) error {

newSvc := getNewPumpHeadlessService(tc)
Expand Down Expand Up @@ -475,6 +499,33 @@ func getPumpLogLevel(tc *v1alpha1.TidbCluster) string {
return logLevel
}

func (pmm *pumpMemberManager) pumpStatefulSetIsUpgrading(set *apps.StatefulSet, tc *v1alpha1.TidbCluster) (bool, error) {
if statefulSetIsUpgrading(set) {
return true, nil
}
selector, err := label.New().
Instance(tc.GetLabels()[label.InstanceLabelKey]).
Pump().
Selector()
if err != nil {
return false, err
}
pumpPods, err := pmm.podLister.Pods(tc.GetNamespace()).List(selector)
if err != nil {
return false, err
}
for _, pod := range pumpPods {
revisionHash, exist := pod.Labels[apps.ControllerRevisionHashLabelKey]
if !exist {
return false, nil
}
if revisionHash != tc.Status.Pump.StatefulSet.UpdateRevision {
return true, nil
}
}
return false, nil
}

type FakePumpMemberManager struct {
err error
}
Expand Down
2 changes: 2 additions & 0 deletions pkg/manager/member/pump_member_manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,7 @@ func newFakePumpMemberManager() (*pumpMemberManager, *pumpFakeControls, *pumpFak
svcInformer := kubeinformers.NewSharedInformerFactory(kubeCli, 0).Core().V1().Services()
epsInformer := kubeinformers.NewSharedInformerFactory(kubeCli, 0).Core().V1().Endpoints()
cmInformer := kubeinformers.NewSharedInformerFactory(kubeCli, 0).Core().V1().ConfigMaps()
podInformer := kubeinformers.NewSharedInformerFactory(kubeCli, 0).Core().V1().Pods()
setControl := controller.NewFakeStatefulSetControl(setInformer, tcInformer)
svcControl := controller.NewFakeServiceControl(svcInformer, epsInformer, tcInformer)
cmControl := controller.NewFakeConfigMapControl(cmInformer)
Expand All @@ -452,6 +453,7 @@ func newFakePumpMemberManager() (*pumpMemberManager, *pumpFakeControls, *pumpFak
setInformer.Lister(),
svcInformer.Lister(),
cmInformer.Lister(),
podInformer.Lister(),
}
controls := &pumpFakeControls{
svc: svcControl,
Expand Down