Skip to content
This repository was archived by the owner on Dec 9, 2024. It is now read-only.

Commit e9d1016

Browse files
committed
add stale-read test
Signed-off-by: yisaer <[email protected]>
1 parent 95ffeda commit e9d1016

File tree

6 files changed

+130
-3
lines changed

6 files changed

+130
-3
lines changed

testcase/stale-read/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ FROM alpine:3.9
22

33
RUN apk update && apk add --no-cache wget bash sed
44
COPY ./bin/stale-read /bin/stale-read
5-
ENTRYPOINT [ "/bin/cross-region" ]
5+
ENTRYPOINT [ "/bin/stale-read" ]

testcase/stale-read/bench.go

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,58 @@ func (c *SysbenchCase) InsertData(worker *sysbench.Worker, db *sql.DB) error {
5353
}
5454

5555
func (c *SysbenchCase) Execute(worker *sysbench.Worker, db *sql.DB) error {
56+
for i := 0; i < 100; i++ {
57+
err := c.executeSET(db)
58+
if err != nil {
59+
return err
60+
}
61+
err = c.executeSTART(db)
62+
if err != nil {
63+
return err
64+
}
65+
err = c.executeSelect(db)
66+
if err != nil {
67+
return err
68+
}
69+
}
70+
return nil
71+
}
72+
73+
func (c *SysbenchCase) executeSET(db *sql.DB) error {
74+
num := c.insertCount * c.rowsEachInsert
75+
_, err := db.Exec("SET TRANSACTION READ ONLY AS OF TIMESTAMP tidb_bounded_staleness(DATE_SUB(NOW(), INTERVAL 10 SECOND)")
76+
if err != nil {
77+
return err
78+
}
79+
rows, err := db.Query("select id, k, c, pad from sbtest0 where k in (?, ?, ?)", rand.Intn(num), rand.Intn(num), rand.Intn(num))
80+
defer rows.Close()
81+
if err != nil {
82+
return errors.WithStack(err)
83+
}
84+
return nil
85+
}
86+
87+
func (c *SysbenchCase) executeSTART(db *sql.DB) error {
88+
num := c.insertCount * c.rowsEachInsert
89+
_, err := db.Exec("START TRANSACTION READ ONLY AS OF TIMESTAMP tidb_bounded_staleness(DATE_SUB(NOW(), INTERVAL 10 SECOND)")
90+
if err != nil {
91+
return err
92+
}
93+
rows, err := db.Query("select id, k, c, pad from sbtest0 where k in (?, ?, ?)", rand.Intn(num), rand.Intn(num), rand.Intn(num))
94+
defer rows.Close()
95+
if err != nil {
96+
return errors.WithStack(err)
97+
}
98+
_, err = db.Exec("COMMIT")
99+
if err != nil {
100+
return err
101+
}
102+
return nil
103+
}
104+
105+
func (c *SysbenchCase) executeSelect(db *sql.DB) error {
56106
num := c.insertCount * c.rowsEachInsert
57-
rows, err := db.Query("select id, k, c, pad from sbtest2 where k in (?, ?, ?)", rand.Intn(num), rand.Intn(num), rand.Intn(num))
107+
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))
58108
defer rows.Close()
59109
if err != nil {
60110
return errors.WithStack(err)

testcase/stale-read/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module github.com/pingcap/tipocket/testcase/stale-read
33
go 1.16
44

55
require (
6+
github.com/prometheus/client_golang v1.3.1-0.20200127144639-990321423786
67
github.com/go-sql-driver/mysql v1.5.0
78
github.com/pingcap/errors v0.11.5-0.20201126102027-b0a155152ca3
89
github.com/pingcap/log v0.0.0-20201112100606-8f1e84a3abc8 // indirect

testcase/stale-read/go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -937,6 +937,7 @@ github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4
937937
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
938938
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
939939
github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U=
940+
github.com/prometheus/client_golang v1.3.1-0.20200127144639-990321423786/go.mod h1:cIZceDV9orWe5SBFow7Vjdqt/eJlN5AZVC1Q2Uz/M7g=
940941
github.com/prometheus/client_golang v1.5.0 h1:Ctq0iGpCmr3jeP77kbF2UxgvRwzWWz+4Bh9/vJTyg1A=
941942
github.com/prometheus/client_golang v1.5.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
942943
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
949950
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
950951
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
951952
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
953+
github.com/prometheus/common v0.9.0/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
952954
github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U=
953955
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
954956
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
13431345
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
13441346
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
13451347
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1348+
golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
13461349
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
13471350
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
13481351
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

testcase/stale-read/revive.toml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
ignoreGeneratedHeader = false
2+
severity = "error"
3+
confidence = 0.8
4+
errorCode = -1
5+
warningCode = -1
6+
7+
[rule.blank-imports]
8+
[rule.context-as-argument]
9+
[rule.dot-imports]
10+
[rule.error-return]
11+
[rule.error-strings]
12+
[rule.error-naming]
13+
[rule.exported]
14+
#[rule.if-return]
15+
[rule.var-naming]
16+
[rule.package-comments]
17+
[rule.range]
18+
[rule.receiver-naming]
19+
[rule.indent-error-flow]
20+
#[rule.superfluous-else]
21+
[rule.modifies-parameter]
22+
23+
# This can be checked by other tools like megacheck
24+
[rule.unreachable-code]
25+
26+
27+
# Currently this makes too much noise, but should add it in
28+
# and perhaps ignore it in a few files
29+
#[rule.confusing-naming]
30+
# severity = "warning"
31+
#[rule.confusing-results]
32+
# severity = "warning"
33+
#[rule.unused-parameter]
34+
# severity = "warning"
35+
#[rule.deep-exit]
36+
# severity = "warning"
37+
#[rule.flag-parameter]
38+
# severity = "warning"
39+
40+
41+
42+
# Adding these will slow down the linter
43+
# They are already provided by megacheck
44+
# [rule.unexported-return]
45+
# [rule.time-naming]
46+
# [rule.errorf]
47+
48+
# Adding these will slow down the linter
49+
# Not sure if they are already provided by megacheck
50+
# [rule.var-declaration]
51+
# [rule.context-keys-type]

testcase/stale-read/stale-read.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ package staleread
33
import (
44
"context"
55
"fmt"
6+
"github.com/pingcap/log"
7+
"github.com/prometheus/client_golang/api"
8+
v1 "github.com/prometheus/client_golang/api/prometheus/v1"
9+
"go.uber.org/zap"
610
"time"
711

812
"github.com/pingcap/tipocket/pkg/cluster"
@@ -22,6 +26,7 @@ func (l ClientCreator) Create(node cluster.ClientNode) core.Client {
2226

2327
type staleReadClient struct {
2428
sysBenchConf *sysbench.Config
29+
promCli api.Client
2530
initialized bool
2631
}
2732

@@ -44,18 +49,31 @@ func (c *staleReadClient) SetUp(ctx context.Context, _ []cluster.Node, cnodes []
4449
},
4550
Run: sysbench.RunConfig{
4651
WorkerCount: 4,
47-
Duration: 30 * time.Second,
52+
Duration: 5 * time.Minute,
4853
Task: sysCase,
4954
},
5055
Cleanup: sysCase,
5156
}
57+
58+
cfg := api.Config{Address: fmt.Sprintf("http://%s", buildPrometheusSvcName(name, namespace))}
59+
promCli, err := api.NewClient(cfg)
60+
if err != nil {
61+
return err
62+
}
63+
c.promCli = promCli
5264
c.initialized = true
5365
return nil
5466
}
5567

5668
// SetUp...
5769
func (c *staleReadClient) Start(ctx context.Context, cfg interface{}, cnodes []cluster.ClientNode) error {
5870
sysbench.RunTest(c.sysBenchConf)
71+
v1api := v1.NewAPI(c.promCli)
72+
v, _, err := v1api.QueryRange(ctx, "", v1.Range{Start: time.Now().Add(-5 * time.Minute), End: time.Now(), Step: 15 * time.Second})
73+
if err != nil {
74+
return err
75+
}
76+
log.Info("metrics", zap.String("metrics", v.String()))
5977
return nil
6078
}
6179

@@ -67,3 +85,7 @@ func (c *staleReadClient) TearDown(ctx context.Context, _ []cluster.ClientNode,
6785
func buildTiDBSvcName(name, namespace string) string {
6886
return fmt.Sprintf("%s-tidb.%s.svc:4000", name, namespace)
6987
}
88+
89+
func buildPrometheusSvcName(name, namespace string) string {
90+
return fmt.Sprintf("%s-prometheus.%s.svc:9090", name, namespace)
91+
}

0 commit comments

Comments
 (0)