From bf11ac0302143b730e50c070f2beb40e13ad9f2b Mon Sep 17 00:00:00 2001 From: crowu Date: Sat, 13 Feb 2021 13:12:27 -0800 Subject: [PATCH 1/3] Report lag stats in poller Signed-off-by: crowu --- .../vttablet/tabletserver/repltracker/poller.go | 17 ++++++++++++++++- .../tabletserver/repltracker/poller_test.go | 6 +++++- .../tabletserver/repltracker/repltracker.go | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/go/vt/vttablet/tabletserver/repltracker/poller.go b/go/vt/vttablet/tabletserver/repltracker/poller.go index dd77cc22188..db23a415afc 100644 --- a/go/vt/vttablet/tabletserver/repltracker/poller.go +++ b/go/vt/vttablet/tabletserver/repltracker/poller.go @@ -20,21 +20,35 @@ import ( "sync" "time" + querypb "vitess.io/vitess/go/vt/proto/query" + + "vitess.io/vitess/go/stats" + "vitess.io/vitess/go/vt/mysqlctl" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/vterrors" ) +var replicationLagGauges = stats.NewGaugesWithMultiLabels( + "replicationLag", + "replication lag", + []string{"Keyspace", "Shard"}) + type poller struct { mysqld mysqlctl.MysqlDaemon mu sync.Mutex lag time.Duration timeRecorded time.Time + + keyspace string + shard string } -func (p *poller) InitDBConfig(mysqld mysqlctl.MysqlDaemon) { +func (p *poller) InitDBConfig(mysqld mysqlctl.MysqlDaemon, target querypb.Target) { p.mysqld = mysqld + p.keyspace = target.Keyspace + p.shard = target.Shard } func (p *poller) Status() (time.Duration, error) { @@ -55,5 +69,6 @@ func (p *poller) Status() (time.Duration, error) { p.lag = time.Duration(status.SecondsBehindMaster) * time.Second p.timeRecorded = time.Now() + replicationLagGauges.Set([]string{p.keyspace, p.shard}, p.lag.Milliseconds()) return p.lag, nil } diff --git a/go/vt/vttablet/tabletserver/repltracker/poller_test.go b/go/vt/vttablet/tabletserver/repltracker/poller_test.go index 18d27787ee8..5b2b2877592 100644 --- a/go/vt/vttablet/tabletserver/repltracker/poller_test.go +++ b/go/vt/vttablet/tabletserver/repltracker/poller_test.go @@ -21,15 +21,19 @@ import ( "testing" "time" + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + "github.com/stretchr/testify/assert" "vitess.io/vitess/go/vt/mysqlctl/fakemysqldaemon" ) func TestPoller(t *testing.T) { + target := querypb.Target{Keyspace: "k", Shard: "s", TabletType: topodatapb.TabletType_REPLICA} poller := &poller{} mysqld := fakemysqldaemon.NewFakeMysqlDaemon(nil) - poller.InitDBConfig(mysqld) + poller.InitDBConfig(mysqld, target) mysqld.ReplicationStatusError = errors.New("err") _, err := poller.Status() diff --git a/go/vt/vttablet/tabletserver/repltracker/repltracker.go b/go/vt/vttablet/tabletserver/repltracker/repltracker.go index 5dca2c59356..4d9b7a727aa 100644 --- a/go/vt/vttablet/tabletserver/repltracker/repltracker.go +++ b/go/vt/vttablet/tabletserver/repltracker/repltracker.go @@ -76,7 +76,7 @@ func NewReplTracker(env tabletenv.Env, alias topodatapb.TabletAlias) *ReplTracke func (rt *ReplTracker) InitDBConfig(target querypb.Target, mysqld mysqlctl.MysqlDaemon) { rt.hw.InitDBConfig(target) rt.hr.InitDBConfig(target) - rt.poller.InitDBConfig(mysqld) + rt.poller.InitDBConfig(mysqld, target) } // MakeMaster must be called if the tablet type becomes MASTER. From d1b2dc8016c51988b564479cb97ed025861187a1 Mon Sep 17 00:00:00 2001 From: crowu Date: Tue, 16 Feb 2021 08:52:28 -0800 Subject: [PATCH 2/3] use simple gauge and rm tags Signed-off-by: crowu --- .../vttablet/tabletserver/repltracker/poller.go | 16 +++------------- .../tabletserver/repltracker/poller_test.go | 6 +----- .../tabletserver/repltracker/repltracker.go | 2 +- 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/go/vt/vttablet/tabletserver/repltracker/poller.go b/go/vt/vttablet/tabletserver/repltracker/poller.go index db23a415afc..756c06c7535 100644 --- a/go/vt/vttablet/tabletserver/repltracker/poller.go +++ b/go/vt/vttablet/tabletserver/repltracker/poller.go @@ -20,8 +20,6 @@ import ( "sync" "time" - querypb "vitess.io/vitess/go/vt/proto/query" - "vitess.io/vitess/go/stats" "vitess.io/vitess/go/vt/mysqlctl" @@ -29,10 +27,7 @@ import ( "vitess.io/vitess/go/vt/vterrors" ) -var replicationLagGauges = stats.NewGaugesWithMultiLabels( - "replicationLag", - "replication lag", - []string{"Keyspace", "Shard"}) +var replicationLagGauges = stats.NewGauge("replicationLagSec", "replication lag in seconds") type poller struct { mysqld mysqlctl.MysqlDaemon @@ -40,15 +35,10 @@ type poller struct { mu sync.Mutex lag time.Duration timeRecorded time.Time - - keyspace string - shard string } -func (p *poller) InitDBConfig(mysqld mysqlctl.MysqlDaemon, target querypb.Target) { +func (p *poller) InitDBConfig(mysqld mysqlctl.MysqlDaemon) { p.mysqld = mysqld - p.keyspace = target.Keyspace - p.shard = target.Shard } func (p *poller) Status() (time.Duration, error) { @@ -69,6 +59,6 @@ func (p *poller) Status() (time.Duration, error) { p.lag = time.Duration(status.SecondsBehindMaster) * time.Second p.timeRecorded = time.Now() - replicationLagGauges.Set([]string{p.keyspace, p.shard}, p.lag.Milliseconds()) + replicationLagGauges.Set(int64(p.lag.Seconds())) return p.lag, nil } diff --git a/go/vt/vttablet/tabletserver/repltracker/poller_test.go b/go/vt/vttablet/tabletserver/repltracker/poller_test.go index 5b2b2877592..18d27787ee8 100644 --- a/go/vt/vttablet/tabletserver/repltracker/poller_test.go +++ b/go/vt/vttablet/tabletserver/repltracker/poller_test.go @@ -21,19 +21,15 @@ import ( "testing" "time" - querypb "vitess.io/vitess/go/vt/proto/query" - topodatapb "vitess.io/vitess/go/vt/proto/topodata" - "github.com/stretchr/testify/assert" "vitess.io/vitess/go/vt/mysqlctl/fakemysqldaemon" ) func TestPoller(t *testing.T) { - target := querypb.Target{Keyspace: "k", Shard: "s", TabletType: topodatapb.TabletType_REPLICA} poller := &poller{} mysqld := fakemysqldaemon.NewFakeMysqlDaemon(nil) - poller.InitDBConfig(mysqld, target) + poller.InitDBConfig(mysqld) mysqld.ReplicationStatusError = errors.New("err") _, err := poller.Status() diff --git a/go/vt/vttablet/tabletserver/repltracker/repltracker.go b/go/vt/vttablet/tabletserver/repltracker/repltracker.go index 4d9b7a727aa..5dca2c59356 100644 --- a/go/vt/vttablet/tabletserver/repltracker/repltracker.go +++ b/go/vt/vttablet/tabletserver/repltracker/repltracker.go @@ -76,7 +76,7 @@ func NewReplTracker(env tabletenv.Env, alias topodatapb.TabletAlias) *ReplTracke func (rt *ReplTracker) InitDBConfig(target querypb.Target, mysqld mysqlctl.MysqlDaemon) { rt.hw.InitDBConfig(target) rt.hr.InitDBConfig(target) - rt.poller.InitDBConfig(mysqld, target) + rt.poller.InitDBConfig(mysqld) } // MakeMaster must be called if the tablet type becomes MASTER. From dc0d5cf70cb26dfdb0ee84f04dff6595b9b59ea3 Mon Sep 17 00:00:00 2001 From: crowu Date: Tue, 16 Feb 2021 14:22:35 -0800 Subject: [PATCH 3/3] rename Signed-off-by: crowu --- go/vt/vttablet/tabletserver/repltracker/poller.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/vt/vttablet/tabletserver/repltracker/poller.go b/go/vt/vttablet/tabletserver/repltracker/poller.go index 756c06c7535..da85da78008 100644 --- a/go/vt/vttablet/tabletserver/repltracker/poller.go +++ b/go/vt/vttablet/tabletserver/repltracker/poller.go @@ -27,7 +27,7 @@ import ( "vitess.io/vitess/go/vt/vterrors" ) -var replicationLagGauges = stats.NewGauge("replicationLagSec", "replication lag in seconds") +var replicationLagSeconds = stats.NewGauge("replicationLagSec", "replication lag in seconds") type poller struct { mysqld mysqlctl.MysqlDaemon @@ -59,6 +59,6 @@ func (p *poller) Status() (time.Duration, error) { p.lag = time.Duration(status.SecondsBehindMaster) * time.Second p.timeRecorded = time.Now() - replicationLagGauges.Set(int64(p.lag.Seconds())) + replicationLagSeconds.Set(int64(p.lag.Seconds())) return p.lag, nil }