我正在尝试在 mongodb 中构建事务,其重试功能类似于 nodejs 等其他驱动程序。这是我当前的实现
if session, err = client.StartSession(); err != nil {
return err
}
if err = session.StartTransaction(); err != nil {
return err
}
if err = mongo.WithSession(ctx, session, func(sc mongo.SessionContext) error {
if result, err = collection.UpdateOne(sc, bson.M{"_id": id}, update); err != nil {
_ = session.AbortTransaction(sc)
return err
}
if result.MatchedCount != 1 || result.ModifiedCount != 1 {
_ = session.AbortTransaction(sc)
return error.New("no match")
}
if err = session.CommitTransaction(sc); err != nil {
_ = session.AbortTransaction(sc)
}
return nil
}); err != nil {
// what needs to be handled here?
// If its a particular error type can i retry transaction here?
// should i abort transaction here?
return err
}
session.EndSession(ctx)
如果它是一个特定的错误类型,我该如何重试事务?
此外,我们是否需要在每次提交失败或返回错误时自动取消事务时中止事务?
我找不到很多关于如何实施这项权利的例子