polardbxengine/mysql-test/suite/polarx_rpc/t/polarx_rpc_cancel.test

150 lines
3.0 KiB
Plaintext

## Test polarx rpc template
--let $TEMP_FILE = polarx_rpc_template
--source include/polarx_rpc_preamble.inc
--source include/polarx_rpc_create_user.inc
## Test starts here
--write_file $MYSQL_TMP_DIR/$TEMP_FILE.tmp
## do sth with sql in auto commit session
-->switchsid -1
-->sql
drop schema if exists xtest;
create schema xtest;
use xtest;
create table mytable (pk int primary key auto_increment, data varchar(100));
-->endsql
## do sth with polarx_rpc msg
## switch Session ID to 1
-->switchsid 1
## first start new session
Polarx.Session.NewSession {
}
## expect Polarx.Ok
-->recvok
Polarx.Sql.StmtExecute {
stmt: "insert into mytable values (DEFAULT, \'one\')"
schema_name: "xtest"
}
## expect Polarx.Sql.StmtExecuteOk
-->recvresult
Polarx.Sql.StmtExecute {
stmt: "insert into mytable values (DEFAULT, \'two\')"
}
## expect Polarx.Sql.StmtExecuteOk
-->recvresult
Polarx.Sql.StmtExecute {
stmt: "insert into mytable values (DEFAULT, \'three\')"
}
## expect Polarx.Sql.StmtExecuteOk
-->recvresult
## switch to another session and lock the record
-->switchsid 2
Polarx.Session.NewSession {
}
## expect Polarx.Ok
-->recvok
Polarx.Sql.StmtExecute {
stmt: "begin"
schema_name: "xtest"
token: 10000
}
## expect Polarx.Sql.StmtExecuteOk
-->recvresult
Polarx.Sql.StmtExecute {
stmt: "select data from mytable where pk=1 for update"
token: 10000
}
## expect Polarx.Sql.StmtExecuteOk
-->recvresult
## Now data is locked, switch back to session 1 and read.
-->switchsid 1
## Test pipeline and cancel, enqueue blocking query first.
Polarx.Sql.StmtExecute {
stmt: "select data from mytable where pk=1 for update"
token: 10000
}
## Then enqueue normal query.
Polarx.Sql.StmtExecute {
stmt: "select * from mytable"
token: 10000
}
## sleep to make sure lock wait happens
-->sleep 0.1
## Do cancel on first request.
Polarx.Session.KillSession {
type: QUERY
x_session_id: 1
}
## expect Notice warning Query execution was interrupted(5.7 will get this)
-->recvtype Polarx.Notice.Frame
## expect Notice warning Got error 168 from storage engine(5.7 will get this)
-->recvtype Polarx.Notice.Frame
-->recverror ER_QUERY_INTERRUPTED
## But next request will continue.
-->recvtype Polarx.Resultset.ColumnMetaData
-->recvtype Polarx.Resultset.ColumnMetaData
-->recvtype Polarx.Resultset.Row
-->recvtype Polarx.Resultset.Row
-->recvtype Polarx.Resultset.Row
-->recvtype Polarx.Resultset.FetchDone
-->recvtype Polarx.Notice.Frame
-->recvtype Polarx.Sql.StmtExecuteOk
## close session.
Polarx.Session.Close {
}
## expect Polarx.Ok
-->recvok
## Close session 2.
-->switchsid 2
Polarx.Sql.StmtExecute {
stmt: "rollback"
token: 10000
}
## expect Polarx.Sql.StmtExecuteOk
-->recvresult
Polarx.Session.Close {
}
## expect Polarx.Ok
-->recvok
## switch back to auto commit session and cleanup
-->switchsid -1
-->sql
drop schema if exists xtest;
-->endsql
EOF
--exec $POLARX_RPC_TEST -upolarx_root --password='' --file=$MYSQL_TMP_DIR/$TEMP_FILE.tmp 2>&1
## Cleanup
--remove_file $MYSQL_TMP_DIR/$TEMP_FILE.tmp
--source include/polarx_rpc_drop_user.inc