Skip to content

Commit bc8d4bc

Browse files
committed
Add the 'verbose' parameter to transfers test.
1 parent 704539f commit bc8d4bc

File tree

1 file changed

+29
-10
lines changed

1 file changed

+29
-10
lines changed

contrib/pg_dtm/tests/transfers.go

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ func (c *ConnStrings) Set(value string) error {
3030
var cfg struct {
3131
ConnStrs ConnStrings
3232

33+
Verbose bool
3334
Isolation string // "repeatable read" or "read committed"
3435

3536
Accounts struct {
@@ -100,6 +101,7 @@ func init() {
100101
flag.IntVar(&cfg.Readers.Num, "r", 1, "The number of readers")
101102
flag.IntVar(&cfg.Writers.Num, "w", 8, "The number of writers")
102103
flag.IntVar(&cfg.Writers.Updates, "u", 10000, "The number updates each writer performs")
104+
flag.BoolVar(&cfg.Verbose, "v", false, "Show progress and other stuff for mortals")
103105
flag.BoolVar(&cfg.Writers.AllowGlobal, "g", false, "Allow global updates")
104106
flag.BoolVar(&cfg.Writers.AllowLocal, "l", false, "Allow local updates")
105107
flag.BoolVar(&cfg.Writers.PrivateRows, "p", false, "Private rows (avoid waits/aborts caused by concurrent updates of the same rows)")
@@ -136,7 +138,9 @@ func init() {
136138
}
137139

138140
func main() {
141+
start := time.Now()
139142
prepare(cfg.ConnStrs)
143+
fmt.Printf("database prepared in %0.2f seconds\n", time.Since(start).Seconds())
140144

141145
var writerWg sync.WaitGroup
142146
var readerWg sync.WaitGroup
@@ -145,21 +149,28 @@ func main() {
145149
cAborts := make(chan int)
146150
go progress(cfg.Writers.Num * cfg.Writers.Updates, cCommits, cAborts)
147151

152+
start = time.Now()
148153
writerWg.Add(cfg.Writers.Num)
149154
for i := 0; i < cfg.Writers.Num; i++ {
150155
go writer(i, cCommits, cAborts, &writerWg)
151156
}
152157
running = true
153158

159+
inconsistency := false
154160
readerWg.Add(cfg.Readers.Num)
155161
for i := 0; i < cfg.Readers.Num; i++ {
156-
go reader(&readerWg)
162+
go reader(&readerWg, &inconsistency)
157163
}
158164

159165
writerWg.Wait()
166+
fmt.Printf("writers finished in %0.2f seconds\n", time.Since(start).Seconds())
167+
160168
running = false
161169
readerWg.Wait()
162170

171+
if inconsistency {
172+
fmt.Printf("INCONSISTENCY DETECTED\n")
173+
}
163174
fmt.Printf("done.\n")
164175
}
165176

@@ -200,10 +211,12 @@ func prepare_one(connstr string, wg *sync.WaitGroup) {
200211
for i := 0; i < cfg.Accounts.Num; i++ {
201212
exec(conn, "insert into t values ($1, $2)", i, cfg.Accounts.Balance)
202213
if time.Since(start).Seconds() > 1 {
203-
fmt.Printf(
204-
"inserted %0.2f%%: %d of %d records\n",
205-
float32(i + 1) * 100.0 / float32(cfg.Accounts.Num), i + 1, cfg.Accounts.Num,
206-
)
214+
if cfg.Verbose {
215+
fmt.Printf(
216+
"inserted %0.2f%%: %d of %d records\n",
217+
float32(i + 1) * 100.0 / float32(cfg.Accounts.Num), i + 1, cfg.Accounts.Num,
218+
)
219+
}
207220
start = time.Now()
208221
}
209222
}
@@ -230,10 +243,12 @@ func progress(total int, cCommits chan int, cAborts chan int) {
230243
commits += newcommits
231244
aborts += newaborts
232245
if time.Since(start).Seconds() > 1 {
233-
fmt.Printf(
234-
"progress %0.2f%%: %d commits, %d aborts\n",
235-
float32(commits) * 100.0 / float32(total), commits, aborts,
236-
)
246+
if cfg.Verbose {
247+
fmt.Printf(
248+
"progress %0.2f%%: %d commits, %d aborts\n",
249+
float32(commits) * 100.0 / float32(total), commits, aborts,
250+
)
251+
}
237252
start = time.Now()
238253
}
239254
}
@@ -365,7 +380,7 @@ func writer(id int, cCommits chan int, cAborts chan int, wg *sync.WaitGroup) {
365380
wg.Done()
366381
}
367382

368-
func reader(wg *sync.WaitGroup) {
383+
func reader(wg *sync.WaitGroup, inconsistency *bool) {
369384
var prevSum int64 = 0
370385

371386
var conns []*pgx.Conn
@@ -398,6 +413,10 @@ func reader(wg *sync.WaitGroup) {
398413

399414
if (sum != prevSum) {
400415
fmt.Printf("Total=%d xid=%d\n", sum, xid)
416+
if (prevSum != 0) {
417+
fmt.Printf("inconsistency!\n")
418+
*inconsistency = true
419+
}
401420
prevSum = sum
402421
}
403422
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy