Skip to content

Commit

Permalink
Handle nil pointer when runtime core is not ready in etcd
Browse files Browse the repository at this point in the history
Signed-off-by: Vitor <[email protected]>
  • Loading branch information
vitorsavian authored Nov 16, 2023
1 parent 12e64c8 commit fd676a5
Showing 1 changed file with 14 additions and 13 deletions.
27 changes: 14 additions & 13 deletions pkg/etcd/etcd.go
Original file line number Diff line number Diff line change
Expand Up @@ -1056,39 +1056,36 @@ func (e *ETCD) manageLearners(ctx context.Context) {
continue
}

nodes, err := e.getETCDNodes()
client, err := util.GetClientSet(e.config.Runtime.KubeConfigSupervisor)
if err != nil {
logrus.Errorf("Error while listing nodes with etcd status: %v", err)
logrus.Errorf("Failed to get k8s client for patch node status condition: %v", err)
continue
}

client, err := util.GetClientSet(e.config.Runtime.KubeConfigSupervisor)
nodes, err := e.getETCDNodes()
if err != nil {
logrus.Errorf("Failed to get k8s client for patch node status condition: %v", err)
continue
logrus.Warnf("Failed to list nodes with etcd role: %v", err)
}

for _, member := range members.Members {
if member.IsLearner {
if err := e.trackLearnerProgress(ctx, progress, member); err != nil {
logrus.Errorf("Failed to track learner progress towards promotion: %v", err)
}

for _, node := range nodes.Items {
for _, node := range nodes {
if strings.HasPrefix(member.Name, node.Name+"-") {
_, _, err := e.setEtcdStatusCondition(&node, client.CoreV1(), member.Name, false)
_, _, err := e.setEtcdStatusCondition(node, client.CoreV1(), member.Name, false)
if err != nil {
logrus.Errorf("Unable to set etcd status condition %s: %v", member.Name, err)
}
}
}

break
}

for _, node := range nodes.Items {
for _, node := range nodes {
if strings.HasPrefix(member.Name, node.Name+"-") {
_, _, err := e.setEtcdStatusCondition(&node, client.CoreV1(), member.Name, true)
_, _, err := e.setEtcdStatusCondition(node, client.CoreV1(), member.Name, true)
if err != nil {
logrus.Errorf("Unable to set etcd status condition %s: %v", member.Name, err)
}
Expand All @@ -1098,11 +1095,15 @@ func (e *ETCD) manageLearners(ctx context.Context) {
}
}

func (e *ETCD) getETCDNodes() (*v1.NodeList, error) {
func (e *ETCD) getETCDNodes() ([]*v1.Node, error) {
if e.config.Runtime.Core == nil {
return nil, errors.New("runtime core not ready")
}

nodes := e.config.Runtime.Core.Core().V1().Node()
etcdSelector := labels.Set{util.ETCDRoleLabelKey: "true"}

return nodes.List(metav1.ListOptions{LabelSelector: etcdSelector.String()})
return nodes.Cache().List(etcdSelector.AsSelector())
}

// trackLearnerProcess attempts to promote a learner. If it cannot be promoted, progress through the raft index is tracked.
Expand Down

0 comments on commit fd676a5

Please sign in to comment.