@@ -26,11 +26,8 @@ import (
2626 "os"
2727 "path/filepath"
2828 "strings"
29- "sync"
3029 "time"
3130
32- "k8s.io/apimachinery/pkg/util/sets"
33-
3431 "github.com/googlecloudplatform/gcs-fuse-csi-driver/pkg/cloud_provider/clientset"
3532 "github.com/googlecloudplatform/gcs-fuse-csi-driver/pkg/util"
3633 "github.com/prometheus/client_golang/prometheus"
@@ -59,21 +56,14 @@ type manager struct {
5956 metricsEndpoint string
6057 fuseSocketDir string
6158 clientset clientset.Interface
62-
63- maximumNumberOfCollectors int
64- volumePublishPathRegistered sets.Set [string ]
65- mutex sync.Mutex
6659}
6760
68- func NewMetricsManager (metricsEndpoint , fuseSocketDir string , maximumNumberOfCollectors int , clientset clientset.Interface ) Manager {
61+ func NewMetricsManager (metricsEndpoint , fuseSocketDir string , clientset clientset.Interface ) Manager {
6962 mm := & manager {
70- registry : prometheus .NewRegistry (),
71- metricsEndpoint : metricsEndpoint ,
72- fuseSocketDir : fuseSocketDir ,
73- clientset : clientset ,
74- volumePublishPathRegistered : sets.Set [string ]{},
75- maximumNumberOfCollectors : maximumNumberOfCollectors ,
76- mutex : sync.Mutex {},
63+ registry : prometheus .NewRegistry (),
64+ metricsEndpoint : metricsEndpoint ,
65+ fuseSocketDir : fuseSocketDir ,
66+ clientset : clientset ,
7767 }
7868
7969 return mm
@@ -125,43 +115,8 @@ func (mm *manager) RegisterMetricsCollector(targetPath, podNamespace, podName, b
125115 "bucket_name" : bucketName ,
126116 "pod_uid" : podUID ,
127117 }, mm .clientset )
128-
129- // Lock the number of registered collectors while we attempt to register a new collector.
130- mm .mutex .Lock ()
131- defer mm .mutex .Unlock ()
132-
133- if mm .maximumNumberOfCollectors == 0 {
134- klog .Infof ("could not register metrics collector: podUID: %s, volume: %s. metrics collector limit is set to zero." , podUID , bucketName )
135-
136- return
137- }
138-
139- // Check if we need to register collector. We register a collector when the following are met:
140- // 1. There is space on the metrics pipeline for the collector to be registered.
141- // 2. The metrics collector has not previously been registered.
142- if mm .maximumNumberOfCollectors > 0 {
143- // If volume is already registered, do not register again. This flow can get triggered
144- // since CSI driver has republishVolume capability.
145- if mm .volumePublishPathRegistered .Has (targetPath ) {
146- return
147- }
148- // If collector hasn't been registered and there's no space left, log a warning.
149- if mm .volumePublishPathRegistered .Len () >= mm .maximumNumberOfCollectors {
150- klog .V (6 ).Infof ("could not register a metrics collector: podUID: %s, volume: %s. there's already %d collectors registered." , podUID , bucketName , mm .volumePublishPathRegistered .Len ())
151-
152- return
153- }
154- }
155-
156- // Attempt to register new metrics collector and record success.
157- err = mm .registry .Register (c )
158- if err != nil {
159- if ! strings .Contains (err .Error (), prometheus.AlreadyRegisteredError {}.Error ()) {
160- klog .Errorf ("failed to register metrics collector for pod %v/%v, volume %q, bucket %q: %v" , podNamespace , podName , volumeName , bucketName , err )
161- }
162- } else {
163- mm .volumePublishPathRegistered .Insert (targetPath )
164- klog .Infof ("successfully registered a new metrics collector: podUID: %s, volume: %s. there's %d collectors registered." , podUID , bucketName , mm .volumePublishPathRegistered .Len ())
118+ if err := mm .registry .Register (c ); err != nil && ! strings .Contains (err .Error (), prometheus.AlreadyRegisteredError {}.Error ()) {
119+ klog .Errorf ("failed to register metrics collector for pod %v/%v, volume %q, bucket %q: %v" , podNamespace , podName , volumeName , bucketName , err )
165120 }
166121}
167122
@@ -171,16 +126,8 @@ func (mm *manager) UnregisterMetricsCollector(targetPath string) {
171126
172127 // metricsCollector uses a hash of pod UID and volume name as an identifier.
173128 c := NewMetricsCollector ("" , "" , "" , "" , podUID , volumeName , nil , nil )
174-
175- // Lock the number of registered collectors while we attempt to unregister a collector.
176- mm .mutex .Lock ()
177- defer mm .mutex .Unlock ()
178-
179129 if ok := mm .registry .Unregister (c ); ! ok {
180130 klog .Infof ("Unregister metrics collector for targetPath %q is not needed since the collector is not registered" , targetPath )
181- } else {
182- mm .volumePublishPathRegistered .Delete (targetPath )
183- klog .Infof ("successfully unregistered a metrics collector: podUID: %s, volume: %s. there's %d collectors registered." , podUID , volumeName , mm .volumePublishPathRegistered .Len ())
184131 }
185132}
186133
0 commit comments