go-common/app/job/main/archive-shjd/service/cache.go

127 lines
3.0 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package service
import (
"context"
"strconv"
"go-common/app/job/main/archive-shjd/model"
arcmdl "go-common/app/service/main/archive/model/archive"
"go-common/library/ecode"
"go-common/library/log"
"github.com/pkg/errors"
)
// UpdateCache is
func (s *Service) UpdateCache(old *model.Archive, nw *model.Archive, action string) (err error) {
defer func() {
if err == nil {
s.notifyPub.Send(context.Background(), strconv.FormatInt(nw.AID, 10), &model.Notify{Table: _tableArchive, Nw: nw, Old: old, Action: action})
return
}
// retry
item := &model.RetryItem{
Old: old,
Nw: nw,
Tp: model.TypeForUpdateArchive,
Action: action,
}
if err1 := s.PushItem(context.TODO(), item); err1 != nil {
log.Error("s.PushItem(%+v) error(%+v)", item, err1)
return
}
}()
args := &arcmdl.ArgCache2{}
args.Aid = nw.AID
args.Tp = arcmdl.CacheUpdate
if old == nil {
// insert
if nw.State >= 0 {
args.Tp = arcmdl.CacheAdd
}
} else {
if nw.State >= 0 {
args.Tp = arcmdl.CacheAdd
} else {
args.Tp = arcmdl.CacheDelete
}
if nw.Mid != old.Mid {
args.OldMid = old.Mid
}
if old.TypeID != nw.TypeID {
fieldAgs := &arcmdl.ArgFieldCache2{Aid: nw.AID, TypeID: nw.TypeID, OldTypeID: old.TypeID}
for cluster, arc := range s.arcRPCs {
if err = arc.ArcFieldCache2(context.TODO(), fieldAgs); err != nil {
log.Error("s.arcRPC.ArcFieldCache2(%s, %+v) error(%+v)", cluster, fieldAgs, err)
return
}
}
}
}
for cluster, arc := range s.arcRPCs {
if err = arc.ArcCache2(context.TODO(), args); err != nil {
log.Error("s.arcRPC.ArcCache2(%s,%+v) error(%v)", cluster, args, err)
return
}
}
return
}
// UpdateVideoCache is
func (s *Service) UpdateVideoCache(aid, cid int64) (err error) {
defer func() {
if err == nil {
return
}
// retry
item := &model.RetryItem{
AID: aid,
CID: cid,
Tp: model.TypeForUpdateVideo,
}
if err1 := s.PushItem(context.TODO(), item); err1 != nil {
log.Error("s.PushItem(%+v) error(%+v)", item, err1)
return
}
}()
for cluster, arc := range s.arcRPCs {
if err = arc.UpVideo2(context.TODO(), &arcmdl.ArgVideo2{Aid: aid, Cid: cid}); err != nil {
if ecode.Cause(err).Equal(ecode.NothingFound) {
err = nil
return
}
err = errors.Wrapf(err, "s.arcRPC.UpVideo2 cluster(%s)", cluster)
}
}
return
}
// DelteVideoCache del video cache
func (s *Service) DelteVideoCache(aid, cid int64) (err error) {
defer func() {
if err == nil {
return
}
// retry
item := &model.RetryItem{
AID: aid,
CID: cid,
Tp: model.TypeForDelVideo,
}
if err1 := s.PushItem(context.TODO(), item); err1 != nil {
log.Error("s.PushItem(%+v) error(%+v)", item, err1)
return
}
}()
for cluster, arc := range s.arcRPCs {
if err = arc.DelVideo2(context.TODO(), &arcmdl.ArgVideo2{Aid: aid, Cid: cid}); err != nil {
if ecode.Cause(err).Equal(ecode.NothingFound) {
err = nil
return
}
err = errors.Wrapf(err, "s.arcRPC.VdelVideo2 cluster(%s)", cluster)
}
}
return
}