From e9d10163823acfa30aee44a397dece1d5a92b2ad Mon Sep 17 00:00:00 2001 From: yisaer Date: Thu, 3 Jun 2021 21:05:09 +0800 Subject: [PATCH] add stale-read test Signed-off-by: yisaer --- testcase/stale-read/Dockerfile | 2 +- testcase/stale-read/bench.go | 52 ++++++++++++++++++++++++++++++- testcase/stale-read/go.mod | 1 + testcase/stale-read/go.sum | 3 ++ testcase/stale-read/revive.toml | 51 ++++++++++++++++++++++++++++++ testcase/stale-read/stale-read.go | 24 +++++++++++++- 6 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 testcase/stale-read/revive.toml diff --git a/testcase/stale-read/Dockerfile b/testcase/stale-read/Dockerfile index feacbee87..ea35d0003 100644 --- a/testcase/stale-read/Dockerfile +++ b/testcase/stale-read/Dockerfile @@ -2,4 +2,4 @@ FROM alpine:3.9 RUN apk update && apk add --no-cache wget bash sed COPY ./bin/stale-read /bin/stale-read -ENTRYPOINT [ "/bin/cross-region" ] +ENTRYPOINT [ "/bin/stale-read" ] diff --git a/testcase/stale-read/bench.go b/testcase/stale-read/bench.go index 2163979db..4f0c5284d 100644 --- a/testcase/stale-read/bench.go +++ b/testcase/stale-read/bench.go @@ -53,8 +53,58 @@ func (c *SysbenchCase) InsertData(worker *sysbench.Worker, db *sql.DB) error { } func (c *SysbenchCase) Execute(worker *sysbench.Worker, db *sql.DB) error { + for i := 0; i < 100; i++ { + err := c.executeSET(db) + if err != nil { + return err + } + err = c.executeSTART(db) + if err != nil { + return err + } + err = c.executeSelect(db) + if err != nil { + return err + } + } + return nil +} + +func (c *SysbenchCase) executeSET(db *sql.DB) error { + num := c.insertCount * c.rowsEachInsert + _, err := db.Exec("SET TRANSACTION READ ONLY AS OF TIMESTAMP tidb_bounded_staleness(DATE_SUB(NOW(), INTERVAL 10 SECOND)") + if err != nil { + return err + } + rows, err := db.Query("select id, k, c, pad from sbtest0 where k in (?, ?, ?)", rand.Intn(num), rand.Intn(num), rand.Intn(num)) + defer rows.Close() + if err != nil { + return errors.WithStack(err) + } + return nil +} + +func (c *SysbenchCase) executeSTART(db *sql.DB) error { + num := c.insertCount * c.rowsEachInsert + _, err := db.Exec("START TRANSACTION READ ONLY AS OF TIMESTAMP tidb_bounded_staleness(DATE_SUB(NOW(), INTERVAL 10 SECOND)") + if err != nil { + return err + } + rows, err := db.Query("select id, k, c, pad from sbtest0 where k in (?, ?, ?)", rand.Intn(num), rand.Intn(num), rand.Intn(num)) + defer rows.Close() + if err != nil { + return errors.WithStack(err) + } + _, err = db.Exec("COMMIT") + if err != nil { + return err + } + return nil +} + +func (c *SysbenchCase) executeSelect(db *sql.DB) error { num := c.insertCount * c.rowsEachInsert - rows, err := db.Query("select id, k, c, pad from sbtest2 where k in (?, ?, ?)", rand.Intn(num), rand.Intn(num), rand.Intn(num)) + rows, err := db.Query("select id, k, c, pad from sbtest0 as of timestamp tidb_bounded_staleness(DATE_SUB(NOW(), INTERVAL 10 SECOND) where k in (?, ?, ?)", rand.Intn(num), rand.Intn(num), rand.Intn(num)) defer rows.Close() if err != nil { return errors.WithStack(err) diff --git a/testcase/stale-read/go.mod b/testcase/stale-read/go.mod index 9de6ec122..55251efd4 100644 --- a/testcase/stale-read/go.mod +++ b/testcase/stale-read/go.mod @@ -3,6 +3,7 @@ module github.com/pingcap/tipocket/testcase/stale-read go 1.16 require ( + github.com/prometheus/client_golang v1.3.1-0.20200127144639-990321423786 github.com/go-sql-driver/mysql v1.5.0 github.com/pingcap/errors v0.11.5-0.20201126102027-b0a155152ca3 github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8 // indirect diff --git a/testcase/stale-read/go.sum b/testcase/stale-read/go.sum index 168b085c8..4b36ce3db 100644 --- a/testcase/stale-read/go.sum +++ b/testcase/stale-read/go.sum @@ -937,6 +937,7 @@ github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4 github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= +github.com/prometheus/client_golang v1.3.1-0.20200127144639-990321423786/go.mod h1:cIZceDV9orWe5SBFow7Vjdqt/eJlN5AZVC1Q2Uz/M7g= github.com/prometheus/client_golang v1.5.0 h1:Ctq0iGpCmr3jeP77kbF2UxgvRwzWWz+4Bh9/vJTyg1A= github.com/prometheus/client_golang v1.5.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -949,6 +950,7 @@ github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7q github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.9.0/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1343,6 +1345,7 @@ golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/testcase/stale-read/revive.toml b/testcase/stale-read/revive.toml new file mode 100644 index 000000000..0b2d654f0 --- /dev/null +++ b/testcase/stale-read/revive.toml @@ -0,0 +1,51 @@ +ignoreGeneratedHeader = false +severity = "error" +confidence = 0.8 +errorCode = -1 +warningCode = -1 + +[rule.blank-imports] +[rule.context-as-argument] +[rule.dot-imports] +[rule.error-return] +[rule.error-strings] +[rule.error-naming] +[rule.exported] +#[rule.if-return] +[rule.var-naming] +[rule.package-comments] +[rule.range] +[rule.receiver-naming] +[rule.indent-error-flow] +#[rule.superfluous-else] +[rule.modifies-parameter] + +# This can be checked by other tools like megacheck +[rule.unreachable-code] + + +# Currently this makes too much noise, but should add it in +# and perhaps ignore it in a few files +#[rule.confusing-naming] +# severity = "warning" +#[rule.confusing-results] +# severity = "warning" +#[rule.unused-parameter] +# severity = "warning" +#[rule.deep-exit] +# severity = "warning" +#[rule.flag-parameter] +# severity = "warning" + + + +# Adding these will slow down the linter +# They are already provided by megacheck +# [rule.unexported-return] +# [rule.time-naming] +# [rule.errorf] + +# Adding these will slow down the linter +# Not sure if they are already provided by megacheck +# [rule.var-declaration] +# [rule.context-keys-type] diff --git a/testcase/stale-read/stale-read.go b/testcase/stale-read/stale-read.go index 6d672416f..0c6f72dd7 100644 --- a/testcase/stale-read/stale-read.go +++ b/testcase/stale-read/stale-read.go @@ -3,6 +3,10 @@ package staleread import ( "context" "fmt" + "github.com/pingcap/log" + "github.com/prometheus/client_golang/api" + v1 "github.com/prometheus/client_golang/api/prometheus/v1" + "go.uber.org/zap" "time" "github.com/pingcap/tipocket/pkg/cluster" @@ -22,6 +26,7 @@ func (l ClientCreator) Create(node cluster.ClientNode) core.Client { type staleReadClient struct { sysBenchConf *sysbench.Config + promCli api.Client initialized bool } @@ -44,11 +49,18 @@ func (c *staleReadClient) SetUp(ctx context.Context, _ []cluster.Node, cnodes [] }, Run: sysbench.RunConfig{ WorkerCount: 4, - Duration: 30 * time.Second, + Duration: 5 * time.Minute, Task: sysCase, }, Cleanup: sysCase, } + + cfg := api.Config{Address: fmt.Sprintf("http://%s", buildPrometheusSvcName(name, namespace))} + promCli, err := api.NewClient(cfg) + if err != nil { + return err + } + c.promCli = promCli c.initialized = true return nil } @@ -56,6 +68,12 @@ func (c *staleReadClient) SetUp(ctx context.Context, _ []cluster.Node, cnodes [] // SetUp... func (c *staleReadClient) Start(ctx context.Context, cfg interface{}, cnodes []cluster.ClientNode) error { sysbench.RunTest(c.sysBenchConf) + v1api := v1.NewAPI(c.promCli) + v, _, err := v1api.QueryRange(ctx, "", v1.Range{Start: time.Now().Add(-5 * time.Minute), End: time.Now(), Step: 15 * time.Second}) + if err != nil { + return err + } + log.Info("metrics", zap.String("metrics", v.String())) return nil } @@ -67,3 +85,7 @@ func (c *staleReadClient) TearDown(ctx context.Context, _ []cluster.ClientNode, func buildTiDBSvcName(name, namespace string) string { return fmt.Sprintf("%s-tidb.%s.svc:4000", name, namespace) } + +func buildPrometheusSvcName(name, namespace string) string { + return fmt.Sprintf("%s-prometheus.%s.svc:9090", name, namespace) +}