From 2955a45fa3f8b2830f8005b986105738300917ed Mon Sep 17 00:00:00 2001 From: Zhonghu Xu Date: Tue, 30 Jul 2024 14:28:12 +0800 Subject: [PATCH 1/2] Fix kmesh daemon graceful exit Signed-off-by: Zhonghu Xu --- build/docker/start_kmesh.sh | 10 ++++++++-- pkg/bpf/bpf_restart.go | 8 ++++---- pkg/status/status_server.go | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/build/docker/start_kmesh.sh b/build/docker/start_kmesh.sh index 0af92b11d..aaf9d738c 100755 --- a/build/docker/start_kmesh.sh +++ b/build/docker/start_kmesh.sh @@ -31,6 +31,7 @@ pid=$! # pass SIGTERM to kmesh process function stop_kmesh() { + echo "received SIGTERM, stoppping kmesh" kill $pid } @@ -40,9 +41,14 @@ function cleanup(){ rmmod kmesh fi - echo "kmesh close" + echo "kmesh exit" } trap 'stop_kmesh' SIGTERM -wait # wait child process exit + +# wait for kmesh process to exit, cannot use wait $pid here, because the script received SIGTERM, wait will return immediately +while kill -0 $pid 2>/dev/null; do + sleep 1 +done + cleanup diff --git a/pkg/bpf/bpf_restart.go b/pkg/bpf/bpf_restart.go index a52476c4f..893ffb212 100644 --- a/pkg/bpf/bpf_restart.go +++ b/pkg/bpf/bpf_restart.go @@ -70,13 +70,13 @@ func inferRestartStatus() StartType { podName := strings.Split(env.Register("POD_NAME", "", "").Get(), "-") daemonSetName := podName[0] daemonSetNamespace := env.Register("POD_NAMESPACE", "", "").Get() - log.Infof("DaemonSet %s in namespace %s\n", daemonSetName, daemonSetNamespace) + log.Infof("trying to get daemonSet %s in namespace %s", daemonSetName, daemonSetNamespace) daemonSet, err := clientset.AppsV1().DaemonSets(daemonSetNamespace).Get(context.TODO(), daemonSetName, metav1.GetOptions{}) if err == nil { - log.Debugf("Found DaemonSet %s in namespace %s\n", daemonSet.Name, daemonSet.Namespace) + log.Infof("found daemonSet %s in namespace %s", daemonSet.Name, daemonSet.Namespace) return Restart } - log.Infof("DaemonSet %s in namespace %s\n", daemonSet.Name, daemonSet.Namespace) + log.Infof("unable to find daemonSet %s in namespace %s: %v ", daemonSetName, daemonSetNamespace, err) return Normal } @@ -90,7 +90,7 @@ func SetStartStatus(versionMap *ebpf.Map) { hash.Write([]byte(version.Get().GitVersion)) GitVersion = hash.Sum32() oldGitVersion := getOldVersionFromMap(versionMap, 0) - log.Debugf("oldGitVersion:%v\nGitVersion:%v", oldGitVersion, GitVersion) + log.Infof("oldGitVersion: %v newGitVersion: %v", oldGitVersion, GitVersion) if GitVersion == oldGitVersion { log.Infof("kmesh start with Restart, load bpf maps and prog from last") SetStartType(Restart) diff --git a/pkg/status/status_server.go b/pkg/status/status_server.go index 3b7c27f98..b13a0fca5 100644 --- a/pkg/status/status_server.go +++ b/pkg/status/status_server.go @@ -371,7 +371,7 @@ func (s *Server) setBpfLogLevel(w http.ResponseWriter, levelStr string) { func (s *Server) StartServer() { go func() { err := s.server.ListenAndServe() - if err != nil { + if err != nil && err != http.ErrServerClosed { log.Errorf("Failed to start status server: %v", err) } }() From 68d7f31b5de32211d368ce2d6a2daf9271f169b5 Mon Sep 17 00:00:00 2001 From: Zhonghu Xu Date: Tue, 30 Jul 2024 14:30:02 +0800 Subject: [PATCH 2/2] Fix typo Signed-off-by: Zhonghu Xu --- build/docker/start_kmesh.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/docker/start_kmesh.sh b/build/docker/start_kmesh.sh index aaf9d738c..2651bdc70 100755 --- a/build/docker/start_kmesh.sh +++ b/build/docker/start_kmesh.sh @@ -31,7 +31,7 @@ pid=$! # pass SIGTERM to kmesh process function stop_kmesh() { - echo "received SIGTERM, stoppping kmesh" + echo "received SIGTERM, stopping kmesh" kill $pid }