fix: Optimize the GetDraftIntelligenceList function and reduce the use of goroutine (#171)

This commit is contained in:
liuyunchao-1998 2025-07-28 20:45:10 +08:00 committed by GitHub
parent 2ee3fa68ab
commit db7c95885d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 60 additions and 34 deletions

View File

@ -76,26 +76,38 @@ func (s *SearchApplicationService) GetDraftIntelligenceList(ctx context.Context,
intelligenceDataList := make([]*intelligence.IntelligenceData, len(searchResp.Data)) intelligenceDataList := make([]*intelligence.IntelligenceData, len(searchResp.Data))
logs.CtxDebugf(ctx, "[GetDraftIntelligenceList] searchResp.Data: %v", conv.DebugJsonToStr(searchResp.Data)) logs.CtxDebugf(ctx, "[GetDraftIntelligenceList] searchResp.Data: %v", conv.DebugJsonToStr(searchResp.Data))
if len(searchResp.Data) > 1 {
for idx := range searchResp.Data[1:] {
index := idx + 1
data := searchResp.Data[index]
tasks.Go(func() error {
info, err := s.packIntelligenceData(ctx, data)
if err != nil {
logs.CtxErrorf(ctx, "[packIntelligenceData] failed id %v, type %d , name %s, err: %v", data.ID, data.Type, data.GetName(), err)
return err
}
for idx := range searchResp.Data { lock.Lock()
data := searchResp.Data[idx] defer lock.Unlock()
index := idx intelligenceDataList[index] = info
tasks.Go(func() error { return nil
info, err := s.packIntelligenceData(ctx, data) })
if err != nil { }
logs.CtxErrorf(ctx, "[packIntelligenceData] failed id %v, type %d , name %s, err: %v", data.ID, data.Type, data.GetName(), err) }
if len(searchResp.Data) != 0 {
return err info, err := s.packIntelligenceData(ctx, searchResp.Data[0])
} if err != nil {
logs.CtxErrorf(ctx, "[packIntelligenceData] failed id %v, type %d , name %s, err: %v", searchResp.Data[0].ID, searchResp.Data[0].Type, searchResp.Data[0].GetName(), err)
lock.Lock() return nil, err
defer lock.Unlock() }
intelligenceDataList[index] = info lock.Lock()
return nil intelligenceDataList[0] = info
}) lock.Unlock()
}
err = tasks.Wait()
if err != nil {
return nil, err
} }
_ = tasks.Wait()
filterDataList := make([]*intelligence.IntelligenceData, 0) filterDataList := make([]*intelligence.IntelligenceData, 0)
for _, data := range intelligenceDataList { for _, data := range intelligenceDataList {
if data != nil { if data != nil {

View File

@ -86,25 +86,39 @@ func (s *SearchApplicationService) LibraryResourceList(ctx context.Context, req
lock := sync.Mutex{} lock := sync.Mutex{}
tasks := taskgroup.NewUninterruptibleTaskGroup(ctx, 10) tasks := taskgroup.NewUninterruptibleTaskGroup(ctx, 10)
resources := make([]*common.ResourceInfo, len(searchResp.Data)) resources := make([]*common.ResourceInfo, len(searchResp.Data))
for idx := range searchResp.Data { if len(searchResp.Data) > 1 {
v := searchResp.Data[idx] for idx := range searchResp.Data[1:] {
index := idx index := idx + 1
tasks.Go(func() error { v := searchResp.Data[index]
ri, err := s.packResource(ctx, v) tasks.Go(func() error {
if err != nil { ri, err := s.packResource(ctx, v)
logs.CtxErrorf(ctx, "[LibraryResourceList] packResource failed, will ignore resID: %d, Name : %s, resType: %d, err: %v", if err != nil {
v.ResID, v.GetName(), v.ResType, err) logs.CtxErrorf(ctx, "[LibraryResourceList] packResource failed, will ignore resID: %d, Name : %s, resType: %d, err: %v",
return err v.ResID, v.GetName(), v.ResType, err)
} return err
}
lock.Lock() lock.Lock()
defer lock.Unlock() defer lock.Unlock()
resources[index] = ri resources[index] = ri
return nil return nil
}) })
}
}
if len(searchResp.Data) != 0 {
ri, err := s.packResource(ctx, searchResp.Data[0])
if err != nil {
return nil, err
}
lock.Lock()
resources[0] = ri
lock.Unlock()
}
err = tasks.Wait()
if err != nil {
return nil, err
} }
_ = tasks.Wait()
filterResource := make([]*common.ResourceInfo, 0) filterResource := make([]*common.ResourceInfo, 0)
for _, res := range resources { for _, res := range resources {
if res == nil { if res == nil {