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.
72 lines
1.6 KiB
72 lines
1.6 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"encoding/json" |
|
"time" |
|
|
|
"go-common/app/job/main/passport-game-cloud/model" |
|
"go-common/library/log" |
|
) |
|
|
|
const ( |
|
_memberTableUpdateDuration = time.Second * 1 |
|
) |
|
|
|
func (s *Service) processMemberInfo(bmsg *model.BMsg) { |
|
n := new(model.Info) |
|
if err := json.Unmarshal(bmsg.New, n); err != nil { |
|
log.Error("failed to parse binlog new, json.Unmarshal(%s) error(%v)", string(bmsg.New), err) |
|
return |
|
} |
|
s.memberInterval.Prom(context.TODO(), bmsg.MTS) |
|
switch bmsg.Action { |
|
case "insert": |
|
s.addMemberInfo(context.TODO(), n) |
|
s.delInfoCache(context.TODO(), n.Mid) |
|
case "update": |
|
old := new(model.Info) |
|
if err := json.Unmarshal(bmsg.Old, old); err != nil { |
|
log.Error("failed to parse binlog old, json.Unmarshal(%s) error(%v)", string(bmsg.Old), err) |
|
return |
|
} |
|
if n.Equals(old) { |
|
return |
|
} |
|
s.addMemberInfo(context.TODO(), n) |
|
s.delInfoCache(context.TODO(), n.Mid) |
|
case "delete": |
|
s.delMemberInfo(context.TODO(), n.Mid) |
|
s.delInfoCache(context.TODO(), n.Mid) |
|
} |
|
} |
|
|
|
func (s *Service) addMemberInfo(c context.Context, info *model.Info) (err error) { |
|
for { |
|
if _, err = s.d.AddMemberInfo(c, info); err == nil { |
|
break |
|
} |
|
time.Sleep(_memberTableUpdateDuration) |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) delMemberInfo(c context.Context, mid int64) (err error) { |
|
for { |
|
if _, err = s.d.DelMemberInfo(c, mid); err == nil { |
|
break |
|
} |
|
time.Sleep(_memberTableUpdateDuration) |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) delInfoCache(c context.Context, mid int64) (err error) { |
|
for i := 0; i < _accountCacheRetryCount; i++ { |
|
if err = s.d.DelInfoCache(c, mid); err == nil { |
|
break |
|
} |
|
time.Sleep(_accountCacheRetryDuration) |
|
} |
|
return |
|
}
|
|
|