fix: Optimize knowledge domain error codes to expose previous errors during retries (#185)
This commit is contained in:
parent
db7c95885d
commit
403128b5d3
|
|
@ -438,7 +438,7 @@ func (k *KnowledgeApplicationService) GetDocumentProgress(ctx context.Context, r
|
||||||
DocumentID: domainResp.ProgressList[i].ID,
|
DocumentID: domainResp.ProgressList[i].ID,
|
||||||
Progress: int32(domainResp.ProgressList[i].Progress),
|
Progress: int32(domainResp.ProgressList[i].Progress),
|
||||||
Status: convertDocumentStatus2Model(domainResp.ProgressList[i].Status),
|
Status: convertDocumentStatus2Model(domainResp.ProgressList[i].Status),
|
||||||
StatusDescript: ptr.Of(convertDocumentStatus2Model(domainResp.ProgressList[i].Status).String()),
|
StatusDescript: &domainResp.ProgressList[i].StatusMsg,
|
||||||
DocumentName: domainResp.ProgressList[i].Name,
|
DocumentName: domainResp.ProgressList[i].Name,
|
||||||
RemainingTime: &domainResp.ProgressList[i].RemainingSec,
|
RemainingTime: &domainResp.ProgressList[i].RemainingSec,
|
||||||
Size: &domainResp.ProgressList[i].Size,
|
Size: &domainResp.ProgressList[i].Size,
|
||||||
|
|
|
||||||
|
|
@ -58,9 +58,7 @@ func (dao *KnowledgeDocumentSliceDAO) BatchCreate(ctx context.Context, slices []
|
||||||
func (dao *KnowledgeDocumentSliceDAO) BatchSetStatus(ctx context.Context, ids []int64, status int32, reason string) error {
|
func (dao *KnowledgeDocumentSliceDAO) BatchSetStatus(ctx context.Context, ids []int64, status int32, reason string) error {
|
||||||
s := dao.Query.KnowledgeDocumentSlice
|
s := dao.Query.KnowledgeDocumentSlice
|
||||||
updates := map[string]any{s.Status.ColumnName().String(): status}
|
updates := map[string]any{s.Status.ColumnName().String(): status}
|
||||||
if reason != "" {
|
updates[s.FailReason.ColumnName().String()] = reason
|
||||||
updates[s.FailReason.ColumnName().String()] = reason
|
|
||||||
}
|
|
||||||
updates[s.UpdatedAt.ColumnName().String()] = time.Now().UnixMilli()
|
updates[s.UpdatedAt.ColumnName().String()] = time.Now().UnixMilli()
|
||||||
_, err := s.WithContext(ctx).Where(s.ID.In(ids...)).Updates(updates)
|
_, err := s.WithContext(ctx).Where(s.ID.In(ids...)).Updates(updates)
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -166,11 +166,22 @@ func (k *knowledgeSVC) indexDocument(ctx context.Context, event *entity.Event) (
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
var errMsg string
|
||||||
var statusError errorx.StatusError
|
var statusError errorx.StatusError
|
||||||
if errors.As(err, &statusError) && statusError.Code() == errno.ErrKnowledgeNonRetryableCode {
|
var status int32
|
||||||
if setStatusErr := k.documentRepo.SetStatus(ctx, event.Document.ID, int32(entity.DocumentStatusFailed), err.Error()); setStatusErr != nil {
|
if errors.As(err, &statusError) {
|
||||||
logs.CtxErrorf(ctx, "[indexDocument] set document status failed, err: %v", setStatusErr)
|
errMsg = errorx.ErrorWithoutStack(statusError)
|
||||||
|
if statusError.Code() == errno.ErrKnowledgeNonRetryableCode {
|
||||||
|
status = int32(entity.DocumentStatusFailed)
|
||||||
|
} else {
|
||||||
|
status = int32(entity.DocumentStatusChunking)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
errMsg = err.Error()
|
||||||
|
status = int32(entity.DocumentStatusChunking)
|
||||||
|
}
|
||||||
|
if setStatusErr := k.documentRepo.SetStatus(ctx, event.Document.ID, status, errMsg); setStatusErr != nil {
|
||||||
|
logs.CtxErrorf(ctx, "[indexDocument] set document status failed, err: %v", setStatusErr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
|
||||||
|
|
@ -545,6 +545,12 @@ func (k *knowledgeSVC) MGetDocumentProgress(ctx context.Context, request *MGetDo
|
||||||
if documents[i].Status == int32(entity.DocumentStatusEnable) || documents[i].Status == int32(entity.DocumentStatusFailed) {
|
if documents[i].Status == int32(entity.DocumentStatusEnable) || documents[i].Status == int32(entity.DocumentStatusFailed) {
|
||||||
item.Progress = progressbar.ProcessDone
|
item.Progress = progressbar.ProcessDone
|
||||||
} else {
|
} else {
|
||||||
|
if documents[i].FailReason != "" {
|
||||||
|
item.StatusMsg = documents[i].FailReason
|
||||||
|
item.Status = entity.DocumentStatusFailed
|
||||||
|
progresslist = append(progresslist, &item)
|
||||||
|
continue
|
||||||
|
}
|
||||||
err = k.getProgressFromCache(ctx, &item)
|
err = k.getProgressFromCache(ctx, &item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logs.CtxErrorf(ctx, "get progress from cache failed, err: %v", err)
|
logs.CtxErrorf(ctx, "get progress from cache failed, err: %v", err)
|
||||||
|
|
@ -564,8 +570,9 @@ func (k *knowledgeSVC) getProgressFromCache(ctx context.Context, documentProgres
|
||||||
documentProgress.Progress = int(percent)
|
documentProgress.Progress = int(percent)
|
||||||
documentProgress.RemainingSec = int64(remainSec)
|
documentProgress.RemainingSec = int64(remainSec)
|
||||||
if len(errMsg) != 0 {
|
if len(errMsg) != 0 {
|
||||||
documentProgress.Progress = 0
|
documentProgress.Status = entity.DocumentStatusFailed
|
||||||
documentProgress.Status = entity.DocumentStatusChunking
|
documentProgress.StatusMsg = errMsg
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -1276,6 +1283,16 @@ func (k *knowledgeSVC) fromModelDocument(ctx context.Context, document *model.Kn
|
||||||
documentEntity.TableInfo.Columns = append(documentEntity.TableInfo.Columns, document.TableInfo.Columns[i])
|
documentEntity.TableInfo.Columns = append(documentEntity.TableInfo.Columns, document.TableInfo.Columns[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
switch document.Status {
|
||||||
|
case int32(entity.DocumentStatusChunking), int32(entity.DocumentStatusInit), int32(entity.DocumentStatusUploading):
|
||||||
|
if document.FailReason != "" {
|
||||||
|
documentEntity.Status = entity.DocumentStatusFailed
|
||||||
|
documentEntity.StatusMsg = document.FailReason
|
||||||
|
}
|
||||||
|
case int32(entity.DocumentStatusFailed):
|
||||||
|
documentEntity.StatusMsg = document.FailReason
|
||||||
|
default:
|
||||||
|
}
|
||||||
if len(document.URI) != 0 {
|
if len(document.URI) != 0 {
|
||||||
objUrl, err := k.storage.GetObjectUrl(ctx, document.URI)
|
objUrl, err := k.storage.GetObjectUrl(ctx, document.URI)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue