diff --git a/.github/workflows/static.yaml b/.github/workflows/static.yaml index c21f11f5d4..ccff1bc85a 100644 --- a/.github/workflows/static.yaml +++ b/.github/workflows/static.yaml @@ -15,5 +15,5 @@ jobs: - name: Run linter uses: golangci/golangci-lint-action@v6 with: - version: v1.60 - args: -E=gofmt,unused,ineffassign,revive,misspell,exportloopref,asciicheck,bodyclose,depguard,dogsled,durationcheck,errname,forbidigo -D=structcheck,typecheck,staticcheck --timeout=30m0s + version: v1.64 + args: -E=gofmt,unused,ineffassign,revive,misspell,asciicheck,bodyclose,dogsled,durationcheck,errname,forbidigo -D=structcheck,typecheck,staticcheck --timeout=30m0s diff --git a/go.mod b/go.mod index f6440f95a0..ece2d4a28d 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ module sigs.k8s.io/azuredisk-csi-driver -go 1.23.3 +go 1.24 -toolchain go1.23.4 +toolchain go1.24.1 godebug winsymlink=0 @@ -43,9 +43,9 @@ require ( k8s.io/mount-utils v0.32.2 k8s.io/pod-security-admission v0.32.0 k8s.io/utils v0.0.0-20241210054802-24370beab758 - sigs.k8s.io/cloud-provider-azure v1.29.1-0.20250305024401-4c771d529327 - sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.9 - sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader v0.4.0 + sigs.k8s.io/cloud-provider-azure v1.29.1-0.20250316140635-7ef23be1356a + sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.12 + sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader v0.4.1 sigs.k8s.io/yaml v1.4.0 ) @@ -63,7 +63,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/msi-dataplane v0.4.2 // indirect + github.com/Azure/msi-dataplane v0.4.3 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.4.1 // indirect github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab // indirect github.com/Microsoft/go-winio v0.6.2 // indirect @@ -131,7 +131,7 @@ require ( github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.21.0 // indirect + github.com/prometheus/client_golang v1.21.1 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.62.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect @@ -146,9 +146,9 @@ require ( go.etcd.io/etcd/client/v3 v3.5.17 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.56.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.57.0 // indirect go.opentelemetry.io/otel/metric v1.35.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.34.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.35.0 // indirect go.opentelemetry.io/otel/trace v1.35.0 // indirect go.opentelemetry.io/proto/otlp v1.5.0 // indirect go.uber.org/multierr v1.11.0 // indirect diff --git a/go.sum b/go.sum index fd817a24a0..b61605c6a4 100644 --- a/go.sum +++ b/go.sum @@ -47,8 +47,8 @@ github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest/mocks v0.4.3 h1:GXOGHjM7L2PF7tOuB0BawXMK5govrcUt3mF0qD0Qh30= github.com/Azure/go-autorest/autorest/mocks v0.4.3/go.mod h1:Z5HZUetq7pVWST7gWM79R9uGOyxEqyw76Oua5q9PhfQ= -github.com/Azure/msi-dataplane v0.4.2 h1:4V44wRZ+sKmKgj64SKN5lMskt1qQBQSUiy6kazWvwKU= -github.com/Azure/msi-dataplane v0.4.2/go.mod h1:yAfxdJyvcnvSDfSyOFV9qm4fReEQDl+nZLGeH2ZWSmw= +github.com/Azure/msi-dataplane v0.4.3 h1:dWPWzY4b54tLIR9T1Q014Xxd/1DxOsMIp6EjRFAJlQY= +github.com/Azure/msi-dataplane v0.4.3/go.mod h1:yAfxdJyvcnvSDfSyOFV9qm4fReEQDl+nZLGeH2ZWSmw= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= github.com/AzureAD/microsoft-authentication-library-for-go v1.4.1 h1:8BKxhZZLX/WosEeoCvWysmKUscfa9v8LIPEEU0JjE2o= @@ -375,8 +375,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.21.0 h1:DIsaGmiaBkSangBgMtWdNfxbMNdku5IK6iNhrEqWvdA= -github.com/prometheus/client_golang v1.21.0/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= +github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= +github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= @@ -461,14 +461,14 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glB go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE= -go.opentelemetry.io/otel/exporters/prometheus v0.56.0 h1:GnCIi0QyG0yy2MrJLzVrIM7laaJstj//flf1zEJCG+E= -go.opentelemetry.io/otel/exporters/prometheus v0.56.0/go.mod h1:JQcVZtbIIPM+7SWBB+T6FK+xunlyidwLp++fN0sUaOk= +go.opentelemetry.io/otel/exporters/prometheus v0.57.0 h1:AHh/lAP1BHrY5gBwk8ncc25FXWm/gmmY3BX258z5nuk= +go.opentelemetry.io/otel/exporters/prometheus v0.57.0/go.mod h1:QpFWz1QxqevfjwzYdbMb4Y1NnlJvqSGwyuU0B4iuc9c= go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= -go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= -go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= +go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o= +go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w= go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= @@ -834,12 +834,12 @@ k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJ k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.1 h1:uOuSLOMBWkJH0TWa9X6l+mj5nZdm6Ay6Bli8HL8rNfk= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.1/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= -sigs.k8s.io/cloud-provider-azure v1.29.1-0.20250305024401-4c771d529327 h1:Ykk7PsDismZ+yIlqob8fSyivMhm9q1uziZttxhGrNKU= -sigs.k8s.io/cloud-provider-azure v1.29.1-0.20250305024401-4c771d529327/go.mod h1:0Bca/ySkQrlalgEgOZne7xeQVU6KFheDWD3CYGma7AE= -sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.9 h1:+ngbNuuzAIy4mIA09/ALZxx0c+PfriOdUZkkFwpTSv8= -sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.9/go.mod h1:wlb5KMXferSuS9asjIlqjU7yHnCUEtAGnwjYdDtqdmk= -sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader v0.4.0 h1:n6NEFrYsUKuoaujmyddxS2ztXrIsbMwwcU9W3xbhjf4= -sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader v0.4.0/go.mod h1:8ajMCBBJb9AjA2UCsDk8QyvWcuXDW8KEjJpKJHibLKc= +sigs.k8s.io/cloud-provider-azure v1.29.1-0.20250316140635-7ef23be1356a h1:EIw7E9EL2/e67y5lEXAG78Xs5h83FxCXcXzD8/Y0Nf8= +sigs.k8s.io/cloud-provider-azure v1.29.1-0.20250316140635-7ef23be1356a/go.mod h1:aVsb6+G1tDTLqGd2hIcEq8An49rXifJYyMH+hU/+URU= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.12 h1:9CnsYC1HVu/QPExszNb7sRLvbjeFsNiby2WsDUugSZs= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.12/go.mod h1:qMLI6HgC4GL/2w+KINP8YVDRzKCH/zQaoYHbfu7YOfU= +sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader v0.4.1 h1:F5qZPS35TGb0ghlLGcHrbwzoO3mFnCBMM4ADGAlY+rI= +sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader v0.4.1/go.mod h1:rEQnoF3pmD1kmAFQCwA/SqHiiftLFeMwdQt0gsuKWbM= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= diff --git a/pkg/azuredisk/azure_common_windows.go b/pkg/azuredisk/azure_common_windows.go index f253a7f88e..88d344fb0f 100644 --- a/pkg/azuredisk/azure_common_windows.go +++ b/pkg/azuredisk/azure_common_windows.go @@ -95,61 +95,24 @@ func CleanupMountPoint(path string, m *mount.SafeFormatAndMount, unmountVolume b } func getDevicePathWithMountPath(mountPath string, m *mount.SafeFormatAndMount) (string, error) { - var devicePath string - var err error - if proxy, ok := m.Interface.(mounter.CSIProxyMounter); ok { - devicePath, err = proxy.GetDeviceNameFromMount(mountPath, "") - } else { - return "", fmt.Errorf("could not cast to csi proxy class") - } - - if err != nil { - if sts, ok := status.FromError(err); ok { - return "", fmt.Errorf(sts.Message()) - } - return "", err + return proxy.GetDeviceNameFromMount(mountPath, "") } - - return devicePath, nil + return "", fmt.Errorf("could not cast to csi proxy class") } func getBlockSizeBytes(devicePath string, m *mount.SafeFormatAndMount) (int64, error) { - var sizeInBytes int64 - var err error - if proxy, ok := m.Interface.(mounter.CSIProxyMounter); ok { - sizeInBytes, err = proxy.GetVolumeSizeInBytes(devicePath) - } else { - return -1, fmt.Errorf("could not cast to csi proxy class") - } - - if err != nil { - if sts, ok := status.FromError(err); ok { - return -1, fmt.Errorf(sts.Message()) - } - return -1, err + return proxy.GetVolumeSizeInBytes(devicePath) } - - return sizeInBytes, nil + return -1, fmt.Errorf("could not cast to csi proxy class") } func resizeVolume(devicePath, volumePath string, m *mount.SafeFormatAndMount) error { - var err error if proxy, ok := m.Interface.(mounter.CSIProxyMounter); ok { - err = proxy.ResizeVolume(devicePath) - } else { - return fmt.Errorf("could not cast to csi proxy class") + return proxy.ResizeVolume(devicePath) } - - if err != nil { - if sts, ok := status.FromError(err); ok { - return fmt.Errorf(sts.Message()) - } - return err - } - - return nil + return fmt.Errorf("could not cast to csi proxy class") } // needResizeVolume check whether device needs resize @@ -171,7 +134,7 @@ func (d *DriverCore) GetVolumeStats(ctx context.Context, m *mount.SafeFormatAndM // check if the volume stats is cached cache, err := d.volStatsCache.Get(ctx, volumeID, azcache.CacheReadTypeDefault) if err != nil { - return nil, status.Errorf(codes.Internal, err.Error()) + return nil, status.Errorf(codes.Internal, "%v", err) } if cache != nil { volUsage := cache.(csi.VolumeUsage) diff --git a/pkg/azureutils/azure_disk_utils.go b/pkg/azureutils/azure_disk_utils.go index 568e3a2e4a..4431f5b169 100644 --- a/pkg/azureutils/azure_disk_utils.go +++ b/pkg/azureutils/azure_disk_utils.go @@ -441,9 +441,9 @@ func IsValidVolumeCapabilities(volCaps []*csi.VolumeCapability, maxShares int) e } func IsValidAccessModes(volCaps []*csi.VolumeCapability) bool { - hasSupport := func(cap *csi.VolumeCapability) bool { + hasSupport := func(capability *csi.VolumeCapability) bool { for _, c := range volumeCaps { - if c.GetMode() == cap.AccessMode.GetMode() { + if c.GetMode() == capability.AccessMode.GetMode() { return true } } diff --git a/pkg/csi-common/utils.go b/pkg/csi-common/utils.go index 5f707f3437..509d7d4e82 100644 --- a/pkg/csi-common/utils.go +++ b/pkg/csi-common/utils.go @@ -70,21 +70,21 @@ func NewVolumeCapabilityAccessMode(mode csi.VolumeCapability_AccessMode_Mode) *c return &csi.VolumeCapability_AccessMode{Mode: mode} } -func NewControllerServiceCapability(cap csi.ControllerServiceCapability_RPC_Type) *csi.ControllerServiceCapability { +func NewControllerServiceCapability(c csi.ControllerServiceCapability_RPC_Type) *csi.ControllerServiceCapability { return &csi.ControllerServiceCapability{ Type: &csi.ControllerServiceCapability_Rpc{ Rpc: &csi.ControllerServiceCapability_RPC{ - Type: cap, + Type: c, }, }, } } -func NewNodeServiceCapability(cap csi.NodeServiceCapability_RPC_Type) *csi.NodeServiceCapability { +func NewNodeServiceCapability(c csi.NodeServiceCapability_RPC_Type) *csi.NodeServiceCapability { return &csi.NodeServiceCapability{ Type: &csi.NodeServiceCapability_Rpc{ Rpc: &csi.NodeServiceCapability_RPC{ - Type: cap, + Type: c, }, }, } diff --git a/vendor/github.com/Azure/msi-dataplane/pkg/dataplane/reloadCredentials.go b/vendor/github.com/Azure/msi-dataplane/pkg/dataplane/reloadCredentials.go index 70d2c69e2c..3b1df96676 100644 --- a/vendor/github.com/Azure/msi-dataplane/pkg/dataplane/reloadCredentials.go +++ b/vendor/github.com/Azure/msi-dataplane/pkg/dataplane/reloadCredentials.go @@ -3,6 +3,7 @@ package dataplane import ( "context" "encoding/json" + "fmt" "log/slog" "os" "sync" @@ -15,13 +16,6 @@ import ( "github.com/go-logr/logr" ) -const ( - // Errors returned when reloading credentials - errCreateFileWatcher = "failed to create file watcher" - errAddFileToWatcher = "failed to add credentialFile to file watcher" - errLoadCredentials = "failed to load credentials from file" -) - type reloadingCredential struct { clientOpts azcore.ClientOptions currentValue *azidentity.ClientCertificateCredential @@ -81,7 +75,9 @@ func NewUserAssignedIdentityCredential(ctx context.Context, credentialPath strin return nil, err } // start the process of watching - the caller can cancel ctx if they want to stop - credential.start(ctx, credentialPath) + if err := credential.start(ctx, credentialPath); err != nil { + return nil, err + } return credential, nil } @@ -94,23 +90,28 @@ func (r *reloadingCredential) GetToken(ctx context.Context, options policy.Token return r.currentValue.GetToken(ctx, options) } -func (r *reloadingCredential) start(ctx context.Context, credentialFile string) { +func (r *reloadingCredential) start(ctx context.Context, credentialFile string) error { // set up the file watcher, call load() when we see events or on some timer in case no events are delivered fileWatcher, err := fsnotify.NewWatcher() if err != nil { - r.logger.Error(err, errCreateFileWatcher) + return fmt.Errorf("failed to create file watcher: %w", err) } // we close the file watcher if adding the file to watch fails. // this will also close the new go routine created to watch the file err = fileWatcher.Add(credentialFile) if err != nil { - fileWatcher.Close() - r.logger.Error(err, errAddFileToWatcher) - return + if closeErr := fileWatcher.Close(); closeErr != nil { + r.logger.Error(err, "failed to close file watcher") + } + return fmt.Errorf("failed to add credential file to file watcher: %w", err) } go func() { - defer fileWatcher.Close() + defer func() { + if err := fileWatcher.Close(); err != nil { + r.logger.Error(err, "failed to close file watcher") + } + }() defer r.ticker.Stop() for { select { @@ -121,43 +122,44 @@ func (r *reloadingCredential) start(ctx context.Context, credentialFile string) } if event.Op.Has(fsnotify.Write) { if err := r.load(credentialFile); err != nil { - r.logger.Error(err, errLoadCredentials) + r.logger.Error(err, "failed to reload credential after file event") } } case <-r.ticker.C: if err := r.load(credentialFile); err != nil { - r.logger.Error(err, errLoadCredentials) + r.logger.Error(err, "failed to reload credential periodically") } case err, ok := <-fileWatcher.Errors: if !ok { r.logger.Info("stopping credential reloader since file watcher has no events") return } - r.logger.Error(err, errLoadCredentials) + r.logger.Error(err, "recieved an error from the file watcher") case <-ctx.Done(): r.logger.Info("user signaled context cancel, stopping credential reloader") return } } }() + return nil } func (r *reloadingCredential) load(credentialFile string) error { // read the file from the filesystem and update the current value we're holding on to if the certificate we read is newer, making sure to not step on the toes of anyone calling GetToken() byteValue, err := os.ReadFile(credentialFile) if err != nil { - return err + return fmt.Errorf("failed to read credential file %s: %w", credentialFile, err) } var credentials UserAssignedIdentityCredentials if err := json.Unmarshal(byteValue, &credentials); err != nil { - return err + return fmt.Errorf("failed to unmarshal credential file %s: %w", credentialFile, err) } var newCertValue *azidentity.ClientCertificateCredential newCertValue, err = GetCredential(r.clientOpts, credentials) if err != nil { - return err + return fmt.Errorf("failed to get client certificate credential: %w", err) } r.lock.Lock() @@ -165,7 +167,7 @@ func (r *reloadingCredential) load(credentialFile string) error { if r.notBefore != "" { err, ok := isLoadedCredentialNewer(*credentials.NotBefore, r.notBefore) if err != nil { - return err + return fmt.Errorf("failed to determine not_before for credential: %w", err) } if !ok { return nil diff --git a/vendor/github.com/prometheus/client_golang/prometheus/atomic_update.go b/vendor/github.com/prometheus/client_golang/prometheus/atomic_update.go deleted file mode 100644 index b65896a319..0000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/atomic_update.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "math" - "sync/atomic" - "time" -) - -// atomicUpdateFloat atomically updates the float64 value pointed to by bits -// using the provided updateFunc, with an exponential backoff on contention. -func atomicUpdateFloat(bits *uint64, updateFunc func(float64) float64) { - const ( - // both numbers are derived from empirical observations - // documented in this PR: https://github.com/prometheus/client_golang/pull/1661 - maxBackoff = 320 * time.Millisecond - initialBackoff = 10 * time.Millisecond - ) - backoff := initialBackoff - - for { - loadedBits := atomic.LoadUint64(bits) - oldFloat := math.Float64frombits(loadedBits) - newFloat := updateFunc(oldFloat) - newBits := math.Float64bits(newFloat) - - if atomic.CompareAndSwapUint64(bits, loadedBits, newBits) { - break - } else { - // Exponential backoff with sleep and cap to avoid infinite wait - time.Sleep(backoff) - backoff *= 2 - if backoff > maxBackoff { - backoff = maxBackoff - } - } - } -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/counter.go b/vendor/github.com/prometheus/client_golang/prometheus/counter.go index 2996aef6a0..4ce84e7a80 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/counter.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/counter.go @@ -134,9 +134,13 @@ func (c *counter) Add(v float64) { return } - atomicUpdateFloat(&c.valBits, func(oldVal float64) float64 { - return oldVal + v - }) + for { + oldBits := atomic.LoadUint64(&c.valBits) + newBits := math.Float64bits(math.Float64frombits(oldBits) + v) + if atomic.CompareAndSwapUint64(&c.valBits, oldBits, newBits) { + return + } + } } func (c *counter) AddWithExemplar(v float64, e Labels) { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go index aa18463654..dd2eac9406 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go @@ -120,9 +120,13 @@ func (g *gauge) Dec() { } func (g *gauge) Add(val float64) { - atomicUpdateFloat(&g.valBits, func(oldVal float64) float64 { - return oldVal + val - }) + for { + oldBits := atomic.LoadUint64(&g.valBits) + newBits := math.Float64bits(math.Float64frombits(oldBits) + val) + if atomic.CompareAndSwapUint64(&g.valBits, oldBits, newBits) { + return + } + } } func (g *gauge) Sub(val float64) { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go index 1a279035b3..c453b754a7 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go @@ -1647,9 +1647,13 @@ func waitForCooldown(count uint64, counts *histogramCounts) { // atomicAddFloat adds the provided float atomically to another float // represented by the bit pattern the bits pointer is pointing to. func atomicAddFloat(bits *uint64, v float64) { - atomicUpdateFloat(bits, func(oldVal float64) float64 { - return oldVal + v - }) + for { + loadedBits := atomic.LoadUint64(bits) + newBits := math.Float64bits(math.Float64frombits(loadedBits) + v) + if atomic.CompareAndSwapUint64(bits, loadedBits, newBits) { + break + } + } } // atomicDecUint32 atomically decrements the uint32 p points to. See diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.go index 50eb860a68..0a61b98461 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.go @@ -11,6 +11,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build darwin && !ios + package prometheus import ( diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_cgo_darwin.c b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_cgo_darwin.c similarity index 98% rename from vendor/github.com/prometheus/client_golang/prometheus/process_collector_cgo_darwin.c rename to vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_cgo_darwin.c index 1554f674d8..d00a24315d 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_cgo_darwin.c +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_cgo_darwin.c @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//go:build darwin && cgo +//go:build darwin && !ios && cgo #include #include diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_cgo_darwin.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_cgo_darwin.go similarity index 97% rename from vendor/github.com/prometheus/client_golang/prometheus/process_collector_cgo_darwin.go rename to vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_cgo_darwin.go index b375c3a771..9ac53f9992 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_cgo_darwin.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_cgo_darwin.go @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//go:build darwin && cgo +//go:build darwin && !ios && cgo package prometheus diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_nocgo_darwin.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_nocgo_darwin.go similarity index 97% rename from vendor/github.com/prometheus/client_golang/prometheus/process_collector_nocgo_darwin.go rename to vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_nocgo_darwin.go index 5165047311..8ddb0995d6 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_nocgo_darwin.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_nocgo_darwin.go @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//go:build darwin && !cgo +//go:build darwin && !ios && !cgo package prometheus diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_wasip1_js.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_not_supported.go similarity index 95% rename from vendor/github.com/prometheus/client_golang/prometheus/process_collector_wasip1_js.go rename to vendor/github.com/prometheus/client_golang/prometheus/process_collector_not_supported.go index c68f7f8518..7732b7f376 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_wasip1_js.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_not_supported.go @@ -11,8 +11,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -//go:build wasip1 || js -// +build wasip1 js +//go:build wasip1 || js || ios +// +build wasip1 js ios package prometheus diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_procfsenabled.go similarity index 100% rename from vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go rename to vendor/github.com/prometheus/client_golang/prometheus/process_collector_procfsenabled.go diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/vendor/github.com/prometheus/client_golang/prometheus/summary.go index 76a9e12f4a..ac5203c6fa 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/summary.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/summary.go @@ -471,9 +471,13 @@ func (s *noObjectivesSummary) Observe(v float64) { n := atomic.AddUint64(&s.countAndHotIdx, 1) hotCounts := s.counts[n>>63] - atomicUpdateFloat(&hotCounts.sumBits, func(oldVal float64) float64 { - return oldVal + v - }) + for { + oldBits := atomic.LoadUint64(&hotCounts.sumBits) + newBits := math.Float64bits(math.Float64frombits(oldBits) + v) + if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { + break + } + } // Increment count last as we take it as a signal that the observation // is complete. atomic.AddUint64(&hotCounts.count, 1) @@ -515,13 +519,14 @@ func (s *noObjectivesSummary) Write(out *dto.Metric) error { // Finally add all the cold counts to the new hot counts and reset the cold counts. atomic.AddUint64(&hotCounts.count, count) atomic.StoreUint64(&coldCounts.count, 0) - - // Use atomicUpdateFloat to update hotCounts.sumBits atomically. - atomicUpdateFloat(&hotCounts.sumBits, func(oldVal float64) float64 { - return oldVal + sum.GetSampleSum() - }) - atomic.StoreUint64(&coldCounts.sumBits, 0) - + for { + oldBits := atomic.LoadUint64(&hotCounts.sumBits) + newBits := math.Float64bits(math.Float64frombits(oldBits) + sum.GetSampleSum()) + if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { + atomic.StoreUint64(&coldCounts.sumBits, 0) + break + } + } return nil } diff --git a/vendor/go.opentelemetry.io/otel/exporters/prometheus/exporter.go b/vendor/go.opentelemetry.io/otel/exporters/prometheus/exporter.go index 50c95a16f7..a8677e93a2 100644 --- a/vendor/go.opentelemetry.io/otel/exporters/prometheus/exporter.go +++ b/vendor/go.opentelemetry.io/otel/exporters/prometheus/exporter.go @@ -96,7 +96,7 @@ type collector struct { // prometheus counters MUST have a _total suffix by default: // https://github.com/open-telemetry/opentelemetry-specification/blob/v1.20.0/specification/compatibility/prometheus_and_openmetrics.md -const counterSuffix = "_total" +const counterSuffix = "total" // New returns a Prometheus Exporter. func New(opts ...Option) (*Exporter, error) { @@ -368,38 +368,38 @@ func createScopeInfoMetric(scope instrumentation.Scope) (prometheus.Metric, erro var unitSuffixes = map[string]string{ // Time - "d": "_days", - "h": "_hours", - "min": "_minutes", - "s": "_seconds", - "ms": "_milliseconds", - "us": "_microseconds", - "ns": "_nanoseconds", + "d": "days", + "h": "hours", + "min": "minutes", + "s": "seconds", + "ms": "milliseconds", + "us": "microseconds", + "ns": "nanoseconds", // Bytes - "By": "_bytes", - "KiBy": "_kibibytes", - "MiBy": "_mebibytes", - "GiBy": "_gibibytes", - "TiBy": "_tibibytes", - "KBy": "_kilobytes", - "MBy": "_megabytes", - "GBy": "_gigabytes", - "TBy": "_terabytes", + "By": "bytes", + "KiBy": "kibibytes", + "MiBy": "mebibytes", + "GiBy": "gibibytes", + "TiBy": "tibibytes", + "KBy": "kilobytes", + "MBy": "megabytes", + "GBy": "gigabytes", + "TBy": "terabytes", // SI - "m": "_meters", - "V": "_volts", - "A": "_amperes", - "J": "_joules", - "W": "_watts", - "g": "_grams", + "m": "meters", + "V": "volts", + "A": "amperes", + "J": "joules", + "W": "watts", + "g": "grams", // Misc - "Cel": "_celsius", - "Hz": "_hertz", - "1": "_ratio", - "%": "_percent", + "Cel": "celsius", + "Hz": "hertz", + "1": "ratio", + "%": "percent", } // getName returns the sanitized name, prefixed with the namespace and suffixed with unit. @@ -414,19 +414,31 @@ func (c *collector) getName(m metricdata.Metrics, typ *dto.MetricType) string { // Remove the _total suffix here, as we will re-add the total suffix // later, and it needs to come after the unit suffix. name = strings.TrimSuffix(name, counterSuffix) + // If the last character is an underscore, or would be converted to an underscore, trim it from the name. + // an underscore will be added back in later. + if convertsToUnderscore(rune(name[len(name)-1])) { + name = name[:len(name)-1] + } } if c.namespace != "" { name = c.namespace + name } if suffix, ok := unitSuffixes[m.Unit]; ok && !c.withoutUnits && !strings.HasSuffix(name, suffix) { - name += suffix + name += "_" + suffix } if addCounterSuffix { - name += counterSuffix + name += "_" + counterSuffix } return name } +// convertsToUnderscore returns true if the character would be converted to an +// underscore when the escaping scheme is underscore escaping. This is meant to +// capture any character that should be considered a "delimiter". +func convertsToUnderscore(b rune) bool { + return !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == ':' || (b >= '0' && b <= '9')) +} + func (c *collector) metricType(m metricdata.Metrics) *dto.MetricType { switch v := m.Data.(type) { case metricdata.Histogram[int64], metricdata.Histogram[float64]: diff --git a/vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go b/vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go index 336ea91d1b..32a62e1b8e 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go +++ b/vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go @@ -48,7 +48,7 @@ type expoHistogramDataPoint[N int64 | float64] struct { zeroCount uint64 } -func newExpoHistogramDataPoint[N int64 | float64](attrs attribute.Set, maxSize int, maxScale int32, noMinMax, noSum bool) *expoHistogramDataPoint[N] { +func newExpoHistogramDataPoint[N int64 | float64](attrs attribute.Set, maxSize int, maxScale int32, noMinMax, noSum bool) *expoHistogramDataPoint[N] { // nolint:revive // we need this control flag f := math.MaxFloat64 ma := N(f) // if N is int64, max will overflow to -9223372036854775808 mi := N(-f) diff --git a/vendor/go.opentelemetry.io/otel/sdk/metric/version.go b/vendor/go.opentelemetry.io/otel/sdk/metric/version.go index 7c4b8530df..92d2589daf 100644 --- a/vendor/go.opentelemetry.io/otel/sdk/metric/version.go +++ b/vendor/go.opentelemetry.io/otel/sdk/metric/version.go @@ -5,5 +5,5 @@ package metric // import "go.opentelemetry.io/otel/sdk/metric" // version is the current release version of the metric SDK in use. func version() string { - return "1.34.0" + return "1.35.0" } diff --git a/vendor/modules.txt b/vendor/modules.txt index 9438db4c7e..5657f37765 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -79,7 +79,7 @@ github.com/Azure/go-autorest # github.com/Azure/go-autorest/autorest/mocks v0.4.3 ## explicit; go 1.15 github.com/Azure/go-autorest/autorest/mocks -# github.com/Azure/msi-dataplane v0.4.2 +# github.com/Azure/msi-dataplane v0.4.3 ## explicit; go 1.22 github.com/Azure/msi-dataplane/pkg/dataplane github.com/Azure/msi-dataplane/pkg/dataplane/internal/challenge @@ -491,7 +491,7 @@ github.com/pkg/errors # github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 ## explicit github.com/pmezard/go-difflib/difflib -# github.com/prometheus/client_golang v1.21.0 +# github.com/prometheus/client_golang v1.21.1 ## explicit; go 1.21 github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header @@ -604,7 +604,7 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/envconfig go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry -# go.opentelemetry.io/otel/exporters/prometheus v0.56.0 +# go.opentelemetry.io/otel/exporters/prometheus v0.57.0 ## explicit; go 1.22.0 go.opentelemetry.io/otel/exporters/prometheus # go.opentelemetry.io/otel/metric v1.35.0 @@ -620,7 +620,7 @@ go.opentelemetry.io/otel/sdk/internal/env go.opentelemetry.io/otel/sdk/internal/x go.opentelemetry.io/otel/sdk/resource go.opentelemetry.io/otel/sdk/trace -# go.opentelemetry.io/otel/sdk/metric v1.34.0 +# go.opentelemetry.io/otel/sdk/metric v1.35.0 ## explicit; go 1.22.0 go.opentelemetry.io/otel/sdk/metric go.opentelemetry.io/otel/sdk/metric/exemplar @@ -1862,8 +1862,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/metrics sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/common/metrics sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client -# sigs.k8s.io/cloud-provider-azure v1.29.1-0.20250305024401-4c771d529327 -## explicit; go 1.23.2 +# sigs.k8s.io/cloud-provider-azure v1.29.1-0.20250316140635-7ef23be1356a +## explicit; go 1.24 sigs.k8s.io/cloud-provider-azure/pkg/cache sigs.k8s.io/cloud-provider-azure/pkg/consts sigs.k8s.io/cloud-provider-azure/pkg/log @@ -1890,7 +1890,7 @@ sigs.k8s.io/cloud-provider-azure/pkg/util/string sigs.k8s.io/cloud-provider-azure/pkg/util/taints sigs.k8s.io/cloud-provider-azure/pkg/util/vm sigs.k8s.io/cloud-provider-azure/pkg/version -# sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.9 +# sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.5.12 ## explicit; go 1.23.1 sigs.k8s.io/cloud-provider-azure/pkg/azclient sigs.k8s.io/cloud-provider-azure/pkg/azclient/accountclient @@ -1975,7 +1975,7 @@ sigs.k8s.io/cloud-provider-azure/pkg/azclient/virtualnetworkclient sigs.k8s.io/cloud-provider-azure/pkg/azclient/virtualnetworkclient/mock_virtualnetworkclient sigs.k8s.io/cloud-provider-azure/pkg/azclient/virtualnetworklinkclient sigs.k8s.io/cloud-provider-azure/pkg/azclient/virtualnetworklinkclient/mock_virtualnetworklinkclient -# sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader v0.4.0 +# sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader v0.4.1 ## explicit; go 1.23.1 sigs.k8s.io/cloud-provider-azure/pkg/azclient/configloader # sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 diff --git a/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmss.go b/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmss.go index 04bdc6b827..5026c1eaa3 100644 --- a/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmss.go +++ b/vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_controller_vmss.go @@ -110,7 +110,7 @@ func (ss *ScaleSet) AttachDisk(ctx context.Context, nodeName types.NodeName, dis result, rerr := ss.ComputeClientFactory.GetVirtualMachineScaleSetVMClient().Update(ctx, nodeResourceGroup, vm.VMSSName, vm.InstanceID, *newVM) if rerr != nil { klog.Errorf("azureDisk - attach disk list(%+v) on rg(%s) vm(%s) failed, err: %v", diskMap, nodeResourceGroup, nodeName, rerr) - if exists, err := errutils.CheckResourceExistsFromAzcoreError(rerr); exists && err == nil { + if exists, err := errutils.CheckResourceExistsFromAzcoreError(rerr); !exists && !strings.Contains(rerr.Error(), consts.ParentResourceNotFoundMessageCode) && err == nil { klog.Errorf("azureDisk - begin to filterNonExistingDisks(%v) on rg(%s) vm(%s)", diskMap, nodeResourceGroup, nodeName) disks := FilterNonExistingDisks(ctx, ss.ComputeClientFactory, newVM.Properties.StorageProfile.DataDisks) newVM.Properties.StorageProfile.DataDisks = disks @@ -223,7 +223,7 @@ func (ss *ScaleSet) DetachDisk(ctx context.Context, nodeName types.NodeName, dis result, rerr = ss.ComputeClientFactory.GetVirtualMachineScaleSetVMClient().Update(ctx, nodeResourceGroup, vm.VMSSName, vm.InstanceID, *newVM) if rerr != nil { klog.Errorf("azureDisk - detach disk list(%s) on rg(%s) vm(%s) failed, err: %v", diskMap, nodeResourceGroup, nodeName, rerr) - if exists, err := errutils.CheckResourceExistsFromAzcoreError(rerr); exists && err == nil { + if exists, err := errutils.CheckResourceExistsFromAzcoreError(rerr); !exists && !strings.Contains(rerr.Error(), consts.ParentResourceNotFoundMessageCode) && err == nil { klog.Errorf("azureDisk - begin to filterNonExistingDisks(%v) on rg(%s) vm(%s)", diskMap, nodeResourceGroup, nodeName) disks := FilterNonExistingDisks(ctx, ss.ComputeClientFactory, newVM.Properties.StorageProfile.DataDisks) newVM.Properties.StorageProfile.DataDisks = disks