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

73 lines
1.5 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package service
import (
"bufio"
"context"
"io"
"os"
"strconv"
"time"
"go-common/app/job/main/passport-game-data/conf"
"go-common/app/job/main/passport-game-data/dao"
"go-common/library/log"
)
// NewCompareOnly new a service for compare only.
func NewCompareOnly(c *conf.Config) (s *Service) {
s = &Service{
c: c,
d: dao.New(c),
l2cC: newCompareConfigFrom(c.Compare.Local2Cloud),
}
return
}
// CompareFromMidListFile load mid list from file and compare.
func (s *Service) CompareFromMidListFile(c context.Context, fn string) (err error) {
var f *os.File
if f, err = os.Open(fn); err != nil {
log.Error("failed to open file %s, error(%v)", fn, err)
return
}
defer f.Close()
cc := s.l2cC
rd := bufio.NewReader(f)
skippedCount := 0
var (
mid int64
mids = make([]int64, 0)
line []byte
isPrefix bool
)
for {
line, isPrefix, err = rd.ReadLine()
if isPrefix || err != nil || err == io.EOF {
break
}
mid, err = strconv.ParseInt(string(line), 10, 64)
if err != nil {
log.Error("failed to parse mid, strconv.ParseInt(%s, 10 ,64) error(%v), skip", line, err)
skippedCount++
continue
}
mids = append(mids, mid)
}
log.Info("mid list len: %d, total skipped count: %d", len(mids), skippedCount)
if len(mids) == 0 {
return
}
for {
time.Sleep(cc.LoopDuration)
if err = s.local2CloudCompare(context.TODO(), s.batchQueryLocalNonMiss(context.TODO(), mids, cc.BatchSize, cc.BatchMissRetryCount)); err == nil {
break
}
log.Error("failed to compare mids %v, retrying", mids)
}
return
}