go-common/app/job/main/passport-game-data/service/batch_query.go

107 lines
2.5 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
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
}