From 25c7208b7ea40da362d2e7f2c3cedee8dae0c8ec Mon Sep 17 00:00:00 2001 From: Vitor Savian Date: Thu, 18 Jan 2024 02:00:18 -0300 Subject: [PATCH] Changed how lastHeartBeatTime works in the etcd condition Signed-off-by: Vitor Savian --- pkg/etcd/etcd.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/etcd/etcd.go b/pkg/etcd/etcd.go index 59149304d4..87541284a1 100644 --- a/pkg/etcd/etcd.go +++ b/pkg/etcd/etcd.go @@ -68,6 +68,7 @@ const ( // other defaults from k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go defaultKeepAliveTime = 30 * time.Second defaultKeepAliveTimeout = 10 * time.Second + heartbeatInterval = 5 * time.Minute maxBackupRetention = 5 @@ -1248,8 +1249,17 @@ func (e *ETCD) setEtcdStatusCondition(node *v1.Node, client kubernetes.Interface } if find, condition := nodeUtil.GetNodeCondition(&node.Status, etcdStatusType); find >= 0 { - if condition.Status == newCondition.Status && memberStatus != StatusUnjoined { + + // if the condition is not changing, we only want to update the last heartbeat time + if condition.Status == newCondition.Status && condition.Reason == newCondition.Reason && condition.Message == newCondition.Message { logrus.Debugf("Node %s is not changing etcd status condition", memberName) + + // If the condition status is not changing, we only want to update the last heartbeat time if the + // LastHeartbeatTime is older than the heartbeatTimeout. + if metav1.Now().Sub(condition.LastHeartbeatTime.Time) < heartbeatInterval { + return nil + } + condition.LastHeartbeatTime = metav1.Now() return nodeHelper.SetNodeCondition(client, types.NodeName(node.Name), *condition) }