This commit is contained in:
@@ -5,12 +5,14 @@ import (
|
||||
stderrors "errors"
|
||||
"strconv"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/break/junhong_cmp_fiber/pkg/auditcontext"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/auditfailure"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
||||
pkgerrors "github.com/break/junhong_cmp_fiber/pkg/errors"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/logger"
|
||||
)
|
||||
|
||||
// RecordFailure 在业务回滚后使用独立短事务记录失败或拒绝事实。
|
||||
@@ -48,15 +50,38 @@ func fillFailureInput(input *AppendInput, originalErr error) {
|
||||
}
|
||||
|
||||
func recordFailureWriteError(ctx context.Context, input AppendInput, err error) {
|
||||
recordSecondaryWriteFailure(ctx, input.ActionCode, primaryResourceKey(input), input.ErrorCode, err)
|
||||
}
|
||||
|
||||
func recordBusinessAppendFailure(ctx context.Context, input AppendInput, err error) {
|
||||
recordBusinessWriteFailure(ctx, input.ActionCode, primaryResourceKey(input), err)
|
||||
}
|
||||
|
||||
func recordBusinessWriteFailure(ctx context.Context, actionCode, resourceKey string, err error) {
|
||||
linkage := auditcontext.From(ctx)
|
||||
logger.GetAppLogger().Error(
|
||||
"业务审计写入失败,已降级",
|
||||
zap.String("action", actionCode),
|
||||
zap.String("resource_key", resourceKey),
|
||||
zap.String("request_id", linkage.RequestID),
|
||||
zap.String("correlation_id", linkage.CorrelationID),
|
||||
zap.Error(err),
|
||||
)
|
||||
recordSecondaryWriteFailure(ctx, actionCode, resourceKey, "", err)
|
||||
}
|
||||
|
||||
func recordSecondaryWriteFailure(ctx context.Context, actionCode, resourceKey, originalErrorCode string, err error) {
|
||||
linkage := auditcontext.From(ctx)
|
||||
resourceKey := ""
|
||||
for _, resource := range input.Resources {
|
||||
if resource.Relation == constants.AuditResourceRelationPrimary {
|
||||
resourceKey = resource.Key
|
||||
break
|
||||
}
|
||||
}
|
||||
auditfailure.RecordSecondaryWriteFailure(
|
||||
input.ActionCode, resourceKey, linkage.RequestID, linkage.CorrelationID, input.ErrorCode, err,
|
||||
actionCode, resourceKey, linkage.RequestID, linkage.CorrelationID, originalErrorCode, err,
|
||||
)
|
||||
}
|
||||
|
||||
func primaryResourceKey(input AppendInput) string {
|
||||
for _, resource := range input.Resources {
|
||||
if resource.Relation == constants.AuditResourceRelationPrimary {
|
||||
return resource.Key
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user