Migrates the lastPostsCache from PostStore into cache layer (#13141)
* Some advances * Partial advances * Cache moved * Tests finished * Removed all test for PostStore (store/sqlstore) related with Cache. This is tested in the cache layer now
Этот коммит содержится в:
коммит произвёл
Claudio Costa
родитель
85960abb08
Коммит
3a8fb53f3e
@@ -24,7 +24,6 @@ type SqlPostStore struct {
|
||||
SqlStore
|
||||
metrics einterfaces.MetricsInterface
|
||||
lastPostTimeCache *utils.Cache
|
||||
lastPostsCache *utils.Cache
|
||||
maxPostSizeOnce sync.Once
|
||||
maxPostSizeCached int
|
||||
}
|
||||
@@ -32,18 +31,13 @@ type SqlPostStore struct {
|
||||
const (
|
||||
LAST_POST_TIME_CACHE_SIZE = 25000
|
||||
LAST_POST_TIME_CACHE_SEC = 900 // 15 minutes
|
||||
|
||||
LAST_POSTS_CACHE_SIZE = 1000
|
||||
LAST_POSTS_CACHE_SEC = 900 // 15 minutes
|
||||
)
|
||||
|
||||
func (s *SqlPostStore) ClearCaches() {
|
||||
s.lastPostTimeCache.Purge()
|
||||
s.lastPostsCache.Purge()
|
||||
|
||||
if s.metrics != nil {
|
||||
s.metrics.IncrementMemCacheInvalidationCounter("Last Post Time - Purge")
|
||||
s.metrics.IncrementMemCacheInvalidationCounter("Last Posts Cache - Purge")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +46,6 @@ func NewSqlPostStore(sqlStore SqlStore, metrics einterfaces.MetricsInterface) st
|
||||
SqlStore: sqlStore,
|
||||
metrics: metrics,
|
||||
lastPostTimeCache: utils.NewLru(LAST_POST_TIME_CACHE_SIZE),
|
||||
lastPostsCache: utils.NewLru(LAST_POSTS_CACHE_SIZE),
|
||||
maxPostSizeCached: model.POST_MESSAGE_MAX_RUNES_V1,
|
||||
}
|
||||
|
||||
@@ -329,13 +322,8 @@ type etagPosts struct {
|
||||
func (s *SqlPostStore) InvalidateLastPostTimeCache(channelId string) {
|
||||
s.lastPostTimeCache.Remove(channelId)
|
||||
|
||||
// Keys are "{channelid}{limit}" and caching only occurs on limits of 30 and 60
|
||||
s.lastPostsCache.Remove(channelId + "30")
|
||||
s.lastPostsCache.Remove(channelId + "60")
|
||||
|
||||
if s.metrics != nil {
|
||||
s.metrics.IncrementMemCacheInvalidationCounter("Last Post Time - Remove by Channel Id")
|
||||
s.metrics.IncrementMemCacheInvalidationCounter("Last Posts Cache - Remove by Channel Id")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -451,24 +439,11 @@ func (s *SqlPostStore) PermanentDeleteByChannel(channelId string) *model.AppErro
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SqlPostStore) GetPosts(options model.GetPostsOptions, allowFromCache bool) (*model.PostList, *model.AppError) {
|
||||
func (s *SqlPostStore) GetPosts(options model.GetPostsOptions, _ bool) (*model.PostList, *model.AppError) {
|
||||
if options.PerPage > 1000 {
|
||||
return nil, model.NewAppError("SqlPostStore.GetLinearPosts", "store.sql_post.get_posts.app_error", nil, "channelId="+options.ChannelId, http.StatusBadRequest)
|
||||
}
|
||||
offset := options.PerPage * options.Page
|
||||
// Caching only occurs on limits of 30 and 60, the common limits requested by MM clients
|
||||
if allowFromCache && offset == 0 && (options.PerPage == 60 || options.PerPage == 30) {
|
||||
if cacheItem, ok := s.lastPostsCache.Get(fmt.Sprintf("%s%v", options.ChannelId, options.PerPage)); ok {
|
||||
if s.metrics != nil {
|
||||
s.metrics.IncrementMemCacheHitCounter("Last Posts Cache")
|
||||
}
|
||||
return cacheItem.(*model.PostList), nil
|
||||
}
|
||||
}
|
||||
|
||||
if s.metrics != nil {
|
||||
s.metrics.IncrementMemCacheMissCounter("Last Posts Cache")
|
||||
}
|
||||
|
||||
rpc := make(chan store.StoreResult, 1)
|
||||
go func() {
|
||||
@@ -510,11 +485,6 @@ func (s *SqlPostStore) GetPosts(options model.GetPostsOptions, allowFromCache bo
|
||||
|
||||
list.MakeNonNil()
|
||||
|
||||
// Caching only occurs on limits of 30 and 60, the common limits requested by MM clients
|
||||
if offset == 0 && (options.PerPage == 60 || options.PerPage == 30) {
|
||||
s.lastPostsCache.AddWithExpiresInSecs(fmt.Sprintf("%s%v", options.ChannelId, options.PerPage), list, LAST_POSTS_CACHE_SEC)
|
||||
}
|
||||
|
||||
return list, err
|
||||
}
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user