瀏覽代碼

Merge pull request #1640 from porter-dev/nafees/goroutine-leaks

[POR-103] Helm library update and goroutine leak fix in GetPodLogs
abelanger5 4 年之前
父節點
當前提交
712382ade8
共有 3 個文件被更改,包括 291 次插入97 次删除
  1. 19 22
      go.mod
  2. 256 60
      go.sum
  3. 16 15
      internal/kubernetes/agent.go

+ 19 - 22
go.mod

@@ -3,29 +3,27 @@ module github.com/porter-dev/porter
 go 1.16
 
 require (
-	cloud.google.com/go v0.81.0
+	cloud.google.com/go v0.99.0
 	github.com/AlecAivazis/survey/v2 v2.2.9
-	github.com/BurntSushi/toml v0.4.1 // indirect
 	github.com/Masterminds/semver/v3 v3.1.1
 	github.com/aws/aws-sdk-go v1.35.4
-	github.com/bradleyfalzon/ghinstallation/v2 v2.0.3 // indirect
+	github.com/bradleyfalzon/ghinstallation/v2 v2.0.3
 	github.com/buildpacks/pack v0.19.0
 	github.com/cli/cli v1.11.0
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/digitalocean/godo v1.56.0
-	github.com/docker/cli v20.10.7+incompatible
+	github.com/docker/cli v20.10.11+incompatible
 	github.com/docker/distribution v2.7.1+incompatible
-	github.com/docker/docker v20.10.7+incompatible
-	github.com/docker/docker-credential-helpers v0.6.3
+	github.com/docker/docker v20.10.12+incompatible
+	github.com/docker/docker-credential-helpers v0.6.4
 	github.com/docker/go-connections v0.4.0
-	github.com/fatih/color v1.10.0
+	github.com/fatih/color v1.13.0
 	github.com/getsentry/sentry-go v0.11.0
 	github.com/go-chi/chi v4.1.2+incompatible
 	github.com/go-playground/validator/v10 v10.3.0
 	github.com/go-redis/redis/v8 v8.11.0
 	github.com/go-test/deep v1.0.7
 	github.com/golang-jwt/jwt/v4 v4.2.0 // indirect
-	github.com/google/go-github/v29 v29.0.3 // indirect
 	github.com/google/go-github/v39 v39.2.0 // indirect
 	github.com/google/go-github/v41 v41.0.0
 	github.com/gorilla/schema v1.2.0
@@ -41,35 +39,34 @@ require (
 	github.com/moby/moby v20.10.6+incompatible
 	github.com/moby/term v0.0.0-20210610120745-9d4ed1856297
 	github.com/onsi/gomega v1.16.0 // indirect
-	github.com/opencontainers/image-spec v1.0.1
-	github.com/pelletier/go-toml v1.9.4 // indirect
+	github.com/opencontainers/image-spec v1.0.2
 	github.com/pkg/errors v0.9.1
 	github.com/porter-dev/switchboard v0.0.0-20220109170702-ea2a4450e034
 	github.com/rs/zerolog v1.26.0
 	github.com/segmentio/backo-go v0.0.0-20200129164019-23eae7c10bd3 // indirect
 	github.com/sendgrid/rest v2.6.3+incompatible // indirect
 	github.com/sendgrid/sendgrid-go v3.8.0+incompatible
-	github.com/spf13/cobra v1.2.1
+	github.com/spf13/cobra v1.3.0
 	github.com/spf13/pflag v1.0.5
-	github.com/spf13/viper v1.8.1
+	github.com/spf13/viper v1.10.0
 	github.com/stretchr/testify v1.7.0
 	github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect
 	golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b
-	golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602
-	google.golang.org/api v0.44.0
-	google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c
+	golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
+	google.golang.org/api v0.62.0
+	google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368
 	gopkg.in/segmentio/analytics-go.v3 v3.1.0
 	gopkg.in/yaml.v2 v2.4.0
 	gorm.io/driver/postgres v1.0.2
 	gorm.io/driver/sqlite v1.1.3
 	gorm.io/gorm v1.20.2
-	helm.sh/helm/v3 v3.7.1
-	k8s.io/api v0.22.3
-	k8s.io/apimachinery v0.22.3
-	k8s.io/cli-runtime v0.22.3
-	k8s.io/client-go v0.22.3
+	helm.sh/helm/v3 v3.8.0
+	k8s.io/api v0.23.1
+	k8s.io/apimachinery v0.23.1
+	k8s.io/cli-runtime v0.23.1
+	k8s.io/client-go v0.23.1
 	k8s.io/helm v2.17.0+incompatible
-	k8s.io/kubectl v0.22.1
+	k8s.io/kubectl v0.23.1
 	sigs.k8s.io/aws-iam-authenticator v0.5.2
-	sigs.k8s.io/yaml v1.2.0
+	sigs.k8s.io/yaml v1.3.0
 )

文件差異過大導致無法顯示
+ 256 - 60
go.sum


+ 16 - 15
internal/kubernetes/agent.go

@@ -622,25 +622,22 @@ func (a *Agent) GetPodLogs(namespace string, name string, selectedContainer stri
 
 	go func() {
 		for {
-			select {
-			case <-errorchan:
-				defer close(errorchan)
+			bytes, err := r.ReadBytes('\n')
+
+			if err == io.EOF {
+				errorchan <- nil
 				return
-			default:
 			}
 
-			bytes, err := r.ReadBytes('\n')
 			if _, writeErr := rw.Write(bytes); writeErr != nil {
 				errorchan <- writeErr
 				return
 			}
-			if err != nil {
-				if err != io.EOF {
-					errorchan <- err
-					return
-				}
-				errorchan <- nil
+
+			select {
+			case <-errorchan:
 				return
+			default:
 			}
 		}
 	}()
@@ -648,6 +645,7 @@ func (a *Agent) GetPodLogs(namespace string, name string, selectedContainer stri
 	for {
 		select {
 		case err = <-errorchan:
+			close(errorchan)
 			return err
 		}
 	}
@@ -1223,11 +1221,12 @@ func (a *Agent) waitForPod(pod *v1.Pod) (error, bool) {
 		return err, false
 	}
 	defer w.Stop()
-	for {
+
+	expireTime := time.Now().Add(time.Second * 30)
+
+	for time.Now().Unix() <= expireTime.Unix() {
 		select {
-		case <-time.After(time.Second * 30):
-			return goerrors.New("timed out waiting for pod"), false
-		case <-time.Tick(time.Second):
+		case <-time.NewTicker(time.Second).C:
 			// poll every second in case we already missed the ready event while
 			// creating the listener.
 			pod, err = a.Clientset.CoreV1().
@@ -1253,6 +1252,8 @@ func (a *Agent) waitForPod(pod *v1.Pod) (error, bool) {
 			}
 		}
 	}
+
+	return goerrors.New("timed out waiting for pod"), false
 }
 
 func isPodReady(pod *v1.Pod) bool {

部分文件因文件數量過多而無法顯示