diff --git a/weed/server/master_grpc_server.go b/weed/server/master_grpc_server.go index 7caaf01b2..93569ce0d 100644 --- a/weed/server/master_grpc_server.go +++ b/weed/server/master_grpc_server.go @@ -307,6 +307,8 @@ func (ms *MasterServer) KeepConnected(stream master_pb.Seaweed_KeepConnectedServ case <-ticker.C: if !ms.Topo.IsLeader() { stats.MasterRaftIsleader.Set(0) + stats.MasterAdminLock.Reset() + stats.MasterReplicaPlacementMismatch.Reset() return ms.informNewLeader(stream) } else { stats.MasterRaftIsleader.Set(1) diff --git a/weed/server/master_grpc_server_admin.go b/weed/server/master_grpc_server_admin.go index fb2c5bd50..77d11df8a 100644 --- a/weed/server/master_grpc_server_admin.go +++ b/weed/server/master_grpc_server_admin.go @@ -3,6 +3,7 @@ package weed_server import ( "context" "fmt" + "github.com/seaweedfs/seaweedfs/weed/stats" "math/rand" "sync" "time" @@ -112,11 +113,13 @@ func (locks *AdminLocks) generateToken(lockName string, clientName string) (ts t lastClient: clientName, } locks.locks[lockName] = lock + stats.MasterAdminLock.WithLabelValues(clientName).Set(1) return lock.accessLockTime, lock.accessSecret } func (locks *AdminLocks) deleteLock(lockName string) { locks.Lock() + stats.MasterAdminLock.WithLabelValues(locks.locks[lockName].lastClient).Set(0) defer locks.Unlock() delete(locks.locks, lockName) } diff --git a/weed/stats/metrics.go b/weed/stats/metrics.go index 9947e2316..d1723fdc6 100644 --- a/weed/stats/metrics.go +++ b/weed/stats/metrics.go @@ -47,6 +47,14 @@ var ( Help: "is leader", }) + MasterAdminLock = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Namespace: Namespace, + Subsystem: "master", + Name: "admin_lock", + Help: "admin lock", + }, []string{"client"}) + MasterReceivedHeartbeatCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ Namespace: Namespace, @@ -199,6 +207,7 @@ var ( func init() { Gather.MustRegister(MasterClientConnectCounter) Gather.MustRegister(MasterRaftIsleader) + Gather.MustRegister(MasterAdminLock) Gather.MustRegister(MasterReceivedHeartbeatCounter) Gather.MustRegister(MasterLeaderChangeCounter) Gather.MustRegister(MasterReplicaPlacementMismatch)