@@ -11,7 +11,7 @@ import (
11
11
const (
12
12
TRANSFER_CONNECTIONS = 8
13
13
INIT_AMOUNT = 10000
14
- N_ITERATIONS = 100000
14
+ N_ITERATIONS = 10000 //0
15
15
N_ACCOUNTS = 2 //100000
16
16
)
17
17
@@ -92,6 +92,8 @@ func transfer(id int, wg *sync.WaitGroup) {
92
92
var snapshot int64
93
93
var csn int64
94
94
95
+ nGlobalTrans := 0
96
+
95
97
conn1 , err := pgx .Connect (cfg1 )
96
98
checkErr (err )
97
99
defer conn1 .Close ()
@@ -101,38 +103,62 @@ func transfer(id int, wg *sync.WaitGroup) {
101
103
defer conn2 .Close ()
102
104
103
105
for i := 0 ; i < N_ITERATIONS ; i ++ {
106
+ var dst * pgx.Conn
107
+ var src * pgx.Conn
108
+ choice := rand .Intn (3 )- 1
104
109
gtid := strconv .Itoa (id ) + "." + strconv .Itoa (i )
110
+ if choice < 0 {
111
+ src = conn1
112
+ dst = conn1
113
+ exec (conn1 , "begin transaction" )
114
+ } else if choice > 0 {
115
+ src = conn2
116
+ dst = conn2
117
+ exec (conn2 , "begin transaction" )
118
+ } else {
119
+ src = conn1
120
+ dst = conn2
121
+ exec (conn1 , "begin transaction" )
122
+ exec (conn2 , "begin transaction" )
123
+ snapshot = execQuery (conn1 , "select dtm_extend($1)" , gtid )
124
+ snapshot = execQuery (conn2 , "select dtm_access($1, $2)" , snapshot , gtid )
125
+ }
105
126
//amount := 2*rand.Intn(2) - 1
106
127
amount := 1
107
128
account1 := rand .Intn (N_ACCOUNTS )
108
129
account2 := rand .Intn (N_ACCOUNTS )
130
+
131
+ if account1 > account2 {
132
+ tmp := account1
133
+ account1 = account2
134
+ account2 = tmp
135
+ }
109
136
110
- exec (conn1 , "begin transaction" )
111
- exec (conn2 , "begin transaction" )
112
-
113
- snapshot = execQuery (conn1 , "select dtm_extend($1)" , gtid )
114
- snapshot = execQuery (conn2 , "select dtm_access($1, $2)" , snapshot , gtid )
115
-
116
- exec (conn1 , "update t set v = v + $1 where u=$2" , amount , account1 )
117
- exec (conn2 , "update t set v = v - $1 where u=$2" , amount , account2 )
137
+ exec (src , "update t set v = v - $1 where u=$2" , amount , account1 )
138
+ exec (dst , "update t set v = v + $1 where u=$2" , amount , account2 )
118
139
119
- exec (conn1 , "prepare transaction '" + gtid + "'" )
120
- exec (conn2 , "prepare transaction '" + gtid + "'" )
140
+ if (src != dst ) {
141
+ exec (conn1 , "prepare transaction '" + gtid + "'" )
142
+ exec (conn2 , "prepare transaction '" + gtid + "'" )
121
143
122
- exec (conn1 , "select dtm_begin_prepare($1)" , gtid )
123
- exec (conn2 , "select dtm_begin_prepare($1)" , gtid )
144
+ exec (conn1 , "select dtm_begin_prepare($1)" , gtid )
145
+ exec (conn2 , "select dtm_begin_prepare($1)" , gtid )
124
146
125
- csn = execQuery (conn1 , "select dtm_prepare($1, 0)" , gtid )
126
- csn = execQuery (conn2 , "select dtm_prepare($1, $2)" , gtid , csn )
147
+ csn = execQuery (conn1 , "select dtm_prepare($1, 0)" , gtid )
148
+ csn = execQuery (conn2 , "select dtm_prepare($1, $2)" , gtid , csn )
127
149
128
- exec (conn1 , "select dtm_end_prepare($1, $2)" , gtid , csn )
129
- exec (conn2 , "select dtm_end_prepare($1, $2)" , gtid , csn )
150
+ exec (conn1 , "select dtm_end_prepare($1, $2)" , gtid , csn )
151
+ exec (conn2 , "select dtm_end_prepare($1, $2)" , gtid , csn )
130
152
131
- exec (conn1 , "commit prepared '" + gtid + "'" )
132
- exec (conn2 , "commit prepared '" + gtid + "'" )
133
- }
153
+ exec (conn1 , "commit prepared '" + gtid + "'" )
154
+ exec (conn2 , "commit prepared '" + gtid + "'" )
155
+ nGlobalTrans ++
156
+ } else {
157
+ exec (dst , "commit" )
158
+ }
159
+ }
134
160
135
- fmt .Println ("Test completed" )
161
+ fmt .Printf ("Test completed, performed %d global transactions \n " , nGlobalTrans )
136
162
wg .Done ()
137
163
}
138
164
0 commit comments