aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2025-06-28 20:06:48 -0700
committerchrislu <chris.lu@gmail.com>2025-06-28 20:06:48 -0700
commit3d519fa2a65ba26b353fb4f74fd9bca4b6f03cbc (patch)
tree6c99489b881e0b940e0fc2716d356fda8591cb1b
parent1733d0ce68b4ef31edcb54ddbbf6070caa319f37 (diff)
downloadseaweedfs-3d519fa2a65ba26b353fb4f74fd9bca4b6f03cbc.tar.xz
seaweedfs-3d519fa2a65ba26b353fb4f74fd9bca4b6f03cbc.zip
only leader master should send telemetry
-rw-r--r--weed/telemetry/collector.go30
1 files changed, 28 insertions, 2 deletions
diff --git a/weed/telemetry/collector.go b/weed/telemetry/collector.go
index 19d4452ef..904cdfd21 100644
--- a/weed/telemetry/collector.go
+++ b/weed/telemetry/collector.go
@@ -9,6 +9,8 @@ import (
"github.com/seaweedfs/seaweedfs/weed/topology"
)
+// Collector gathers telemetry data from a SeaweedFS cluster
+// Only the leader master will send telemetry to avoid duplicates
type Collector struct {
client *Client
topo *topology.Topology
@@ -45,12 +47,27 @@ func (c *Collector) SetMasterServer(masterServer interface{}) {
c.masterServer = masterServer
}
+// isLeader checks if this master is the leader
+func (c *Collector) isLeader() bool {
+ if c.topo == nil {
+ return false
+ }
+ return c.topo.IsLeader()
+}
+
// CollectAndSendAsync collects telemetry data and sends it asynchronously
+// Only sends telemetry if this master is the leader
func (c *Collector) CollectAndSendAsync() {
if !c.client.IsEnabled() {
return
}
+ // Only leader master should send telemetry to avoid duplicates
+ if !c.isLeader() {
+ glog.V(2).Infof("Skipping telemetry collection - not the leader master")
+ return
+ }
+
go func() {
data := c.collectData()
c.client.SendTelemetryAsync(data)
@@ -69,7 +86,11 @@ func (c *Collector) StartPeriodicCollection(interval time.Duration) {
// Send initial telemetry after a short delay
go func() {
time.Sleep(61 * time.Second) // Wait for cluster to stabilize
- c.CollectAndSendAsync()
+ if c.isLeader() {
+ c.CollectAndSendAsync()
+ } else {
+ glog.V(2).Infof("Skipping initial telemetry collection - not the leader master")
+ }
}()
// Start periodic collection
@@ -77,7 +98,12 @@ func (c *Collector) StartPeriodicCollection(interval time.Duration) {
go func() {
defer ticker.Stop()
for range ticker.C {
- c.CollectAndSendAsync()
+ // Check leadership before each collection
+ if c.isLeader() {
+ c.CollectAndSendAsync()
+ } else {
+ glog.V(2).Infof("Skipping periodic telemetry collection - not the leader master")
+ }
}
}()
}