mirror of
https://github.com/stalwartlabs/mail-server.git
synced 2025-09-08 13:04:26 +08:00
Fix: MySQL Driver error: Transactions couldn't be nested (#1271)
This commit is contained in:
parent
c8891489cb
commit
9477f266a2
1 changed files with 12 additions and 12 deletions
|
@ -37,23 +37,29 @@ impl MysqlStore {
|
|||
let mut conn = self.conn_pool.get_conn().await.map_err(into_error)?;
|
||||
|
||||
loop {
|
||||
match self.write_trx(&mut conn, &batch).await {
|
||||
let err = match self.write_trx(&mut conn, &batch).await {
|
||||
Ok(result) => {
|
||||
return Ok(result);
|
||||
}
|
||||
Err(CommitError::Mysql(Error::Server(err)))
|
||||
Err(err) => err,
|
||||
};
|
||||
|
||||
let _ = conn.query_drop("ROLLBACK;").await;
|
||||
|
||||
match err {
|
||||
CommitError::Mysql(Error::Server(err))
|
||||
if [1062, 1213].contains(&err.code)
|
||||
&& retry_count < MAX_COMMIT_ATTEMPTS
|
||||
&& start.elapsed() < MAX_COMMIT_TIME => {}
|
||||
Err(CommitError::Retry) => {
|
||||
CommitError::Retry => {
|
||||
if retry_count > MAX_COMMIT_ATTEMPTS || start.elapsed() > MAX_COMMIT_TIME {
|
||||
return Err(trc::StoreEvent::AssertValueFailed.into());
|
||||
}
|
||||
}
|
||||
Err(CommitError::Mysql(err)) => {
|
||||
CommitError::Mysql(err) => {
|
||||
return Err(into_error(err));
|
||||
}
|
||||
Err(CommitError::Internal(err)) => {
|
||||
CommitError::Internal(err) => {
|
||||
return Err(err);
|
||||
}
|
||||
}
|
||||
|
@ -318,13 +324,7 @@ impl MysqlStore {
|
|||
}
|
||||
}
|
||||
|
||||
match trx.commit().await {
|
||||
Ok(_) => Ok(result),
|
||||
Err(err) => {
|
||||
let _ = conn.query_drop("ROLLBACK;").await;
|
||||
Err(err.into())
|
||||
}
|
||||
}
|
||||
trx.commit().await.map(|_| result).map_err(Into::into)
|
||||
}
|
||||
|
||||
pub(crate) async fn purge_store(&self) -> trc::Result<()> {
|
||||
|
|
Loading…
Add table
Reference in a new issue