@@ -29,6 +29,7 @@ type CoordinatorTestSuite struct {
2929 db * gosql.DB
3030 concurrentTransactions int
3131 transactionsPerWorker int
32+ transactionSize int
3233}
3334
3435func (suite * CoordinatorTestSuite ) SetupSuite () {
@@ -55,8 +56,9 @@ func (suite *CoordinatorTestSuite) SetupSuite() {
5556 suite .Require ().NoError (err )
5657
5758 suite .db = db
58- suite .concurrentTransactions = 100
59- suite .transactionsPerWorker = 1
59+ suite .concurrentTransactions = 8
60+ suite .transactionsPerWorker = 1000
61+ suite .transactionSize = 10
6062
6163 db .SetMaxOpenConns (suite .concurrentTransactions )
6264}
@@ -145,40 +147,50 @@ func (suite *CoordinatorTestSuite) TestApplyDML() {
145147 suite .Require ().NoError (err )
146148
147149 g , _ := errgroup .WithContext (ctx )
148- for range suite .concurrentTransactions {
150+ for i := range suite .concurrentTransactions {
149151 g .Go (func () error {
152+ r := rand .New (rand .NewPCG (uint64 (0 ), uint64 (i )))
153+ maxID := int64 (1 )
150154 for range suite .transactionsPerWorker {
151155 tx , txErr := suite .db .Begin ()
152156 if txErr != nil {
153157 return txErr
154158 }
155159
156- for range rand .IntN (100 ) + 1 {
157- _ , txErr = tx .Exec (fmt .Sprintf ("INSERT INTO test.gh_ost_test (name) VALUES ('test-%d')" , rand .Int ()))
158- if txErr != nil {
159- return txErr
160+ // generate random write queries
161+ for range r .IntN (suite .transactionSize ) + 1 {
162+ switch r .IntN (5 ) {
163+ case 0 :
164+ _ , txErr = tx .Exec (fmt .Sprintf ("DELETE FROM test.gh_ost_test WHERE id=%d" , r .Int64N (maxID )))
165+ if txErr != nil {
166+ return txErr
167+ }
168+ case 1 , 2 :
169+ _ , txErr = tx .Exec (fmt .Sprintf ("UPDATE test.gh_ost_test SET name='test-%d' WHERE id=%d" , r .Int (), r .Int64N (maxID )))
170+ if txErr != nil {
171+ return txErr
172+ }
173+ default :
174+ res , txErr := tx .Exec (fmt .Sprintf ("INSERT INTO test.gh_ost_test (name) VALUES ('test-%d')" , r .Int ()))
175+ if txErr != nil {
176+ return txErr
177+ }
178+ lastID , err := res .LastInsertId ()
179+ if err != nil {
180+ return err
181+ }
182+ maxID = lastID + 1
160183 }
161184 }
162-
163185 txErr = tx .Commit ()
164186 if txErr != nil {
165187 return txErr
166188 }
167189 }
168-
169190 return nil
170191 })
171192 }
172193
173- err = g .Wait ()
174- suite .Require ().NoError (err )
175-
176- _ , err = suite .db .Exec ("UPDATE test.gh_ost_test SET name = 'foobar' WHERE id = 1" )
177- suite .Require ().NoError (err )
178-
179- _ , err = suite .db .Exec ("INSERT INTO test.gh_ost_test (name) VALUES ('test')" )
180- suite .Require ().NoError (err )
181-
182194 _ , err = applier .WriteChangelogState ("completed" )
183195 suite .Require ().NoError (err )
184196
@@ -224,14 +236,16 @@ func (suite *CoordinatorTestSuite) TestApplyDML() {
224236 suite .Require ().NoError (err )
225237 }
226238
239+ //err = g.Wait()
240+ //suite.Require().NoError(err)
241+ g .Wait () // there will be deadlock errors
242+
227243 fmt .Printf ("Time taken: %s\n " , time .Since (startAt ))
228244
229245 result , err := suite .db .Exec (`SELECT * FROM (
230246 SELECT t1.id,
231- CRC32(CONCAT_WS(';',t1.id,t1.name))
232- AS checksum1,
233- CRC32(CONCAT_WS(';',t2.id,t2.name))
234- AS checksum2
247+ CRC32(CONCAT_WS(';',t1.id,t1.name)) AS checksum1,
248+ CRC32(CONCAT_WS(';',t2.id,t2.name)) AS checksum2
235249 FROM test.gh_ost_test t1
236250 LEFT JOIN test._gh_ost_test_gho t2
237251 ON t1.id = t2.id
0 commit comments