Fix #10975. GetEtag is sync now (#11011)

* Fix #10975. GetEtag is sync now

* Revert of modifications to go.mod and go.sum
This commit is contained in:
Rodrigo Villablanca Vásquez
2019-05-31 17:58:24 -04:00
committed by Joram Wilander
parent 719412c1a0
commit e20d91b00e
5 changed files with 35 additions and 38 deletions

View File

@@ -607,7 +607,7 @@ func (a *App) GetPosts(channelId string, offset int, limit int) (*model.PostList
}
func (a *App) GetPostsEtag(channelId string) string {
return (<-a.Srv.Store.Post().GetEtag(channelId, true)).Data.(string)
return a.Srv.Store.Post().GetEtag(channelId, true)
}
func (a *App) GetPostsSince(channelId string, time int64) (*model.PostList, *model.AppError) {

View File

@@ -331,36 +331,35 @@ func (s *SqlPostStore) InvalidateLastPostTimeCache(channelId string) {
}
}
func (s *SqlPostStore) GetEtag(channelId string, allowFromCache bool) store.StoreChannel {
return store.Do(func(result *store.StoreResult) {
if allowFromCache {
if cacheItem, ok := s.lastPostTimeCache.Get(channelId); ok {
if s.metrics != nil {
s.metrics.IncrementMemCacheHitCounter("Last Post Time")
}
result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, cacheItem.(int64))
return
} else {
if s.metrics != nil {
s.metrics.IncrementMemCacheMissCounter("Last Post Time")
}
func (s *SqlPostStore) GetEtag(channelId string, allowFromCache bool) string {
if allowFromCache {
if cacheItem, ok := s.lastPostTimeCache.Get(channelId); ok {
if s.metrics != nil {
s.metrics.IncrementMemCacheHitCounter("Last Post Time")
}
return fmt.Sprintf("%v.%v", model.CurrentVersion, cacheItem.(int64))
} else {
if s.metrics != nil {
s.metrics.IncrementMemCacheMissCounter("Last Post Time")
}
}
var et etagPosts
err := s.GetReplica().SelectOne(&et, "SELECT Id, UpdateAt FROM Posts WHERE ChannelId = :ChannelId ORDER BY UpdateAt DESC LIMIT 1", map[string]interface{}{"ChannelId": channelId})
if err != nil {
result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, model.GetMillis())
} else {
result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, et.UpdateAt)
} else {
if s.metrics != nil {
s.metrics.IncrementMemCacheMissCounter("Last Post Time")
}
}
s.lastPostTimeCache.AddWithExpiresInSecs(channelId, et.UpdateAt, LAST_POST_TIME_CACHE_SEC)
})
var et etagPosts
err := s.GetReplica().SelectOne(&et, "SELECT Id, UpdateAt FROM Posts WHERE ChannelId = :ChannelId ORDER BY UpdateAt DESC LIMIT 1", map[string]interface{}{"ChannelId": channelId})
var result string
if err != nil {
result = fmt.Sprintf("%v.%v", model.CurrentVersion, model.GetMillis())
} else {
result = fmt.Sprintf("%v.%v", model.CurrentVersion, et.UpdateAt)
}
s.lastPostTimeCache.AddWithExpiresInSecs(channelId, et.UpdateAt, LAST_POST_TIME_CACHE_SEC)
return result
}
func (s *SqlPostStore) Delete(postId string, time int64, deleteByID string) *model.AppError {

View File

@@ -224,7 +224,7 @@ type PostStore interface {
GetPostsBefore(channelId string, postId string, numPosts int, offset int) StoreChannel
GetPostsAfter(channelId string, postId string, numPosts int, offset int) StoreChannel
GetPostsSince(channelId string, time int64, allowFromCache bool) StoreChannel
GetEtag(channelId string, allowFromCache bool) StoreChannel
GetEtag(channelId string, allowFromCache bool) string
Search(teamId string, userId string, params *model.SearchParams) StoreChannel
AnalyticsUserCountsWithPostsByDay(teamId string) StoreChannel
AnalyticsPostCountsByDay(teamId string) StoreChannel

View File

@@ -133,16 +133,14 @@ func (_m *PostStore) GetDirectPostParentsForExportAfter(limit int, afterId strin
}
// GetEtag provides a mock function with given fields: channelId, allowFromCache
func (_m *PostStore) GetEtag(channelId string, allowFromCache bool) store.StoreChannel {
func (_m *PostStore) GetEtag(channelId string, allowFromCache bool) string {
ret := _m.Called(channelId, allowFromCache)
var r0 store.StoreChannel
if rf, ok := ret.Get(0).(func(string, bool) store.StoreChannel); ok {
var r0 string
if rf, ok := ret.Get(0).(func(string, bool) string); ok {
r0 = rf(channelId, allowFromCache)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(store.StoreChannel)
}
r0 = ret.Get(0).(string)
}
return r0

View File

@@ -116,14 +116,14 @@ func testPostStoreGet(t *testing.T, ss store.Store) {
o1.UserId = model.NewId()
o1.Message = "zz" + model.NewId() + "b"
etag1 := (<-ss.Post().GetEtag(o1.ChannelId, false)).Data.(string)
etag1 := ss.Post().GetEtag(o1.ChannelId, false)
if strings.Index(etag1, model.CurrentVersion+".") != 0 {
t.Fatal("Invalid Etag")
}
o1 = (<-ss.Post().Save(o1)).Data.(*model.Post)
etag2 := (<-ss.Post().GetEtag(o1.ChannelId, false)).Data.(string)
etag2 := ss.Post().GetEtag(o1.ChannelId, false)
if strings.Index(etag2, fmt.Sprintf("%v.%v", model.CurrentVersion, o1.UpdateAt)) != 0 {
t.Fatal("Invalid Etag")
}
@@ -172,13 +172,13 @@ func testGetEtagCache(t *testing.T, ss store.Store) {
o1.UserId = model.NewId()
o1.Message = "zz" + model.NewId() + "b"
etag1 := (<-ss.Post().GetEtag(o1.ChannelId, true)).Data.(string)
etag1 := ss.Post().GetEtag(o1.ChannelId, true)
if strings.Index(etag1, model.CurrentVersion+".") != 0 {
t.Fatal("Invalid Etag")
}
// This one should come from the cache
etag2 := (<-ss.Post().GetEtag(o1.ChannelId, true)).Data.(string)
etag2 := ss.Post().GetEtag(o1.ChannelId, true)
if strings.Index(etag2, model.CurrentVersion+".") != 0 {
t.Fatal("Invalid Etag")
}
@@ -186,7 +186,7 @@ func testGetEtagCache(t *testing.T, ss store.Store) {
o1 = (<-ss.Post().Save(o1)).Data.(*model.Post)
// We have not invalidated the cache so this should be the same as above
etag3 := (<-ss.Post().GetEtag(o1.ChannelId, true)).Data.(string)
etag3 := ss.Post().GetEtag(o1.ChannelId, true)
if strings.Index(etag3, etag2) != 0 {
t.Fatal("Invalid Etag")
}
@@ -194,7 +194,7 @@ func testGetEtagCache(t *testing.T, ss store.Store) {
ss.Post().InvalidateLastPostTimeCache(o1.ChannelId)
// Invalidated cache so we should get a good result
etag4 := (<-ss.Post().GetEtag(o1.ChannelId, true)).Data.(string)
etag4 := ss.Post().GetEtag(o1.ChannelId, true)
if strings.Index(etag4, fmt.Sprintf("%v.%v", model.CurrentVersion, o1.UpdateAt)) != 0 {
t.Fatal("Invalid Etag")
}
@@ -332,7 +332,7 @@ func testPostStoreDelete(t *testing.T, ss store.Store) {
o1.Message = "zz" + model.NewId() + "b"
deleteByID := model.NewId()
etag1 := (<-ss.Post().GetEtag(o1.ChannelId, false)).Data.(string)
etag1 := ss.Post().GetEtag(o1.ChannelId, false)
if strings.Index(etag1, model.CurrentVersion+".") != 0 {
t.Fatal("Invalid Etag")
}
@@ -363,7 +363,7 @@ func testPostStoreDelete(t *testing.T, ss store.Store) {
t.Fatal("Missing id should have failed")
}
etag2 := (<-ss.Post().GetEtag(o1.ChannelId, false)).Data.(string)
etag2 := ss.Post().GetEtag(o1.ChannelId, false)
if strings.Index(etag2, model.CurrentVersion+".") != 0 {
t.Fatal("Invalid Etag")
}