Skip to content

Commit 9477f26

Browse files
committed
Fix: MySQL Driver error: Transactions couldn't be nested (#1271)
1 parent c889148 commit 9477f26

1 file changed

Lines changed: 12 additions & 12 deletions

File tree

crates/store/src/backend/mysql/write.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)