diff options
| author | chrislu <chris.lu@gmail.com> | 2025-06-28 20:06:48 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2025-06-28 20:06:48 -0700 |
| commit | 3d519fa2a65ba26b353fb4f74fd9bca4b6f03cbc (patch) | |
| tree | 6c99489b881e0b940e0fc2716d356fda8591cb1b | |
| parent | 1733d0ce68b4ef31edcb54ddbbf6070caa319f37 (diff) | |
| download | seaweedfs-3d519fa2a65ba26b353fb4f74fd9bca4b6f03cbc.tar.xz seaweedfs-3d519fa2a65ba26b353fb4f74fd9bca4b6f03cbc.zip | |
only leader master should send telemetry
| -rw-r--r-- | weed/telemetry/collector.go | 30 |
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") + } } }() } |
