diff options
| author | zouyixiong <zouyixiong@gmail.com> | 2024-12-13 21:30:21 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-13 05:30:21 -0800 |
| commit | d6f3e1970d91da384d842f0811288391dcd78bb7 (patch) | |
| tree | 3a9396b93b33f0be7396a40d439d9e4b617390a7 /weed/stats/metrics.go | |
| parent | 0a4b1909a250eed817f01209f20e06b72ffbb2cf (diff) | |
| download | seaweedfs-d6f3e1970d91da384d842f0811288391dcd78bb7.tar.xz seaweedfs-d6f3e1970d91da384d842f0811288391dcd78bb7.zip | |
fix: filer may crash by bucketLastActiveTsNs concurrency access. (#6350)
Diffstat (limited to 'weed/stats/metrics.go')
| -rw-r--r-- | weed/stats/metrics.go | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/weed/stats/metrics.go b/weed/stats/metrics.go index b9a596a6a..5e3ed4370 100644 --- a/weed/stats/metrics.go +++ b/weed/stats/metrics.go @@ -7,6 +7,7 @@ import ( "os" "strconv" "strings" + "sync" "time" "github.com/prometheus/client_golang/prometheus" @@ -27,7 +28,9 @@ const ( ) var readOnlyVolumeTypes = [4]string{IsReadOnly, NoWriteOrDelete, NoWriteCanDelete, IsDiskSpaceLow} + var bucketLastActiveTsNs map[string]int64 = map[string]int64{} +var bucketLastActiveLock sync.Mutex var ( Gather = prometheus.NewRegistry() @@ -409,7 +412,9 @@ func SourceName(port uint32) string { } func RecordBucketActiveTime(bucket string) { + bucketLastActiveLock.Lock() bucketLastActiveTsNs[bucket] = time.Now().UnixNano() + bucketLastActiveLock.Unlock() } func DeleteCollectionMetrics(collection string) { @@ -429,6 +434,7 @@ func bucketMetricTTLControl() { for { now := time.Now().UnixNano() + bucketLastActiveLock.Lock() for bucket, ts := range bucketLastActiveTsNs { if (now - ts) > ttlNs { delete(bucketLastActiveTsNs, bucket) @@ -441,6 +447,7 @@ func bucketMetricTTLControl() { } } + bucketLastActiveLock.Unlock() time.Sleep(bucketAtiveTTL) } |
