pgc_load.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. package cms
  2. import (
  3. "context"
  4. "go-common/app/interface/main/tv/model"
  5. "go-common/library/ecode"
  6. "go-common/library/log"
  7. )
  8. // LoadSnsAuthMap loads a batch of arc meta
  9. func (d *Dao) LoadSnsAuthMap(ctx context.Context, sids []int64) (resMetas map[int64]*model.SnAuth, err error) {
  10. var (
  11. cachedMetas map[int64]*model.SnAuth // cache hit seasons
  12. missedMetas map[int64]*model.SnAuth // cache miss seasons, pick from DB
  13. missed []int64 // cache miss seasons
  14. addCache = true // whether we need to fill DB data in MC
  15. )
  16. resMetas = make(map[int64]*model.SnAuth) // merge info from MC and from DB
  17. if cachedMetas, missed, err = d.snAuthCache(ctx, sids); err != nil {
  18. log.Error("LoadSnsAuthMap snAuthCache Sids:%v, Error:%v", sids, err)
  19. err = nil
  20. addCache = false // mc error, we don't add
  21. }
  22. if len(missed) > 0 {
  23. if missedMetas, err = d.SnsAuthDB(ctx, missed); err != nil {
  24. log.Error("LoadSnsAuthMap SnsAuthDB Sids:%v, Error:%v", missed, err)
  25. return
  26. }
  27. }
  28. // merge info from DB and the info from MC
  29. for sid, v := range cachedMetas {
  30. resMetas[sid] = v
  31. }
  32. for sid, v := range missedMetas {
  33. resMetas[sid] = v
  34. }
  35. if addCache && len(missedMetas) > 0 {
  36. for _, snAuth := range missedMetas {
  37. d.addCache(func() {
  38. d.AddSnAuthCache(ctx, snAuth)
  39. })
  40. }
  41. }
  42. return
  43. }
  44. // LoadEpsAuthMap loads a batch of arc meta
  45. func (d *Dao) LoadEpsAuthMap(ctx context.Context, epids []int64) (resMetas map[int64]*model.EpAuth, err error) {
  46. var (
  47. cachedMetas map[int64]*model.EpAuth // cache hit seasons
  48. missedMetas map[int64]*model.EpAuth // cache miss seasons, pick from DB
  49. missed []int64 // cache miss seasons
  50. addCache = true // whether we need to fill DB data in MC
  51. )
  52. resMetas = make(map[int64]*model.EpAuth) // merge info from MC and from DB
  53. if cachedMetas, missed, err = d.epAuthCache(ctx, epids); err != nil {
  54. log.Error("LoadEpsAuthMap epAuthCache epids:%v, Error:%v", epids, err)
  55. err = nil
  56. addCache = false // mc error, we don't add
  57. }
  58. if len(missed) > 0 {
  59. if missedMetas, err = d.EpsAuthDB(ctx, missed); err != nil {
  60. log.Error("LoadEpsAuthMap EpsAuthDB epids:%v, Error:%v", missed, err)
  61. return
  62. }
  63. }
  64. // merge info from DB and the info from MC
  65. for sid, v := range cachedMetas {
  66. resMetas[sid] = v
  67. }
  68. for sid, v := range missedMetas {
  69. resMetas[sid] = v
  70. }
  71. if addCache && len(missedMetas) > 0 {
  72. for _, epAuth := range missedMetas {
  73. d.addCache(func() {
  74. d.AddEpAuthCache(ctx, epAuth)
  75. })
  76. }
  77. }
  78. return
  79. }
  80. // LoadSnsCMSMap loads season cms meta data from cache and db
  81. func (d *Dao) LoadSnsCMSMap(ctx context.Context, sids []int64) (resMetas map[int64]*model.SeasonCMS, err error) {
  82. var (
  83. cachedMetas, missedMetas map[int64]*model.SeasonCMS // cache hit seasons
  84. missed []int64 // cache miss seasons
  85. addCache = true // whether we need to fill DB data in MC
  86. )
  87. resMetas = make(map[int64]*model.SeasonCMS)
  88. // pick up the information for these season ids
  89. if cachedMetas, missed, err = d.SeasonsMetaCache(ctx, sids); err != nil {
  90. log.Error("LoadSnsCMS SeasonMetaCache Sids:%v, Error:%v", sids, err)
  91. err = nil
  92. addCache = false // mc error, we don't add
  93. }
  94. if len(missed) > 0 {
  95. if missedMetas, err = d.SeasonMetas(ctx, missed); err != nil {
  96. log.Error("LoadSnsCMS SeasonMetas Sids:%v, Error:%v", sids, err)
  97. return
  98. }
  99. }
  100. log.Info("Set Sids [%d], HitMetas [%d], MissedMetas [%d][%d] Data in MC", len(sids), len(cachedMetas), len(missed), len(missedMetas))
  101. // merge info from DB and the info from MC
  102. for sid, v := range cachedMetas {
  103. resMetas[sid] = v
  104. }
  105. for sid, v := range missedMetas {
  106. resMetas[sid] = v
  107. }
  108. // async Reset the DB data in MC for next time
  109. if addCache && len(missedMetas) > 0 {
  110. for _, art := range missedMetas {
  111. d.addCache(func() {
  112. d.AddSeasonMetaCache(ctx, art)
  113. })
  114. }
  115. }
  116. return
  117. }
  118. // LoadSnsCMS loads the seasons meta cms data from cache, for missed ones, pick them from the DB
  119. func (d *Dao) LoadSnsCMS(ctx context.Context, sids []int64) (seasons []*model.SeasonCMS, newestEpids []int64, err error) {
  120. var (
  121. resMetas map[int64]*model.SeasonCMS // merge info from MC and from DB
  122. )
  123. if resMetas, err = d.LoadSnsCMSMap(ctx, sids); err != nil {
  124. log.Error("LoadSnsCMS Sids %v, Err %v", sids, err)
  125. return
  126. }
  127. // re-arrange the info, according to the order got from Redis
  128. for _, v := range sids {
  129. if SnCMS, ok := resMetas[v]; !ok {
  130. log.Error("LoadSnsCMS Miss Info for Sid: %d", v)
  131. continue
  132. } else {
  133. seasons = append(seasons, SnCMS)
  134. newestEpids = append(newestEpids, SnCMS.NewestEPID)
  135. }
  136. }
  137. return
  138. }
  139. // LoadSnCMS loads the sn meta cms data from cache, for missed ones, pick them from the DB
  140. func (d *Dao) LoadSnCMS(ctx context.Context, sid int64) (sn *model.SeasonCMS, err error) {
  141. if sn, err = d.GetSnCMSCache(ctx, sid); err != nil {
  142. log.Error("LoadSnsCMS Get Season[%d] from CMS Error (%v)", sid, err) // cache set/get error
  143. return
  144. }
  145. if sn != nil { // if cache hit, return
  146. return
  147. }
  148. if sn, err = d.SeasonCMS(ctx, sid); err != nil {
  149. log.Error("[LoadSnCMS] SeasonCMS SeasonID ERROR (%d) (%v)", sid, err)
  150. return
  151. } else if sn == nil {
  152. err = ecode.NothingFound
  153. return
  154. }
  155. d.addCache(func() {
  156. d.AddSeasonMetaCache(ctx, sn)
  157. })
  158. return
  159. }
  160. // LoadEpCMS loads the sn meta cms data from cache, for missed ones, pick them from the DB
  161. func (d *Dao) LoadEpCMS(ctx context.Context, epid int64) (ep *model.EpCMS, err error) {
  162. if ep, err = d.GetEpCMSCache(ctx, epid); err != nil {
  163. log.Error("LoadEpCMS Get EP[%d] from CMS Error (%v)", epid, err) // cache set/get error
  164. return
  165. } else if ep == nil {
  166. if ep, err = d.EpCMS(ctx, epid); err != nil {
  167. log.Error("[LoadEpCMS] EpCMS Epid ERROR (%d) (%v)", epid, err)
  168. return
  169. } else if ep == nil {
  170. err = ecode.NothingFound
  171. return
  172. }
  173. }
  174. d.addCache(func() {
  175. d.SetEpCMSCache(ctx, ep)
  176. })
  177. return
  178. }
  179. // LoadEpsCMS picks ep meta information from Cache & DB
  180. func (d *Dao) LoadEpsCMS(ctx context.Context, epids []int64) (resMetas map[int64]*model.EpCMS, err error) {
  181. var (
  182. cachedMetas, missedMetas map[int64]*model.EpCMS
  183. missed []int64
  184. addCache = true
  185. )
  186. resMetas = make(map[int64]*model.EpCMS)
  187. // pick up the information for these season ids
  188. if cachedMetas, missed, err = d.EpMetaCache(ctx, epids); err != nil {
  189. log.Error("loadEpCMS EpMetaCache Sids:%v, Error:%v", epids, err)
  190. err = nil
  191. addCache = false // mc error, we don't add
  192. }
  193. if len(missed) > 0 {
  194. if missedMetas, err = d.EpMetas(ctx, missed); err != nil {
  195. log.Error("loadEpCMS EpMetas Sids:%v, Error:%v", epids, err)
  196. return
  197. }
  198. }
  199. // merge info from DB and the info from MC
  200. resMetas = make(map[int64]*model.EpCMS, len(epids))
  201. for sid, v := range cachedMetas {
  202. resMetas[sid] = v
  203. }
  204. for sid, v := range missedMetas {
  205. resMetas[sid] = v
  206. }
  207. log.Info("Combine Info for %d Epids, Origin Length %d", len(epids), len(resMetas))
  208. if addCache && len(missedMetas) > 0 { // async Reset the DB data in MC for next time
  209. log.Info("Set MissedMetas %d Data in MC", missedMetas)
  210. for _, art := range missedMetas {
  211. d.addCache(func() {
  212. d.AddEpMetaCache(ctx, art)
  213. })
  214. }
  215. }
  216. return
  217. }