@@ -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,56 @@ 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 )
109
130
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 )
131
+ exec (src , "update t set v = v - $1 where u=$2" , amount , account1 )
132
+ exec (dst , "update t set v = v + $1 where u=$2" , amount , account2 )
115
133
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 )
134
+ if (src != dst ) {
135
+ exec (conn1 , "prepare transaction '" + gtid + "'" )
136
+ exec (conn2 , "prepare transaction '" + gtid + "'" )
118
137
119
- exec (conn1 , "prepare transaction '" + gtid + "'" )
120
- exec (conn2 , "prepare transaction '" + gtid + "'" )
138
+ exec (conn1 , "select dtm_begin_prepare($1)" , gtid )
139
+ exec (conn2 , "select dtm_begin_prepare($1)" , gtid )
121
140
122
- exec (conn1 , "select dtm_begin_prepare ($1)" , gtid )
123
- exec (conn2 , "select dtm_begin_prepare ($1)" , gtid )
141
+ csn = execQuery (conn1 , "select dtm_prepare ($1, 0 )" , gtid )
142
+ csn = execQuery (conn2 , "select dtm_prepare ($1, $2 )" , gtid , csn )
124
143
125
- csn = execQuery (conn1 , "select dtm_prepare ($1, 0 )" , gtid )
126
- csn = execQuery (conn2 , "select dtm_prepare ($1, $2)" , gtid , csn )
144
+ exec (conn1 , "select dtm_end_prepare ($1, $2 )" , gtid , csn )
145
+ exec (conn2 , "select dtm_end_prepare ($1, $2)" , gtid , csn )
127
146
128
- exec (conn1 , "select dtm_end_prepare($1, $2)" , gtid , csn )
129
- exec (conn2 , "select dtm_end_prepare($1, $2)" , gtid , csn )
130
-
131
- exec (conn1 , "commit prepared '" + gtid + "'" )
132
- exec (conn2 , "commit prepared '" + gtid + "'" )
133
- }
147
+ exec (conn1 , "commit prepared '" + gtid + "'" )
148
+ exec (conn2 , "commit prepared '" + gtid + "'" )
149
+ nGlobalTrans ++
150
+ } else {
151
+ exec (dst , "commit" )
152
+ }
153
+ }
134
154
135
- fmt .Println ("Test completed" )
155
+ fmt .Println ("Test completed, performed %d global transactions" , nGlobalTrans )
136
156
wg .Done ()
137
157
}
138
158
0 commit comments