123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- 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
- }
|