You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.5 KiB
106 lines
2.5 KiB
package service |
|
|
|
import ( |
|
"context" |
|
|
|
"go-common/app/job/main/passport-game-data/model" |
|
"go-common/library/log" |
|
) |
|
|
|
func (s *Service) batchQueryLocalNonMiss(c context.Context, mids []int64, batchSize, batchMissRetryCount int) (res []*model.OriginAsoAccount) { |
|
as, miss := s.batchQueryLocalByMid(c, mids, batchSize) |
|
if len(miss) == 0 { |
|
return as |
|
} |
|
|
|
res = as |
|
for i := 0; i < batchMissRetryCount; i++ { |
|
log.Info("try for the %dth retry, miss mids: %v", miss) |
|
as, miss = s.batchQueryLocalByMid(c, miss, batchSize) |
|
|
|
res = append(res, as...) |
|
|
|
if len(miss) == 0 { |
|
return |
|
} |
|
|
|
if i == batchMissRetryCount-1 { |
|
log.Error("still miss those mids: %v after %d tries", miss, batchMissRetryCount) |
|
} |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) batchQueryLocalByMid(c context.Context, mids []int64, batchSize int) (res []*model.OriginAsoAccount, miss []int64) { |
|
if len(mids) == 0 { |
|
return |
|
} |
|
res = make([]*model.OriginAsoAccount, 0) |
|
miss = make([]int64, 0) |
|
bc := len(mids)/batchSize + 1 |
|
for i := 0; i < bc; i++ { |
|
start := i * batchSize |
|
end := (i + 1) * batchSize |
|
if end > len(mids) { |
|
end = len(mids) |
|
} |
|
partMids := mids[start:end] |
|
as, err := s.d.AsoAccountsLocal(c, partMids) |
|
if err != nil { |
|
miss = append(miss, partMids...) |
|
continue |
|
} |
|
res = append(res, as...) |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) batchQueryCloudNonMiss(c context.Context, mids []int64, batchSize, batchMissRetryCount int) (res []*model.AsoAccount) { |
|
if len(mids) == 0 { |
|
return |
|
} |
|
as, miss := s.batchQueryCloudByMid(c, mids, batchSize) |
|
if len(miss) == 0 { |
|
return as |
|
} |
|
|
|
res = as |
|
for i := 0; i < batchMissRetryCount; i++ { |
|
log.Info("try for the %dth times, miss mids: %v", i, miss) |
|
as, miss = s.batchQueryCloudByMid(c, miss, batchSize) |
|
|
|
res = append(res, as...) |
|
if len(miss) == 0 { |
|
return |
|
} |
|
|
|
if i == batchMissRetryCount-1 { |
|
log.Error("still miss those mids: %v after %d tries", miss, batchMissRetryCount) |
|
} |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) batchQueryCloudByMid(c context.Context, mids []int64, batchSize int) (res []*model.AsoAccount, miss []int64) { |
|
if len(mids) == 0 { |
|
return |
|
} |
|
res = make([]*model.AsoAccount, 0) |
|
miss = make([]int64, 0) |
|
bc := len(mids)/batchSize + 1 |
|
for i := 0; i < bc; i++ { |
|
start := i * batchSize |
|
end := (i + 1) * batchSize |
|
if end > len(mids) { |
|
end = len(mids) |
|
} |
|
partMids := mids[start:end] |
|
as, err := s.d.AsoAccountsCloud(c, partMids) |
|
if err != nil { |
|
miss = append(miss, partMids...) |
|
continue |
|
} |
|
res = append(res, as...) |
|
} |
|
return |
|
}
|
|
|