• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kubernetes-sigs / azuredisk-csi-driver / 12595558640

03 Jan 2025 09:24AM UTC coverage: 64.617% (+0.02%) from 64.6%
12595558640

Pull #2789

github

andyzhangx
chore: set GoMaxProcs as 2
Pull Request #2789: chore: set GoMaxProcs as 2

1 of 4 new or added lines in 2 files covered. (25.0%)

3910 of 6051 relevant lines covered (64.62%)

5.58 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

26.67
/pkg/azurediskplugin/main.go
1
/*
2
Copyright 2017 The Kubernetes Authors.
3

4
Licensed under the Apache License, Version 2.0 (the "License");
5
you may not use this file except in compliance with the License.
6
You may obtain a copy of the License at
7

8
    http://www.apache.org/licenses/LICENSE-2.0
9

10
Unless required by applicable law or agreed to in writing, software
11
distributed under the License is distributed on an "AS IS" BASIS,
12
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
See the License for the specific language governing permissions and
14
limitations under the License.
15
*/
16

17
package main
18

19
import (
20
        "context"
21
        "flag"
22
        "fmt"
23
        "net"
24
        "net/http"
25
        "os"
26
        "runtime"
27
        "strings"
28

29
        "k8s.io/component-base/metrics/legacyregistry"
30
        "k8s.io/klog/v2"
31
        "sigs.k8s.io/azuredisk-csi-driver/pkg/azuredisk"
32
        "sigs.k8s.io/azuredisk-csi-driver/pkg/azurediskplugin/hooks"
33
        "sigs.k8s.io/azuredisk-csi-driver/pkg/azureutils"
34
)
35

36
func init() {
1✔
37
        klog.InitFlags(nil)
1✔
38
        driverOptions.AddFlags().VisitAll(func(f *flag.Flag) {
39✔
39
                flag.CommandLine.Var(f.Value, f.Name, f.Usage)
38✔
40
        })
38✔
41
}
42

43
var (
44
        version        = flag.Bool("version", false, "Print the version and exit.")
45
        metricsAddress = flag.String("metrics-address", "", "export the metrics")
46
        preStopHook    = flag.Bool("pre-stop-hook", false, "enable pre-stop hook")
47
        driverOptions  azuredisk.DriverOptions
48
)
49

50
// exit is a separate function to handle program termination
51
var exit = func(code int) {
×
52
        os.Exit(code)
×
53
}
×
54

55
func main() {
1✔
56
        flag.Parse()
1✔
57
        if *version {
2✔
58
                info, err := azuredisk.GetVersionYAML(driverOptions.DriverName)
1✔
59
                if err != nil {
1✔
60
                        klog.Fatalln(err)
×
61
                }
×
62
                fmt.Println(info) // nolint
1✔
63
        } else if *preStopHook {
×
64
                handlePreStopHook(driverOptions.Kubeconfig)
×
65
        } else {
×
66
                exportMetrics()
×
67
                handle()
×
68
        }
×
69
        exit(0)
1✔
70
}
71

72
func handlePreStopHook(kubeconfig string) {
×
73
        kubeClient, err := azureutils.GetKubeClient(kubeconfig)
×
74
        if err != nil {
×
75
                klog.Errorf("failed to get kube client: %v", err)
×
76
        } else {
×
77
                if err := hooks.PreStop(kubeClient); err != nil {
×
78
                        klog.Errorf("execute PreStop lifecycle hook failed with error: %v", err)
×
79
                        klog.FlushAndExit(klog.ExitFlushTimeout, 1)
×
80
                }
×
81
        }
82
        klog.FlushAndExit(klog.ExitFlushTimeout, 0)
×
83
}
84

85
func handle() {
×
NEW
86
        runtime.GOMAXPROCS(int(driverOptions.GoMaxProcs))
×
NEW
87
        klog.Infof("Sys info: NumCPU: %v MAXPROC: %v", runtime.NumCPU(), runtime.GOMAXPROCS(0))
×
NEW
88

×
89
        driver := azuredisk.NewDriver(&driverOptions)
×
90
        if driver == nil {
×
91
                klog.Fatalln("Failed to initialize azuredisk CSI Driver")
×
92
        }
×
93
        if err := driver.Run(context.Background()); err != nil {
×
94
                klog.Fatalf("Failed to run azuredisk CSI Driver: %v", err)
×
95
        }
×
96
}
97

98
func exportMetrics() {
×
99
        if *metricsAddress == "" {
×
100
                return
×
101
        }
×
102
        l, err := net.Listen("tcp", *metricsAddress)
×
103
        if err != nil {
×
104
                klog.Warningf("failed to get listener for metrics endpoint: %v", err)
×
105
                return
×
106
        }
×
107
        serve(context.Background(), l, serveMetrics)
×
108
}
109

110
func serve(_ context.Context, l net.Listener, serveFunc func(net.Listener) error) {
×
111
        path := l.Addr().String()
×
112
        klog.V(2).Infof("set up prometheus server on %v", path)
×
113
        go func() {
×
114
                defer l.Close()
×
115
                if err := serveFunc(l); err != nil {
×
116
                        klog.Fatalf("serve failure(%v), address(%v)", err, path)
×
117
                }
×
118
        }()
119
}
120

121
func serveMetrics(l net.Listener) error {
×
122
        m := http.NewServeMux()
×
123
        m.Handle("/metrics", legacyregistry.Handler()) //nolint, because azure cloud provider uses legacyregistry currently
×
124
        return trapClosedConnErr(http.Serve(l, m))
×
125
}
×
126

127
func trapClosedConnErr(err error) error {
3✔
128
        if err == nil {
4✔
129
                return nil
1✔
130
        }
1✔
131
        if strings.Contains(err.Error(), "use of closed network connection") {
3✔
132
                return nil
1✔
133
        }
1✔
134
        return err
1✔
135
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc