Retry DB transactions on badger.ErrConflict (#114)

* Log HTTP 500 errors in more detail

* Log errors in storeView and storeUpdate

* Retry on badger.ErrConflict
This commit is contained in:
Nikolay Edigaryev
2023-08-15 15:18:47 +04:00
committed by GitHub
parent 9f4cd5bae7
commit 036eb954be
6 changed files with 47 additions and 11 deletions
+6 -2
View File
@@ -13,6 +13,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/go-openapi/runtime/middleware"
"github.com/penglongli/gin-metrics/ginmetrics"
"go.uber.org/zap"
"google.golang.org/grpc/metadata"
"net/http"
"strings"
@@ -240,16 +241,17 @@ func (controller *Controller) authorizeGRPC(ctx context.Context, scopes ...v1pkg
type storeTransactionFunc func(operation func(txn storepkg.Transaction) error) error
func (controller *Controller) storeView(view func(txn storepkg.Transaction) responder.Responder) responder.Responder {
return adaptResponderToStoreOperation(controller.store.View, view)
return adaptResponderToStoreOperation(controller.logger, controller.store.View, view)
}
func (controller *Controller) storeUpdate(
update func(txn storepkg.Transaction) responder.Responder,
) responder.Responder {
return adaptResponderToStoreOperation(controller.store.Update, update)
return adaptResponderToStoreOperation(controller.logger, controller.store.Update, update)
}
func adaptResponderToStoreOperation(
logger *zap.SugaredLogger,
storeOperation storeTransactionFunc,
responderOperation func(txn storepkg.Transaction) responder.Responder,
) responder.Responder {
@@ -260,6 +262,8 @@ func adaptResponderToStoreOperation(
return nil
}); err != nil {
logger.Errorf("encountered an error during store operation: %v", err)
return responder.Code(http.StatusInternalServerError)
}