diff --git a/tests/script/tsim/sync/insertDataByRunBack.sim b/tests/script/tsim/sync/insertDataByRunBack.sim new file mode 100644 index 0000000000000000000000000000000000000000..c86cd3844bd3258b5cac4f7b4bbe5dd1c3e0dec2 --- /dev/null +++ b/tests/script/tsim/sync/insertDataByRunBack.sim @@ -0,0 +1,63 @@ + +sql connect + +print ================ insert data +$dbNamme = db +$ctbPrefix = ctb +$ntbPrefix = ntb +$tbNum = 10 +$rowNum = 10 +$tstart = 1640966400000 # 2022-01-01 00:00:00.000 + +sql use $dbNamme + +$loop_cnt = 0 +loop_insert: +print ====> loop insert data, but once check if there is stop insert flag in interaction talbe from main thread +sql select * from interaction +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] +if $rows == 2 then + if $data[1][1] == stop then + goto end_insert + endi +endi + +$i = 0 +while $i < $tbNum + $ctb = $ctbPrefix . $i + $ntb = $ntbPrefix . $i + + $x = 0 + while $x < $rowNum + $binary = ' . binary + $binary = $binary . $i + $binary = $binary . ' + + sql insert into $ctb values ($tstart , $i , $x , $binary ) + sql insert into $ntb values ($tstart , 999 , 999 , 'binary-ntb' ) + $tstart = $tstart + 1 + $x = $x + 1 + endw + + $i = $i + 1 + $tstart = 1640966400000 +endw + +if $loop_cnt == 0 then + print ====> notify main to working for insert data + sql insert into interaction values (now, 'working', 0, 0); +endi +$loop_cnt = $loop_cnt + 1 +goto loop_insert + +end_insert: +print ====> save insert data rows to main thread + +$totalRowsOfCtb = $rowNum * $loop_cnt +$totalRowsOfStb = $totalRowsOfCtb * $tbNum +sql insert into interaction values (now, 'end', $totalRowsOfCtb, $totalRowsOfStb ); +print ====> totalRowsOfCtb: $totalRowsOfCtb , totalRowsOfStb: $totalRowsOfStb + + + diff --git a/tests/script/tsim/sync/oneReplica1VgElect.sim b/tests/script/tsim/sync/oneReplica1VgElect.sim new file mode 100644 index 0000000000000000000000000000000000000000..9726c0fdf5df69597074baf549814dfc63127e92 --- /dev/null +++ b/tests/script/tsim/sync/oneReplica1VgElect.sim @@ -0,0 +1,363 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/deploy.sh -n dnode2 -i 2 +system sh/deploy.sh -n dnode3 -i 3 +system sh/deploy.sh -n dnode4 -i 4 + +system sh/cfg.sh -n dnode1 -c supportVnodes -v 0 + +system sh/exec.sh -n dnode1 -s start +system sh/exec.sh -n dnode2 -s start +system sh/exec.sh -n dnode3 -s start +system sh/exec.sh -n dnode4 -s start + +$loop_cnt = 0 +check_dnode_ready: + $loop_cnt = $loop_cnt + 1 + sleep 200 + if $loop_cnt == 10 then + print ====> dnode not ready! + return -1 + endi +sql show dnodes +print ===> $rows $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] +print ===> $rows $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6] +print ===> $rows $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6] +print ===> $rows $data[3][0] $data[3][1] $data[3][2] $data[3][3] $data[3][4] $data[3][5] $data[3][6] +if $data[0][0] != 1 then + return -1 +endi +if $data[0][4] != ready then + goto check_dnode_ready +endi + +#sql connect +sql create dnode $hostname port 7200 +sql create dnode $hostname port 7300 +sql create dnode $hostname port 7400 + +$loop_cnt = 0 +check_dnode_ready_1: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> dnodes not ready! + return -1 +endi +sql show dnodes +print ===> $rows $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] +print ===> $rows $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6] +print ===> $rows $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6] +print ===> $rows $data[3][0] $data[3][1] $data[3][2] $data[3][3] $data[3][4] $data[3][5] $data[3][6] +if $data[0][4] != ready then + goto check_dnode_ready_1 +endi +if $data[1][4] != ready then + goto check_dnode_ready_1 +endi +if $data[2][4] != ready then + goto check_dnode_ready_1 +endi +if $data[3][4] != ready then + goto check_dnode_ready_1 +endi + +$vgroups = 1 +$replica = 1 + +print ============= create database +sql create database db replica $replica vgroups $vgroups + +$loop_cnt = 0 +check_db_ready: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> db not ready! + return -1 +endi +sql show databases +print ===> rows: $rows +print $data(db)[0] $data(db)[1] $data(db)[2] $data(db)[3] $data(db)[4] $data(db)[5] $data(db)[6] $data(db)[7] $data(db)[8] $data(db)[9] $data(db)[10] $data(db)[11] $data(db)[12] +print $data(db)[13] $data(db)[14] $data(db)[15] $data(db)[16] $data(db)[17] $data(db)[18] $data(db)[19] $data(db)[20] +if $rows != 3 then + return -1 +endi +if $data(db)[20] != ready then + goto check_db_ready +endi + +sql use db + +$loop_cnt = 0 +check_vg_ready: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> vgroups not ready! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != NULL then + goto check_vg_ready + endi + if $data[0][8] != NULL then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][3] + goto vg_ready +endi +if $data[0][6] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready + endi + if $data[0][8] != NULL then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][5] + goto vg_ready +endi +if $data[0][8] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready + endi + if $data[0][6] != NULL then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][7] + goto vg_ready +endi +vg_ready: + +print ====> create stable/child table, insert data, and select +sql create table if not exists stb (ts timestamp, c1 int, c2 float, c3 binary(10)) tags (t1 int) + +sql show stables +if $rows != 1 then + return -1 +endi + +$ctbPrefix = ctb +$ntbPrefix = ntb +$tbNum = 10 +$rowNum = 10 +$tstart = 1640966400000 # 2022-01-01 00:00:00.000 + +$i = 0 +while $i < $tbNum + $ctb = $ctbPrefix . $i + sql create table $ctb using stb tags( $i ) + $ntb = $ntbPrefix . $i + sql create table $ntb (ts timestamp, c1 int, c2 float, c3 binary(10)) + + $x = 0 + while $x < $rowNum + $binary = ' . binary + $binary = $binary . $i + $binary = $binary . ' + + sql insert into $ctb values ($tstart , $i , $x , $binary ) + sql insert into $ntb values ($tstart , 999 , 999 , 'binary-ntb' ) + $tstart = $tstart + 1 + $x = $x + 1 + endw + + print ====> insert rows: $rowNum into $ctb and $ntb + + $i = $i + 1 + $tstart = 1640966400000 +endw + +$totalTblNum = $tbNum * 2 +sql show tables +if $rows != $totalTblNum then + return -1 +endi + +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +$totalRowsOfStb = $rowNum * $tbNum +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +print ====> finde vnode of leader, and stop the dnode where the vnode is located, and query stb/ntb count(*) +sql show vgroups +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +if $data[0][4] == LEADER then + $dnodeId = $data[0][3] +elif $data[0][6] == LEADER then + $dnodeId = $data[0][5] +endi +elif $data[0][8] == LEADER then + $dnodeId = $data[0][7] +else + print ====> no leader vnode!!! + return -1 +endi + +$dnodeId = dnode . $dnodeId +print ====> stop $dnodeId +system sh/exec.sh -n $dnodeId -s stop -x SIGINT + +$loop_cnt = 0 +check_vg_ready_2: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> vgroups switch fail!!! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != NULL then + goto check_vg_ready_2 + endi + if $data[0][8] != NULL then + goto check_vg_ready_2 + endi + print ---- vgroup $data[0][0] leader switch to dnode $data[0][3] + goto vg_ready_2 +endi +if $data[0][6] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready_2 + endi + if $data[0][8] != NULL then + goto check_vg_ready_2 + endi + print ---- vgroup $data[0][0] leader switch to dnode $data[0][5] + goto vg_ready_2 +endi +if $data[0][8] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready_2 + endi + if $data[0][6] != NULL then + goto check_vg_ready_2 + endi + print ---- vgroup $data[0][0] leader switch to dnode $data[0][7] + goto vg_ready_2 +endi +vg_ready_2: + +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +sql select count(*) from ctb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +print ====> stop and start all dnode(not include the dnode where mnode is located), then query +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode3 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s start +system sh/exec.sh -n dnode3 -s start +system sh/exec.sh -n dnode2 -s start + +$loop_cnt = 0 +check_vg_ready_1: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> after restart dnode, vgroups not ready! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != NULL then + goto check_vg_ready_1 + endi + if $data[0][8] != NULL then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +if $data[0][6] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready_1 + endi + if $data[0][8] != NULL then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +if $data[0][8] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready_1 + endi + if $data[0][6] != NULL then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +vg_ready_1: + +print ====> after restart dnode2/dnode3/dnode4, query stb/ntb count(*) +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +sql select count(*) from ctb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +system sh/exec.sh -n dnode1 -s stop -x SIGINT +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode3 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s stop -x SIGINT diff --git a/tests/script/tsim/sync/oneReplica1VgElectWithInsert.sim b/tests/script/tsim/sync/oneReplica1VgElectWithInsert.sim new file mode 100644 index 0000000000000000000000000000000000000000..972447ba9b16c4668ecf4240eb8c3cf4172cfe09 --- /dev/null +++ b/tests/script/tsim/sync/oneReplica1VgElectWithInsert.sim @@ -0,0 +1,401 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/deploy.sh -n dnode2 -i 2 +system sh/deploy.sh -n dnode3 -i 3 +system sh/deploy.sh -n dnode4 -i 4 + +system sh/cfg.sh -n dnode1 -c supportVnodes -v 0 + +system sh/exec.sh -n dnode1 -s start +system sh/exec.sh -n dnode2 -s start +system sh/exec.sh -n dnode3 -s start +system sh/exec.sh -n dnode4 -s start + +$loop_cnt = 0 +check_dnode_ready: + $loop_cnt = $loop_cnt + 1 + sleep 200 + if $loop_cnt == 10 then + print ====> dnode not ready! + return -1 + endi +sql show dnodes +print ===> $rows $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] +print ===> $rows $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6] +print ===> $rows $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6] +print ===> $rows $data[3][0] $data[3][1] $data[3][2] $data[3][3] $data[3][4] $data[3][5] $data[3][6] +if $data[0][0] != 1 then + return -1 +endi +if $data[0][4] != ready then + goto check_dnode_ready +endi + +#sql connect +sql create dnode $hostname port 7200 +sql create dnode $hostname port 7300 +sql create dnode $hostname port 7400 + +$loop_cnt = 0 +check_dnode_ready_1: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> dnodes not ready! + return -1 +endi +sql show dnodes +print ===> $rows $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] +print ===> $rows $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6] +print ===> $rows $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6] +print ===> $rows $data[3][0] $data[3][1] $data[3][2] $data[3][3] $data[3][4] $data[3][5] $data[3][6] +if $data[0][4] != ready then + goto check_dnode_ready_1 +endi +if $data[1][4] != ready then + goto check_dnode_ready_1 +endi +if $data[2][4] != ready then + goto check_dnode_ready_1 +endi +if $data[3][4] != ready then + goto check_dnode_ready_1 +endi + +$vgroups = 1 +$replica = 1 + +print ============= create database +sql create database db replica $replica vgroups $vgroups + +$loop_cnt = 0 +check_db_ready: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> db not ready! + return -1 +endi +sql show databases +print ===> rows: $rows +print $data(db)[0] $data(db)[1] $data(db)[2] $data(db)[3] $data(db)[4] $data(db)[5] $data(db)[6] $data(db)[7] $data(db)[8] $data(db)[9] $data(db)[10] $data(db)[11] $data(db)[12] +print $data(db)[13] $data(db)[14] $data(db)[15] $data(db)[16] $data(db)[17] $data(db)[18] $data(db)[19] $data(db)[20] +if $rows != 3 then + return -1 +endi +if $data(db)[20] != ready then + goto check_db_ready +endi + +sql use db + +$loop_cnt = 0 +check_vg_ready: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> vgroups not ready! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != NULL then + goto check_vg_ready + endi + if $data[0][8] != NULL then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][3] + goto vg_ready +endi +if $data[0][6] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready + endi + if $data[0][8] != NULL then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][5] + goto vg_ready +endi +if $data[0][8] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready + endi + if $data[0][6] != NULL then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][7] + goto vg_ready +endi +vg_ready: + +print ====> create stable/child table +sql create table stb (ts timestamp, c1 int, c2 float, c3 binary(10)) tags (t1 int) + +sql show stables +if $rows != 1 then + return -1 +endi + +$ctbPrefix = ctb +$ntbPrefix = ntb +$tbNum = 10 +#$rowNum = 10 +#$tstart = 1640966400000 # 2022-01-01 00:00:00.000 + +$i = 0 +while $i < $tbNum + $ctb = $ctbPrefix . $i + sql create table $ctb using stb tags( $i ) + $ntb = $ntbPrefix . $i + sql create table $ntb (ts timestamp, c1 int, c2 float, c3 binary(10)) + +# $x = 0 +# while $x < $rowNum +# $binary = ' . binary +# $binary = $binary . $i +# $binary = $binary . ' +# +# sql insert into $ctb values ($tstart , $i , $x , $binary ) +# sql insert into $ntb values ($tstart , 999 , 999 , 'binary-ntb' ) +# $tstart = $tstart + 1 +# $x = $x + 1 +# endw + +# print ====> insert rows: $rowNum into $ctb and $ntb + + $i = $i + 1 +# $tstart = 1640966400000 +endw + +$totalTblNum = $tbNum * 2 +sql show tables +if $rows != $totalTblNum then + return -1 +endi + +print ====> create a normal table for interaction between main and back threads +sql create table interaction (ts timestamp, flag binary(10), childrows int, stbrows int) + +print ====> start to run_back to insert data +run_back tsim/tmq/insertDataByRunBack.sim + + +print ====> waiting insert thread starting insert data +waiting_insert_data: +sql select * from interaction +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] +if $rows == 1 then + if $data[0][1] == working then + goto start_switch_leader + endi +endi +goto waiting_insert_data + +start_switch_leader: + +$switch_loop_cnt = 0 +switch_leader_loop: + +print ====> finde vnode of leader, and stop the dnode where the vnode is located, and query stb/ntb count(*) +sql show vgroups +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +if $data[0][4] == LEADER then + $dnodeId = $data[0][3] +elif $data[0][6] == LEADER then + $dnodeId = $data[0][5] +endi +elif $data[0][8] == LEADER then + $dnodeId = $data[0][7] +else + print ====> no leader vnode!!! + return -1 +endi + +$dnodeId = dnode . $dnodeId +print ====> stop $dnodeId +system sh/exec.sh -n $dnodeId -s stop -x SIGINT + +$loop_cnt = 0 +check_vg_ready_2: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> vgroups switch fail!!! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != NULL then + goto check_vg_ready_2 + endi + if $data[0][8] != NULL then + goto check_vg_ready_2 + endi + print ---- vgroup $data[0][0] leader switch to dnode $data[0][3] + goto vg_ready_2 +endi +if $data[0][6] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready_2 + endi + if $data[0][8] != NULL then + goto check_vg_ready_2 + endi + print ---- vgroup $data[0][0] leader switch to dnode $data[0][5] + goto vg_ready_2 +endi +if $data[0][8] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready_2 + endi + if $data[0][6] != NULL then + goto check_vg_ready_2 + endi + print ---- vgroup $data[0][0] leader switch to dnode $data[0][7] + goto vg_ready_2 +endi +vg_ready_2: + +$switch_loop_cnt = $switch_loop_cnt + 1 +if $switch_loop_cnt < 3 then + print ====> start $dnodeId + system sh/exec.sh -n $dnodeId -s start + goto switch_leader_loop +endi + +loop_switch_end: + +print ====> notify insert thread to stop insert data +sql insert into interaction values (now, 'stop', 0, 0); + +print ====> waiting insert thread to stop insert data +waiting_stop_data: +sql select * from interaction +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] +print $data[2][0] $data[2][1] $data[2][2] $data[2][3] +if $rows == 3 then + if $data[2][1] == end then + $totalRowsOfCtb = $data[2][2] + $totalRowsOfStb = $data[2][3] + goto check_affected_rows + endi +endi +goto waiting_stop_data + +check_affected_rows: + +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfCtb then + return -1 +endi + +sql select count(*) from ctb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfCtb then + return -1 +endi + +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +print ====> stop and start all dnode(not include the dnode where mnode is located), then query +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode3 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s start +system sh/exec.sh -n dnode3 -s start +system sh/exec.sh -n dnode2 -s start + +$loop_cnt = 0 +check_vg_ready_1: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> after restart dnode, vgroups not ready! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != NULL then + goto check_vg_ready_1 + endi + if $data[0][8] != NULL then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +if $data[0][6] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready_1 + endi + if $data[0][8] != NULL then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +if $data[0][8] == LEADER then + if $data[0][4] != NULL then + goto check_vg_ready_1 + endi + if $data[0][6] != NULL then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +vg_ready_1: + +print ====> after restart dnode2/dnode3/dnode4, query stb/ntb count(*) +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfCtb then + return -1 +endi + +sql select count(*) from ctb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfCtb then + return -1 +endi + +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +system sh/exec.sh -n dnode1 -s stop -x SIGINT +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode3 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s stop -x SIGINT diff --git a/tests/script/tsim/sync/threeReplica1VgElect.sim b/tests/script/tsim/sync/threeReplica1VgElect.sim new file mode 100644 index 0000000000000000000000000000000000000000..f709c72dd7f0870f25ffe4d5a483aa9e1bb3d0ba --- /dev/null +++ b/tests/script/tsim/sync/threeReplica1VgElect.sim @@ -0,0 +1,391 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/deploy.sh -n dnode2 -i 2 +system sh/deploy.sh -n dnode3 -i 3 +system sh/deploy.sh -n dnode4 -i 4 + +system sh/cfg.sh -n dnode1 -c supportVnodes -v 0 + +system sh/exec.sh -n dnode1 -s start +system sh/exec.sh -n dnode2 -s start +system sh/exec.sh -n dnode3 -s start +system sh/exec.sh -n dnode4 -s start + +$loop_cnt = 0 +check_dnode_ready: + $loop_cnt = $loop_cnt + 1 + sleep 200 + if $loop_cnt == 10 then + print ====> dnode not ready! + return -1 + endi +sql show dnodes +print ===> $rows $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] +print ===> $rows $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6] +print ===> $rows $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6] +print ===> $rows $data[3][0] $data[3][1] $data[3][2] $data[3][3] $data[3][4] $data[3][5] $data[3][6] +if $data[0][0] != 1 then + return -1 +endi +if $data[0][4] != ready then + goto check_dnode_ready +endi + +#sql connect +sql create dnode $hostname port 7200 +sql create dnode $hostname port 7300 +sql create dnode $hostname port 7400 + +$loop_cnt = 0 +check_dnode_ready_1: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> dnodes not ready! + return -1 +endi +sql show dnodes +print ===> $rows $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] +print ===> $rows $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6] +print ===> $rows $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6] +print ===> $rows $data[3][0] $data[3][1] $data[3][2] $data[3][3] $data[3][4] $data[3][5] $data[3][6] +if $data[0][4] != ready then + goto check_dnode_ready_1 +endi +if $data[1][4] != ready then + goto check_dnode_ready_1 +endi +if $data[2][4] != ready then + goto check_dnode_ready_1 +endi +if $data[3][4] != ready then + goto check_dnode_ready_1 +endi + +$vgroups = 1 +$replica = 3 + +print ============= create database +sql create database db replica $replica vgroups $vgroups + +$loop_cnt = 0 +check_db_ready: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> db not ready! + return -1 +endi +sql show databases +print ===> rows: $rows +print $data(db)[0] $data(db)[1] $data(db)[2] $data(db)[3] $data(db)[4] $data(db)[5] $data(db)[6] $data(db)[7] $data(db)[8] $data(db)[9] $data(db)[10] $data(db)[11] $data(db)[12] +print $data(db)[13] $data(db)[14] $data(db)[15] $data(db)[16] $data(db)[17] $data(db)[18] $data(db)[19] $data(db)[20] +if $rows != 3 then + return -1 +endi +if $data(db)[20] != ready then + goto check_db_ready +endi + +sql use db + +$loop_cnt = 0 +check_vg_ready: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> vgroups not ready! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != FLLOWER then + goto check_vg_ready + endi + if $data[0][8] != FLLOWER then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][3] + goto vg_ready +endi +if $data[0][6] == LEADER then + if $data[0][4] != FLLOWER then + goto check_vg_ready + endi + if $data[0][8] != FLLOWER then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][5] + goto vg_ready +endi +if $data[0][8] == LEADER then + if $data[0][4] != FLLOWER then + goto check_vg_ready + endi + if $data[0][6] != FLLOWER then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][7] + goto vg_ready +endi +vg_ready: + +print ====> create stable/child table, insert data, and select +sql create table if not exists stb (ts timestamp, c1 int, c2 float, c3 binary(10)) tags (t1 int) + +sql show stables +if $rows != 1 then + return -1 +endi + +$ctbPrefix = ctb +$ntbPrefix = ntb +$tbNum = 10 +$rowNum = 10 +$tstart = 1640966400000 # 2022-01-01 00:00:00.000 + +$i = 0 +while $i < $tbNum + $ctb = $ctbPrefix . $i + sql create table $ctb using stb tags( $i ) + $ntb = $ntbPrefix . $i + sql create table $ntb (ts timestamp, c1 int, c2 float, c3 binary(10)) + + $x = 0 + while $x < $rowNum + $binary = ' . binary + $binary = $binary . $i + $binary = $binary . ' + + sql insert into $ctb values ($tstart , $i , $x , $binary ) + sql insert into $ntb values ($tstart , 999 , 999 , 'binary-ntb' ) + $tstart = $tstart + 1 + $x = $x + 1 + endw + + print ====> insert rows: $rowNum into $ctb and $ntb + + $i = $i + 1 + $tstart = 1640966400000 +endw + +$totalTblNum = $tbNum * 2 +sql show tables +if $rows != $totalTblNum then + return -1 +endi + +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +$totalRowsOfStb = $rowNum * $tbNum +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +print ====> finde vnode of leader, and stop the dnode where the vnode is located, and query stb/ntb count(*) +sql show vgroups +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +if $data[0][4] == LEADER then + $dnodeId = $data[0][3] +elif $data[0][6] == LEADER then + $dnodeId = $data[0][5] +endi +elif $data[0][8] == LEADER then + $dnodeId = $data[0][7] +else + print ====> no leader vnode!!! + return -1 +endi + +$dnodeId = dnode . $dnodeId +print ====> stop $dnodeId +system sh/exec.sh -n $dnodeId -s stop -x SIGINT + +sql show vgroups +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +if $data[0][4] == LEADER then + print ---- vgroup $data[0][0] leader switch to dnode $data[0][3] +elif $data[0][6] == LEADER then + print ---- vgroup $data[0][0] leader switch to dnode $data[0][5] +endi +elif $data[0][8] == LEADER then + print ---- vgroup $data[0][0] leader switch to dnode $data[0][7] +else + print ====> no leader vnode!!! + return -1 +endi + +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +print ====> stop and start all dnode(not include the dnode where mnode is located), then query +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode3 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s start +system sh/exec.sh -n dnode3 -s start +system sh/exec.sh -n dnode2 -s start + +$loop_cnt = 0 +check_vg_ready_1: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> after restart dnode, vgroups not ready! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != FLLOWER then + goto check_vg_ready_1 + endi + if $data[0][8] != FLLOWER then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +if $data[0][6] == LEADER then + if $data[0][4] != FLLOWER then + goto check_vg_ready_1 + endi + if $data[0][8] != FLLOWER then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +if $data[0][8] == LEADER then + if $data[0][4] != FLLOWER then + goto check_vg_ready_1 + endi + if $data[0][6] != FLLOWER then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +vg_ready_1: + +print ====> after restart dnode2/dnode3/dnode4, query stb/ntb count(*) +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +sql select count(*) from ctb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +print ====> once stop one dnode by loop, and do query every time +$i = 2 +loop_stop_dnode: +$dnodeId = dnode . $i +print ====> stop $dnodeId +system sh/exec.sh -n $dnodeId -s stop -x SIGINT + +check_vg_ready_3: +sql show vgroups +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +if $data[0][4] == LEADER then + if $data[0][6] == LEADER then + goto check_vg_ready_3 + endi + if $data[0][8] == LEADER then + goto check_vg_ready_3 + endi + print ---- vgroup $data[0][0] leader locating dnode $data[0][5] +elif $data[0][6] == LEADER then + if $data[0][4] == LEADER then + goto check_vg_ready_3 + endi + if $data[0][8] == LEADER then + goto check_vg_ready_3 + endi + print ---- vgroup $data[0][0] leader locating dnode $data[0][7] +endi +elif $data[0][8] == LEADER then + if $data[0][4] == LEADER then + goto check_vg_ready_3 + endi + if $data[0][6] == LEADER then + goto check_vg_ready_3 + endi + print ---- vgroup $data[0][0] leader locating dnode $data[0][9] +else + print ====> no leader vnode!!! + return -1 +endi + +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +sql select count(*) from ctb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $rowNum then + return -1 +endi + +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +$i = $i + 1 +if $i <= 4 then + print ====> start $dnodeId + system sh/exec.sh -n $dnodeId -s start + goto loop_stop_dnode +endi + +system sh/exec.sh -n dnode1 -s stop -x SIGINT +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode3 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s stop -x SIGINT diff --git a/tests/script/tsim/sync/threeReplica1VgElectWihtInsert.sim b/tests/script/tsim/sync/threeReplica1VgElectWihtInsert.sim new file mode 100644 index 0000000000000000000000000000000000000000..d934e82b98bb1b4c580b9e5e5cecd9afa34d13ed --- /dev/null +++ b/tests/script/tsim/sync/threeReplica1VgElectWihtInsert.sim @@ -0,0 +1,469 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/deploy.sh -n dnode2 -i 2 +system sh/deploy.sh -n dnode3 -i 3 +system sh/deploy.sh -n dnode4 -i 4 + +system sh/cfg.sh -n dnode1 -c supportVnodes -v 0 + +system sh/exec.sh -n dnode1 -s start +system sh/exec.sh -n dnode2 -s start +system sh/exec.sh -n dnode3 -s start +system sh/exec.sh -n dnode4 -s start + +$loop_cnt = 0 +check_dnode_ready: + $loop_cnt = $loop_cnt + 1 + sleep 200 + if $loop_cnt == 10 then + print ====> dnode not ready! + return -1 + endi +sql show dnodes +print ===> $rows $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] +print ===> $rows $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6] +print ===> $rows $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6] +print ===> $rows $data[3][0] $data[3][1] $data[3][2] $data[3][3] $data[3][4] $data[3][5] $data[3][6] +if $data[0][0] != 1 then + return -1 +endi +if $data[0][4] != ready then + goto check_dnode_ready +endi + +#sql connect +sql create dnode $hostname port 7200 +sql create dnode $hostname port 7300 +sql create dnode $hostname port 7400 + +$loop_cnt = 0 +check_dnode_ready_1: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> dnodes not ready! + return -1 +endi +sql show dnodes +print ===> $rows $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] +print ===> $rows $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6] +print ===> $rows $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[2][4] $data[2][5] $data[2][6] +print ===> $rows $data[3][0] $data[3][1] $data[3][2] $data[3][3] $data[3][4] $data[3][5] $data[3][6] +if $data[0][4] != ready then + goto check_dnode_ready_1 +endi +if $data[1][4] != ready then + goto check_dnode_ready_1 +endi +if $data[2][4] != ready then + goto check_dnode_ready_1 +endi +if $data[3][4] != ready then + goto check_dnode_ready_1 +endi + +$vgroups = 1 +$replica = 3 + +print ============= create database +sql create database db replica $replica vgroups $vgroups + +$loop_cnt = 0 +check_db_ready: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> db not ready! + return -1 +endi +sql show databases +print ===> rows: $rows +print $data(db)[0] $data(db)[1] $data(db)[2] $data(db)[3] $data(db)[4] $data(db)[5] $data(db)[6] $data(db)[7] $data(db)[8] $data(db)[9] $data(db)[10] $data(db)[11] $data(db)[12] +print $data(db)[13] $data(db)[14] $data(db)[15] $data(db)[16] $data(db)[17] $data(db)[18] $data(db)[19] $data(db)[20] +if $rows != 3 then + return -1 +endi +if $data(db)[20] != ready then + goto check_db_ready +endi + +sql use db + +$loop_cnt = 0 +check_vg_ready: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> vgroups not ready! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != FLLOWER then + goto check_vg_ready + endi + if $data[0][8] != FLLOWER then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][3] + goto vg_ready +endi +if $data[0][6] == LEADER then + if $data[0][4] != FLLOWER then + goto check_vg_ready + endi + if $data[0][8] != FLLOWER then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][5] + goto vg_ready +endi +if $data[0][8] == LEADER then + if $data[0][4] != FLLOWER then + goto check_vg_ready + endi + if $data[0][6] != FLLOWER then + goto check_vg_ready + endi + print ---- vgroup $data[0][0] leader locate on dnode $data[0][7] + goto vg_ready +endi +vg_ready: + +print ====> create stable/child table +sql create table stb (ts timestamp, c1 int, c2 float, c3 binary(10)) tags (t1 int) + +sql show stables +if $rows != 1 then + return -1 +endi + +$ctbPrefix = ctb +$ntbPrefix = ntb +$tbNum = 10 +#$rowNum = 10 +#$tstart = 1640966400000 # 2022-01-01 00:00:00.000 + +$i = 0 +while $i < $tbNum + $ctb = $ctbPrefix . $i + sql create table $ctb using stb tags( $i ) + $ntb = $ntbPrefix . $i + sql create table $ntb (ts timestamp, c1 int, c2 float, c3 binary(10)) + +# $x = 0 +# while $x < $rowNum +# $binary = ' . binary +# $binary = $binary . $i +# $binary = $binary . ' +# +# sql insert into $ctb values ($tstart , $i , $x , $binary ) +# sql insert into $ntb values ($tstart , 999 , 999 , 'binary-ntb' ) +# $tstart = $tstart + 1 +# $x = $x + 1 +# endw + +# print ====> insert rows: $rowNum into $ctb and $ntb + + $i = $i + 1 +# $tstart = 1640966400000 +endw + +$totalTblNum = $tbNum * 2 +sql show tables +if $rows != $totalTblNum then + return -1 +endi + +print ====> create a normal table for interaction between main and back threads +sql create table interaction (ts timestamp, flag binary(10), childrows int, stbrows int) + +print ====> start to run_back to insert data +run_back tsim/tmq/insertDataByRunBack.sim + + +print ====> waiting insert thread starting insert data +waiting_insert_data: +sql select * from interaction +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] +if $rows == 1 then + if $data[0][1] == working then + goto start_switch_leader + endi +endi +goto waiting_insert_data + +start_switch_leader: + +$switch_loop_cnt = 0 +switch_leader_loop: + +print ====> finde vnode of leader, and stop the dnode where the vnode is located, and query stb/ntb count(*) +sql show vgroups +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +if $data[0][4] == LEADER then + $dnodeId = $data[0][3] +elif $data[0][6] == LEADER then + $dnodeId = $data[0][5] +endi +elif $data[0][8] == LEADER then + $dnodeId = $data[0][7] +else + print ====> no leader vnode!!! + return -1 +endi + +$dnodeId = dnode . $dnodeId +print ====> stop $dnodeId +system sh/exec.sh -n $dnodeId -s stop -x SIGINT + +$loop_cnt = 0 +check_vg_ready_2: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> vgroups switch fail!!! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != FLLOWER then + goto check_vg_ready_2 + endi + if $data[0][8] != FLLOWER then + goto check_vg_ready_2 + endi + print ---- vgroup $data[0][0] leader switch to dnode $data[0][3] + goto vg_ready_2 +endi +if $data[0][6] == LEADER then + if $data[0][4] != FLLOWER then + goto check_vg_ready_2 + endi + if $data[0][8] != FLLOWER then + goto check_vg_ready_2 + endi + print ---- vgroup $data[0][0] leader switch to dnode $data[0][5] + goto vg_ready_2 +endi +if $data[0][8] == LEADER then + if $data[0][4] != FLLOWER then + goto check_vg_ready_2 + endi + if $data[0][6] != FLLOWER then + goto check_vg_ready_2 + endi + print ---- vgroup $data[0][0] leader switch to dnode $data[0][7] + goto vg_ready_2 +endi +vg_ready_2: + +$switch_loop_cnt = $switch_loop_cnt + 1 +if $switch_loop_cnt < 3 then + print ====> start $dnodeId + system sh/exec.sh -n $dnodeId -s start + goto switch_leader_loop +endi + +loop_switch_end: + +print ====> notify insert thread to stop insert data +sql insert into interaction values (now, 'stop', 0, 0); + +print ====> waiting insert thread to stop insert data +waiting_stop_data: +sql select * from interaction +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] +print $data[2][0] $data[2][1] $data[2][2] $data[2][3] +if $rows == 3 then + if $data[2][1] == end then + $totalRowsOfCtb = $data[2][2] + $totalRowsOfStb = $data[2][3] + goto check_affected_rows + endi +endi +goto waiting_stop_data + +check_affected_rows: + +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfCtb then + return -1 +endi + +sql select count(*) from ctb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfCtb then + return -1 +endi + +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +print ====> stop and start all dnode(not include the dnode where mnode is located), then query +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode3 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s start +system sh/exec.sh -n dnode3 -s start +system sh/exec.sh -n dnode2 -s start + +$loop_cnt = 0 +check_vg_ready_1: +$loop_cnt = $loop_cnt + 1 +sleep 200 +if $loop_cnt == 10 then + print ====> after restart dnode, vgroups not ready! + return -1 +endi +sql show vgroups +print ===> rows: $rows +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6] $data[0][7] $data[0][8] $data[0][9] $data[10][6] $data[0][11] $data[0][12] $data[0][13] +if $rows != $vgroups then + return -1 +endi +if $data[0][4] == LEADER then + if $data[0][6] != FLLOWER then + goto check_vg_ready_1 + endi + if $data[0][8] != FLLOWER then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +if $data[0][6] == LEADER then + if $data[0][4] != FLLOWER then + goto check_vg_ready_1 + endi + if $data[0][8] != FLLOWER then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +if $data[0][8] == LEADER then + if $data[0][4] != FLLOWER then + goto check_vg_ready_1 + endi + if $data[0][6] != FLLOWER then + goto check_vg_ready_1 + endi + goto vg_ready_1 +endi +vg_ready_1: + +print ====> after restart dnode2/dnode3/dnode4, query stb/ntb count(*) +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfCtb then + return -1 +endi + +sql select count(*) from ctb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfCtb then + return -1 +endi + +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +print ====> once stop one dnode by loop, and do query every time +$i = 2 +loop_stop_dnode: +$dnodeId = dnode . $i +print ====> stop $dnodeId +system sh/exec.sh -n $dnodeId -s stop -x SIGINT + +check_vg_ready_3: +sql show vgroups +print $data(2)[0] $data(2)[1] $data(2)[2] $data(2)[3] $data(2)[4] $data(2)[5] $data(2)[6] $data(2)[7] $data(2)[8] $data(2)[9] $data(2)[10] $data(2)[11] $data(2)[12] $data(2)[13] +if $data[0][4] == LEADER then + if $data[0][6] == LEADER then + goto check_vg_ready_3 + endi + if $data[0][8] == LEADER then + goto check_vg_ready_3 + endi + print ---- vgroup $data[0][0] leader locating dnode $data[0][5] +elif $data[0][6] == LEADER then + if $data[0][4] == LEADER then + goto check_vg_ready_3 + endi + if $data[0][8] == LEADER then + goto check_vg_ready_3 + endi + print ---- vgroup $data[0][0] leader locating dnode $data[0][7] +endi +elif $data[0][8] == LEADER then + if $data[0][4] == LEADER then + goto check_vg_ready_3 + endi + if $data[0][6] == LEADER then + goto check_vg_ready_3 + endi + print ---- vgroup $data[0][0] leader locating dnode $data[0][9] +else + print ====> no leader vnode!!! + return -1 +endi + +sql select count(*) from ntb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfCtb then + return -1 +endi + +sql select count(*) from ctb0 +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfCtb then + return -1 +endi + +sql select count(*) from stb +print rows: $rows +print $data[0][0] $data[0][1] +if $data[0][0] != $totalRowsOfStb then + return -1 +endi + +$i = $i + 1 +if $i <= 4 then + print ====> start $dnodeId + system sh/exec.sh -n $dnodeId -s start + goto loop_stop_dnode +endi + +system sh/exec.sh -n dnode1 -s stop -x SIGINT +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode3 -s stop -x SIGINT +system sh/exec.sh -n dnode4 -s stop -x SIGINT