123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- package cms
- import (
- "context"
- "go-common/app/interface/main/tv/model"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- // LoadSnsAuthMap loads a batch of arc meta
- func (d *Dao) LoadSnsAuthMap(ctx context.Context, sids []int64) (resMetas map[int64]*model.SnAuth, err error) {
- var (
- cachedMetas map[int64]*model.SnAuth // cache hit seasons
- missedMetas map[int64]*model.SnAuth // cache miss seasons, pick from DB
- missed []int64 // cache miss seasons
- addCache = true // whether we need to fill DB data in MC
- )
- resMetas = make(map[int64]*model.SnAuth) // merge info from MC and from DB
- if cachedMetas, missed, err = d.snAuthCache(ctx, sids); err != nil {
- log.Error("LoadSnsAuthMap snAuthCache Sids:%v, Error:%v", sids, err)
- err = nil
- addCache = false // mc error, we don't add
- }
- if len(missed) > 0 {
- if missedMetas, err = d.SnsAuthDB(ctx, missed); err != nil {
- log.Error("LoadSnsAuthMap SnsAuthDB Sids:%v, Error:%v", missed, err)
- return
- }
- }
- // merge info from DB and the info from MC
- for sid, v := range cachedMetas {
- resMetas[sid] = v
- }
- for sid, v := range missedMetas {
- resMetas[sid] = v
- }
- if addCache && len(missedMetas) > 0 {
- for _, snAuth := range missedMetas {
- d.addCache(func() {
- d.AddSnAuthCache(ctx, snAuth)
- })
- }
- }
- return
- }
- // LoadEpsAuthMap loads a batch of arc meta
- func (d *Dao) LoadEpsAuthMap(ctx context.Context, epids []int64) (resMetas map[int64]*model.EpAuth, err error) {
- var (
- cachedMetas map[int64]*model.EpAuth // cache hit seasons
- missedMetas map[int64]*model.EpAuth // cache miss seasons, pick from DB
- missed []int64 // cache miss seasons
- addCache = true // whether we need to fill DB data in MC
- )
- resMetas = make(map[int64]*model.EpAuth) // merge info from MC and from DB
- if cachedMetas, missed, err = d.epAuthCache(ctx, epids); err != nil {
- log.Error("LoadEpsAuthMap epAuthCache epids:%v, Error:%v", epids, err)
- err = nil
- addCache = false // mc error, we don't add
- }
- if len(missed) > 0 {
- if missedMetas, err = d.EpsAuthDB(ctx, missed); err != nil {
- log.Error("LoadEpsAuthMap EpsAuthDB epids:%v, Error:%v", missed, err)
- return
- }
- }
- // merge info from DB and the info from MC
- for sid, v := range cachedMetas {
- resMetas[sid] = v
- }
- for sid, v := range missedMetas {
- resMetas[sid] = v
- }
- if addCache && len(missedMetas) > 0 {
- for _, epAuth := range missedMetas {
- d.addCache(func() {
- d.AddEpAuthCache(ctx, epAuth)
- })
- }
- }
- return
- }
- // LoadSnsCMSMap loads season cms meta data from cache and db
- func (d *Dao) LoadSnsCMSMap(ctx context.Context, sids []int64) (resMetas map[int64]*model.SeasonCMS, err error) {
- var (
- cachedMetas, missedMetas map[int64]*model.SeasonCMS // cache hit seasons
- missed []int64 // cache miss seasons
- addCache = true // whether we need to fill DB data in MC
- )
- resMetas = make(map[int64]*model.SeasonCMS)
- // pick up the information for these season ids
- if cachedMetas, missed, err = d.SeasonsMetaCache(ctx, sids); err != nil {
- log.Error("LoadSnsCMS SeasonMetaCache Sids:%v, Error:%v", sids, err)
- err = nil
- addCache = false // mc error, we don't add
- }
- if len(missed) > 0 {
- if missedMetas, err = d.SeasonMetas(ctx, missed); err != nil {
- log.Error("LoadSnsCMS SeasonMetas Sids:%v, Error:%v", sids, err)
- return
- }
- }
- log.Info("Set Sids [%d], HitMetas [%d], MissedMetas [%d][%d] Data in MC", len(sids), len(cachedMetas), len(missed), len(missedMetas))
- // merge info from DB and the info from MC
- for sid, v := range cachedMetas {
- resMetas[sid] = v
- }
- for sid, v := range missedMetas {
- resMetas[sid] = v
- }
- // async Reset the DB data in MC for next time
- if addCache && len(missedMetas) > 0 {
- for _, art := range missedMetas {
- d.addCache(func() {
- d.AddSeasonMetaCache(ctx, art)
- })
- }
- }
- return
- }
- // LoadSnsCMS loads the seasons meta cms data from cache, for missed ones, pick them from the DB
- func (d *Dao) LoadSnsCMS(ctx context.Context, sids []int64) (seasons []*model.SeasonCMS, newestEpids []int64, err error) {
- var (
- resMetas map[int64]*model.SeasonCMS // merge info from MC and from DB
- )
- if resMetas, err = d.LoadSnsCMSMap(ctx, sids); err != nil {
- log.Error("LoadSnsCMS Sids %v, Err %v", sids, err)
- return
- }
- // re-arrange the info, according to the order got from Redis
- for _, v := range sids {
- if SnCMS, ok := resMetas[v]; !ok {
- log.Error("LoadSnsCMS Miss Info for Sid: %d", v)
- continue
- } else {
- seasons = append(seasons, SnCMS)
- newestEpids = append(newestEpids, SnCMS.NewestEPID)
- }
- }
- return
- }
- // LoadSnCMS loads the sn meta cms data from cache, for missed ones, pick them from the DB
- func (d *Dao) LoadSnCMS(ctx context.Context, sid int64) (sn *model.SeasonCMS, err error) {
- if sn, err = d.GetSnCMSCache(ctx, sid); err != nil {
- log.Error("LoadSnsCMS Get Season[%d] from CMS Error (%v)", sid, err) // cache set/get error
- return
- }
- if sn != nil { // if cache hit, return
- return
- }
- if sn, err = d.SeasonCMS(ctx, sid); err != nil {
- log.Error("[LoadSnCMS] SeasonCMS SeasonID ERROR (%d) (%v)", sid, err)
- return
- } else if sn == nil {
- err = ecode.NothingFound
- return
- }
- d.addCache(func() {
- d.AddSeasonMetaCache(ctx, sn)
- })
- return
- }
- // LoadEpCMS loads the sn meta cms data from cache, for missed ones, pick them from the DB
- func (d *Dao) LoadEpCMS(ctx context.Context, epid int64) (ep *model.EpCMS, err error) {
- if ep, err = d.GetEpCMSCache(ctx, epid); err != nil {
- log.Error("LoadEpCMS Get EP[%d] from CMS Error (%v)", epid, err) // cache set/get error
- return
- } else if ep == nil {
- if ep, err = d.EpCMS(ctx, epid); err != nil {
- log.Error("[LoadEpCMS] EpCMS Epid ERROR (%d) (%v)", epid, err)
- return
- } else if ep == nil {
- err = ecode.NothingFound
- return
- }
- }
- d.addCache(func() {
- d.SetEpCMSCache(ctx, ep)
- })
- return
- }
- // LoadEpsCMS picks ep meta information from Cache & DB
- func (d *Dao) LoadEpsCMS(ctx context.Context, epids []int64) (resMetas map[int64]*model.EpCMS, err error) {
- var (
- cachedMetas, missedMetas map[int64]*model.EpCMS
- missed []int64
- addCache = true
- )
- resMetas = make(map[int64]*model.EpCMS)
- // pick up the information for these season ids
- if cachedMetas, missed, err = d.EpMetaCache(ctx, epids); err != nil {
- log.Error("loadEpCMS EpMetaCache Sids:%v, Error:%v", epids, err)
- err = nil
- addCache = false // mc error, we don't add
- }
- if len(missed) > 0 {
- if missedMetas, err = d.EpMetas(ctx, missed); err != nil {
- log.Error("loadEpCMS EpMetas Sids:%v, Error:%v", epids, err)
- return
- }
- }
- // merge info from DB and the info from MC
- resMetas = make(map[int64]*model.EpCMS, len(epids))
- for sid, v := range cachedMetas {
- resMetas[sid] = v
- }
- for sid, v := range missedMetas {
- resMetas[sid] = v
- }
- log.Info("Combine Info for %d Epids, Origin Length %d", len(epids), len(resMetas))
- if addCache && len(missedMetas) > 0 { // async Reset the DB data in MC for next time
- log.Info("Set MissedMetas %d Data in MC", missedMetas)
- for _, art := range missedMetas {
- d.addCache(func() {
- d.AddEpMetaCache(ctx, art)
- })
- }
- }
- return
- }
|