@@ -37,23 +37,29 @@ impl MysqlStore {
3737 let mut conn = self . conn_pool . get_conn ( ) . await . map_err ( into_error) ?;
3838
3939 loop {
40- match self . write_trx ( & mut conn, & batch) . await {
40+ let err = match self . write_trx ( & mut conn, & batch) . await {
4141 Ok ( result) => {
4242 return Ok ( result) ;
4343 }
44- Err ( CommitError :: Mysql ( Error :: Server ( err) ) )
44+ Err ( err) => err,
45+ } ;
46+
47+ let _ = conn. query_drop ( "ROLLBACK;" ) . await ;
48+
49+ match err {
50+ CommitError :: Mysql ( Error :: Server ( err) )
4551 if [ 1062 , 1213 ] . contains ( & err. code )
4652 && retry_count < MAX_COMMIT_ATTEMPTS
4753 && start. elapsed ( ) < MAX_COMMIT_TIME => { }
48- Err ( CommitError :: Retry ) => {
54+ CommitError :: Retry => {
4955 if retry_count > MAX_COMMIT_ATTEMPTS || start. elapsed ( ) > MAX_COMMIT_TIME {
5056 return Err ( trc:: StoreEvent :: AssertValueFailed . into ( ) ) ;
5157 }
5258 }
53- Err ( CommitError :: Mysql ( err) ) => {
59+ CommitError :: Mysql ( err) => {
5460 return Err ( into_error ( err) ) ;
5561 }
56- Err ( CommitError :: Internal ( err) ) => {
62+ CommitError :: Internal ( err) => {
5763 return Err ( err) ;
5864 }
5965 }
@@ -318,13 +324,7 @@ impl MysqlStore {
318324 }
319325 }
320326
321- match trx. commit ( ) . await {
322- Ok ( _) => Ok ( result) ,
323- Err ( err) => {
324- let _ = conn. query_drop ( "ROLLBACK;" ) . await ;
325- Err ( err. into ( ) )
326- }
327- }
327+ trx. commit ( ) . await . map ( |_| result) . map_err ( Into :: into)
328328 }
329329
330330 pub ( crate ) async fn purge_store ( & self ) -> trc:: Result < ( ) > {
0 commit comments