Этот коммит содержится в:
Christopher Speller
2017-01-03 09:53:59 -05:00
коммит произвёл enahum
родитель 547524e5ad
Коммит 42e04d92c4
12 изменённых файлов: 82 добавлений и 36 удалений

Просмотреть файл

@@ -79,7 +79,7 @@ func HasPermissionToChannelContext(c *Context, channelId string, permission *mod
} }
} }
cc := Srv.Store.Channel().Get(channelId) cc := Srv.Store.Channel().Get(channelId, true)
if ccresult := <-cc; ccresult.Err == nil { if ccresult := <-cc; ccresult.Err == nil {
channel := ccresult.Data.(*model.Channel) channel := ccresult.Data.(*model.Channel)

Просмотреть файл

@@ -216,7 +216,7 @@ func updateChannel(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
sc := Srv.Store.Channel().Get(channel.Id) sc := Srv.Store.Channel().Get(channel.Id, true)
cmc := Srv.Store.Channel().GetMember(channel.Id, c.Session.UserId) cmc := Srv.Store.Channel().GetMember(channel.Id, c.Session.UserId)
if cresult := <-sc; cresult.Err != nil { if cresult := <-sc; cresult.Err != nil {
@@ -264,6 +264,7 @@ func updateChannel(c *Context, w http.ResponseWriter, r *http.Request) {
oldChannel.Type = channel.Type oldChannel.Type = channel.Type
} }
InvalidateCacheForChannel(oldChannel.Id)
if ucresult := <-Srv.Store.Channel().Update(oldChannel); ucresult.Err != nil { if ucresult := <-Srv.Store.Channel().Update(oldChannel); ucresult.Err != nil {
c.Err = ucresult.Err c.Err = ucresult.Err
return return
@@ -292,7 +293,7 @@ func updateChannelHeader(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
sc := Srv.Store.Channel().Get(channelId) sc := Srv.Store.Channel().Get(channelId, true)
cmc := Srv.Store.Channel().GetMember(channelId, c.Session.UserId) cmc := Srv.Store.Channel().GetMember(channelId, c.Session.UserId)
if cresult := <-sc; cresult.Err != nil { if cresult := <-sc; cresult.Err != nil {
@@ -312,6 +313,7 @@ func updateChannelHeader(c *Context, w http.ResponseWriter, r *http.Request) {
oldChannelHeader := channel.Header oldChannelHeader := channel.Header
channel.Header = channelHeader channel.Header = channelHeader
InvalidateCacheForChannel(channel.Id)
if ucresult := <-Srv.Store.Channel().Update(channel); ucresult.Err != nil { if ucresult := <-Srv.Store.Channel().Update(channel); ucresult.Err != nil {
c.Err = ucresult.Err c.Err = ucresult.Err
return return
@@ -400,7 +402,7 @@ func updateChannelPurpose(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
sc := Srv.Store.Channel().Get(channelId) sc := Srv.Store.Channel().Get(channelId, true)
cmc := Srv.Store.Channel().GetMember(channelId, c.Session.UserId) cmc := Srv.Store.Channel().GetMember(channelId, c.Session.UserId)
if cresult := <-sc; cresult.Err != nil { if cresult := <-sc; cresult.Err != nil {
@@ -419,6 +421,7 @@ func updateChannelPurpose(c *Context, w http.ResponseWriter, r *http.Request) {
channel.Purpose = channelPurpose channel.Purpose = channelPurpose
InvalidateCacheForChannel(channel.Id)
if ucresult := <-Srv.Store.Channel().Update(channel); ucresult.Err != nil { if ucresult := <-Srv.Store.Channel().Update(channel); ucresult.Err != nil {
c.Err = ucresult.Err c.Err = ucresult.Err
return return
@@ -542,7 +545,7 @@ func JoinChannelByName(c *Context, userId string, teamId string, channelName str
} }
func JoinChannelById(c *Context, userId string, channelId string) (*model.AppError, *model.Channel) { func JoinChannelById(c *Context, userId string, channelId string) (*model.AppError, *model.Channel) {
channelChannel := Srv.Store.Channel().Get(channelId) channelChannel := Srv.Store.Channel().Get(channelId, true)
userChannel := Srv.Store.User().Get(userId) userChannel := Srv.Store.User().Get(userId)
return joinChannel(c, channelChannel, userChannel) return joinChannel(c, channelChannel, userChannel)
@@ -713,7 +716,7 @@ func leave(c *Context, w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r) params := mux.Vars(r)
id := params["channel_id"] id := params["channel_id"]
sc := Srv.Store.Channel().Get(id) sc := Srv.Store.Channel().Get(id, true)
uc := Srv.Store.User().Get(c.Session.UserId) uc := Srv.Store.User().Get(c.Session.UserId)
ccm := Srv.Store.Channel().GetMemberCount(id, false) ccm := Srv.Store.Channel().GetMemberCount(id, false)
@@ -769,7 +772,7 @@ func deleteChannel(c *Context, w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r) params := mux.Vars(r)
id := params["channel_id"] id := params["channel_id"]
sc := Srv.Store.Channel().Get(id) sc := Srv.Store.Channel().Get(id, true)
scm := Srv.Store.Channel().GetMember(id, c.Session.UserId) scm := Srv.Store.Channel().GetMember(id, c.Session.UserId)
cmc := Srv.Store.Channel().GetMemberCount(id, false) cmc := Srv.Store.Channel().GetMemberCount(id, false)
uc := Srv.Store.User().Get(c.Session.UserId) uc := Srv.Store.User().Get(c.Session.UserId)
@@ -842,6 +845,7 @@ func deleteChannel(c *Context, w http.ResponseWriter, r *http.Request) {
}() }()
} }
InvalidateCacheForChannel(channel.Id)
if dresult := <-Srv.Store.Channel().Delete(channel.Id, model.GetMillis()); dresult.Err != nil { if dresult := <-Srv.Store.Channel().Delete(channel.Id, model.GetMillis()); dresult.Err != nil {
c.Err = dresult.Err c.Err = dresult.Err
return return
@@ -876,7 +880,7 @@ func getChannel(c *Context, w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r) params := mux.Vars(r)
id := params["channel_id"] id := params["channel_id"]
cchan := Srv.Store.Channel().Get(id) cchan := Srv.Store.Channel().Get(id, true)
cmchan := Srv.Store.Channel().GetMember(id, c.Session.UserId) cmchan := Srv.Store.Channel().GetMember(id, c.Session.UserId)
if cresult := <-cchan; cresult.Err != nil { if cresult := <-cchan; cresult.Err != nil {
@@ -956,7 +960,7 @@ func getChannelStats(c *Context, w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r) params := mux.Vars(r)
id := params["channel_id"] id := params["channel_id"]
sc := Srv.Store.Channel().Get(id) sc := Srv.Store.Channel().Get(id, true)
var channel *model.Channel var channel *model.Channel
if result := <-sc; result.Err != nil { if result := <-sc; result.Err != nil {
c.Err = result.Err c.Err = result.Err
@@ -1026,7 +1030,7 @@ func addMember(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
sc := Srv.Store.Channel().Get(id) sc := Srv.Store.Channel().Get(id, true)
ouc := Srv.Store.User().Get(c.Session.UserId) ouc := Srv.Store.User().Get(c.Session.UserId)
nuc := Srv.Store.User().Get(userId) nuc := Srv.Store.User().Get(userId)
if nresult := <-nuc; nresult.Err != nil { if nresult := <-nuc; nresult.Err != nil {
@@ -1081,7 +1085,7 @@ func removeMember(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
sc := Srv.Store.Channel().Get(channelId) sc := Srv.Store.Channel().Get(channelId, true)
cmc := Srv.Store.Channel().GetMember(channelId, c.Session.UserId) cmc := Srv.Store.Channel().GetMember(channelId, c.Session.UserId)
ouc := Srv.Store.User().Get(userIdToRemove) ouc := Srv.Store.User().Get(userIdToRemove)

Просмотреть файл

@@ -119,7 +119,7 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
chanChan := Srv.Store.Channel().Get(commandArgs.ChannelId) chanChan := Srv.Store.Channel().Get(commandArgs.ChannelId, true)
teamChan := Srv.Store.Team().Get(c.TeamId) teamChan := Srv.Store.Team().Get(c.TeamId)
userChan := Srv.Store.User().Get(c.Session.UserId) userChan := Srv.Store.User().Get(c.Session.UserId)

Просмотреть файл

@@ -214,7 +214,7 @@ func sendBatchedEmailNotification(userId string, notifications []*batchedNotific
func renderBatchedPost(template *utils.HTMLTemplate, post *model.Post, teamName string, displayNameFormat string, translateFunc i18n.TranslateFunc) string { func renderBatchedPost(template *utils.HTMLTemplate, post *model.Post, teamName string, displayNameFormat string, translateFunc i18n.TranslateFunc) string {
schan := Srv.Store.User().Get(post.UserId) schan := Srv.Store.User().Get(post.UserId)
cchan := Srv.Store.Channel().Get(post.ChannelId) cchan := Srv.Store.Channel().Get(post.ChannelId, true)
template.Props["Button"] = translateFunc("api.email_batching.render_batched_post.go_to_post") template.Props["Button"] = translateFunc("api.email_batching.render_batched_post.go_to_post")
template.Props["PostMessage"] = getMessageForNotification(post, translateFunc) template.Props["PostMessage"] = getMessageForNotification(post, translateFunc)

Просмотреть файл

@@ -584,7 +584,7 @@ func migrateFilenamesToFileInfos(post *model.Post) []*model.FileInfo {
return []*model.FileInfo{} return []*model.FileInfo{}
} }
cchan := Srv.Store.Channel().Get(post.ChannelId) cchan := Srv.Store.Channel().Get(post.ChannelId, true)
// There's a weird bug that rarely happens where a post ends up with duplicate Filenames so remove those // There's a weird bug that rarely happens where a post ends up with duplicate Filenames so remove those
filenames := utils.RemoveDuplicatesFromStringArray(post.Filenames) filenames := utils.RemoveDuplicatesFromStringArray(post.Filenames)

Просмотреть файл

@@ -61,7 +61,7 @@ func createPost(c *Context, w http.ResponseWriter, r *http.Request) {
} }
post.UserId = c.Session.UserId post.UserId = c.Session.UserId
cchan := Srv.Store.Channel().Get(post.ChannelId) cchan := Srv.Store.Channel().Get(post.ChannelId, true)
if !HasPermissionToChannelContext(c, post.ChannelId, model.PERMISSION_CREATE_POST) { if !HasPermissionToChannelContext(c, post.ChannelId, model.PERMISSION_CREATE_POST) {
return return
@@ -166,6 +166,7 @@ func CreatePost(c *Context, post *model.Post, triggerWebhooks bool) (*model.Post
} }
} }
InvalidateCacheForChannel(rpost.ChannelId)
InvalidateCacheForChannelPosts(rpost.ChannelId) InvalidateCacheForChannelPosts(rpost.ChannelId)
handlePostEvents(c, rpost, triggerWebhooks) handlePostEvents(c, rpost, triggerWebhooks)
@@ -245,7 +246,7 @@ func CreateWebhookPost(c *Context, channelId, text, overrideUsername, overrideIc
func handlePostEvents(c *Context, post *model.Post, triggerWebhooks bool) { func handlePostEvents(c *Context, post *model.Post, triggerWebhooks bool) {
tchan := Srv.Store.Team().Get(c.TeamId) tchan := Srv.Store.Team().Get(c.TeamId)
cchan := Srv.Store.Channel().Get(post.ChannelId) cchan := Srv.Store.Channel().Get(post.ChannelId, true)
uchan := Srv.Store.User().Get(post.UserId) uchan := Srv.Store.User().Get(post.UserId)
var team *model.Team var team *model.Team

Просмотреть файл

@@ -113,6 +113,7 @@ func InvalidateCacheForChannel(channelId string) {
func InvalidateCacheForChannelSkipClusterSend(channelId string) { func InvalidateCacheForChannelSkipClusterSend(channelId string) {
Srv.Store.User().InvalidateProfilesInChannelCache(channelId) Srv.Store.User().InvalidateProfilesInChannelCache(channelId)
Srv.Store.Channel().InvalidateMemberCount(channelId) Srv.Store.Channel().InvalidateMemberCount(channelId)
Srv.Store.Channel().InvalidateChannel(channelId)
} }
func InvalidateCacheForChannelPosts(channelId string) { func InvalidateCacheForChannelPosts(channelId string) {

Просмотреть файл

@@ -55,7 +55,7 @@ func createIncomingHook(c *Context, w http.ResponseWriter, r *http.Request) {
return return
} }
cchan := Srv.Store.Channel().Get(hook.ChannelId) cchan := Srv.Store.Channel().Get(hook.ChannelId, true)
hook.UserId = c.Session.UserId hook.UserId = c.Session.UserId
hook.TeamId = c.TeamId hook.TeamId = c.TeamId
@@ -174,7 +174,7 @@ func createOutgoingHook(c *Context, w http.ResponseWriter, r *http.Request) {
hook.TeamId = c.TeamId hook.TeamId = c.TeamId
if len(hook.ChannelId) != 0 { if len(hook.ChannelId) != 0 {
cchan := Srv.Store.Channel().Get(hook.ChannelId) cchan := Srv.Store.Channel().Get(hook.ChannelId, true)
var channel *model.Channel var channel *model.Channel
if result := <-cchan; result.Err != nil { if result := <-cchan; result.Err != nil {
@@ -447,7 +447,7 @@ func incomingWebhook(c *Context, w http.ResponseWriter, r *http.Request) {
cchan = Srv.Store.Channel().GetByName(hook.TeamId, channelName) cchan = Srv.Store.Channel().GetByName(hook.TeamId, channelName)
} else { } else {
cchan = Srv.Store.Channel().Get(hook.ChannelId) cchan = Srv.Store.Channel().Get(hook.ChannelId, true)
} }
overrideUsername := parsedRequest.Username overrideUsername := parsedRequest.Username

Просмотреть файл

@@ -50,7 +50,7 @@ func getChannelFromChannelArg(channelArg string) *model.Channel {
} }
if channel == nil { if channel == nil {
if result := <-api.Srv.Store.Channel().Get(channelPart); result.Err == nil { if result := <-api.Srv.Store.Channel().Get(channelPart, true); result.Err == nil {
channel = result.Data.(*model.Channel) channel = result.Data.(*model.Channel)
} }
} }

Просмотреть файл

@@ -26,6 +26,9 @@ const (
CHANNEL_MEMBERS_COUNTS_CACHE_SIZE = 20000 CHANNEL_MEMBERS_COUNTS_CACHE_SIZE = 20000
CHANNEL_MEMBERS_COUNTS_CACHE_SEC = 900 // 15 mins CHANNEL_MEMBERS_COUNTS_CACHE_SEC = 900 // 15 mins
CHANNEL_CACHE_SIZE = 5000
CHANNEL_CACHE_SEC = 900 // 15 mins
) )
type SqlChannelStore struct { type SqlChannelStore struct {
@@ -34,10 +37,12 @@ type SqlChannelStore struct {
var channelMemberCountsCache = utils.NewLru(CHANNEL_MEMBERS_COUNTS_CACHE_SIZE) var channelMemberCountsCache = utils.NewLru(CHANNEL_MEMBERS_COUNTS_CACHE_SIZE)
var allChannelMembersForUserCache = utils.NewLru(ALL_CHANNEL_MEMBERS_FOR_USER_CACHE_SIZE) var allChannelMembersForUserCache = utils.NewLru(ALL_CHANNEL_MEMBERS_FOR_USER_CACHE_SIZE)
var channelCache = utils.NewLru(CHANNEL_CACHE_SIZE)
func ClearChannelCaches() { func ClearChannelCaches() {
channelMemberCountsCache.Purge() channelMemberCountsCache.Purge()
allChannelMembersForUserCache.Purge() allChannelMembersForUserCache.Purge()
channelCache.Purge()
} }
func NewSqlChannelStore(sqlStore *SqlStore) ChannelStore { func NewSqlChannelStore(sqlStore *SqlStore) ChannelStore {
@@ -297,19 +302,24 @@ func (s SqlChannelStore) extraUpdated(channel *model.Channel) StoreChannel {
return storeChannel return storeChannel
} }
func (s SqlChannelStore) Get(id string) StoreChannel { func (us SqlChannelStore) InvalidateChannel(id string) {
return s.get(id, false) channelCache.Remove(id)
}
func (s SqlChannelStore) Get(id string, allowFromCache bool) StoreChannel {
return s.get(id, false, allowFromCache)
} }
func (s SqlChannelStore) GetFromMaster(id string) StoreChannel { func (s SqlChannelStore) GetFromMaster(id string) StoreChannel {
return s.get(id, true) return s.get(id, true, false)
} }
func (s SqlChannelStore) get(id string, master bool) StoreChannel { func (s SqlChannelStore) get(id string, master bool, allowFromCache bool) StoreChannel {
storeChannel := make(StoreChannel, 1) storeChannel := make(StoreChannel, 1)
go func() { go func() {
result := StoreResult{} result := StoreResult{}
metrics := einterfaces.GetMetricsInterface()
var db *gorp.DbMap var db *gorp.DbMap
if master { if master {
@@ -318,12 +328,33 @@ func (s SqlChannelStore) get(id string, master bool) StoreChannel {
db = s.GetReplica() db = s.GetReplica()
} }
if allowFromCache {
if cacheItem, ok := channelCache.Get(id); ok {
if metrics != nil {
metrics.IncrementMemCacheHitCounter("Channel")
}
result.Data = cacheItem.(*model.Channel)
storeChannel <- result
close(storeChannel)
return
} else {
if metrics != nil {
metrics.IncrementMemCacheMissCounter("Channel")
}
}
} else {
if metrics != nil {
metrics.IncrementMemCacheMissCounter("Channel")
}
}
if obj, err := db.Get(model.Channel{}, id); err != nil { if obj, err := db.Get(model.Channel{}, id); err != nil {
result.Err = model.NewLocAppError("SqlChannelStore.Get", "store.sql_channel.get.find.app_error", nil, "id="+id+", "+err.Error()) result.Err = model.NewLocAppError("SqlChannelStore.Get", "store.sql_channel.get.find.app_error", nil, "id="+id+", "+err.Error())
} else if obj == nil { } else if obj == nil {
result.Err = model.NewLocAppError("SqlChannelStore.Get", "store.sql_channel.get.existing.app_error", nil, "id="+id) result.Err = model.NewLocAppError("SqlChannelStore.Get", "store.sql_channel.get.existing.app_error", nil, "id="+id)
} else { } else {
result.Data = obj.(*model.Channel) result.Data = obj.(*model.Channel)
channelCache.AddWithExpiresInSecs(id, obj.(*model.Channel), CHANNEL_MEMBERS_COUNTS_CACHE_SEC)
} }
storeChannel <- result storeChannel <- result
@@ -869,7 +900,7 @@ func (s SqlChannelStore) RemoveMember(channelId string, userId string) StoreChan
result := StoreResult{} result := StoreResult{}
// Grab the channel we are saving this member to // Grab the channel we are saving this member to
if cr := <-s.Get(channelId); cr.Err != nil { if cr := <-s.Get(channelId, true); cr.Err != nil {
result.Err = cr.Err result.Err = cr.Err
} else { } else {
channel := cr.Data.(*model.Channel) channel := cr.Data.(*model.Channel)

Просмотреть файл

@@ -181,7 +181,7 @@ func TestChannelStoreGet(t *testing.T) {
o1.Type = model.CHANNEL_OPEN o1.Type = model.CHANNEL_OPEN
Must(store.Channel().Save(&o1)) Must(store.Channel().Save(&o1))
if r1 := <-store.Channel().Get(o1.Id); r1.Err != nil { if r1 := <-store.Channel().Get(o1.Id, false); r1.Err != nil {
t.Fatal(r1.Err) t.Fatal(r1.Err)
} else { } else {
if r1.Data.(*model.Channel).ToJson() != o1.ToJson() { if r1.Data.(*model.Channel).ToJson() != o1.ToJson() {
@@ -189,7 +189,7 @@ func TestChannelStoreGet(t *testing.T) {
} }
} }
if err := (<-store.Channel().Get("")).Err; err == nil { if err := (<-store.Channel().Get("", false)).Err; err == nil {
t.Fatal("Missing id should have failed") t.Fatal("Missing id should have failed")
} }
@@ -223,7 +223,7 @@ func TestChannelStoreGet(t *testing.T) {
Must(store.Channel().SaveDirectChannel(&o2, &m1, &m2)) Must(store.Channel().SaveDirectChannel(&o2, &m1, &m2))
if r2 := <-store.Channel().Get(o2.Id); r2.Err != nil { if r2 := <-store.Channel().Get(o2.Id, false); r2.Err != nil {
t.Fatal(r2.Err) t.Fatal(r2.Err)
} else { } else {
if r2.Data.(*model.Channel).ToJson() != o2.ToJson() { if r2.Data.(*model.Channel).ToJson() != o2.ToJson() {
@@ -231,6 +231,14 @@ func TestChannelStoreGet(t *testing.T) {
} }
} }
if r4 := <-store.Channel().Get(o2.Id, true); r4.Err != nil {
t.Fatal(r4.Err)
} else {
if r4.Data.(*model.Channel).ToJson() != o2.ToJson() {
t.Fatal("invalid returned channel")
}
}
if r3 := <-store.Channel().GetAll(o1.TeamId); r3.Err != nil { if r3 := <-store.Channel().GetAll(o1.TeamId); r3.Err != nil {
t.Fatal(r3.Err) t.Fatal(r3.Err)
} else { } else {
@@ -311,7 +319,7 @@ func TestChannelStoreDelete(t *testing.T) {
t.Fatal(r.Err) t.Fatal(r.Err)
} }
if r := <-store.Channel().Get(o1.Id); r.Data.(*model.Channel).DeleteAt == 0 { if r := <-store.Channel().Get(o1.Id, false); r.Data.(*model.Channel).DeleteAt == 0 {
t.Fatal("should have been deleted") t.Fatal("should have been deleted")
} }
@@ -367,7 +375,7 @@ func TestChannelMemberStore(t *testing.T) {
c1.Type = model.CHANNEL_OPEN c1.Type = model.CHANNEL_OPEN
c1 = *Must(store.Channel().Save(&c1)).(*model.Channel) c1 = *Must(store.Channel().Save(&c1)).(*model.Channel)
c1t1 := (<-store.Channel().Get(c1.Id)).Data.(*model.Channel) c1t1 := (<-store.Channel().Get(c1.Id, false)).Data.(*model.Channel)
t1 := c1t1.ExtraUpdateAt t1 := c1t1.ExtraUpdateAt
u1 := model.User{} u1 := model.User{}
@@ -394,7 +402,7 @@ func TestChannelMemberStore(t *testing.T) {
o2.NotifyProps = model.GetDefaultChannelNotifyProps() o2.NotifyProps = model.GetDefaultChannelNotifyProps()
Must(store.Channel().SaveMember(&o2)) Must(store.Channel().SaveMember(&o2))
c1t2 := (<-store.Channel().Get(c1.Id)).Data.(*model.Channel) c1t2 := (<-store.Channel().Get(c1.Id, false)).Data.(*model.Channel)
t2 := c1t2.ExtraUpdateAt t2 := c1t2.ExtraUpdateAt
if t2 <= t1 { if t2 <= t1 {
@@ -423,7 +431,7 @@ func TestChannelMemberStore(t *testing.T) {
t.Fatal("should have removed 1 member") t.Fatal("should have removed 1 member")
} }
c1t3 := (<-store.Channel().Get(c1.Id)).Data.(*model.Channel) c1t3 := (<-store.Channel().Get(c1.Id, false)).Data.(*model.Channel)
t3 := c1t3.ExtraUpdateAt t3 := c1t3.ExtraUpdateAt
if t3 <= t2 || t3 <= t1 { if t3 <= t2 || t3 <= t1 {
@@ -439,7 +447,7 @@ func TestChannelMemberStore(t *testing.T) {
t.Fatal("Should have been a duplicate") t.Fatal("Should have been a duplicate")
} }
c1t4 := (<-store.Channel().Get(c1.Id)).Data.(*model.Channel) c1t4 := (<-store.Channel().Get(c1.Id, false)).Data.(*model.Channel)
t4 := c1t4.ExtraUpdateAt t4 := c1t4.ExtraUpdateAt
if t4 != t3 { if t4 != t3 {
t.Fatal("Should not update time upon failure") t.Fatal("Should not update time upon failure")
@@ -456,7 +464,7 @@ func TestChannelDeleteMemberStore(t *testing.T) {
c1.Type = model.CHANNEL_OPEN c1.Type = model.CHANNEL_OPEN
c1 = *Must(store.Channel().Save(&c1)).(*model.Channel) c1 = *Must(store.Channel().Save(&c1)).(*model.Channel)
c1t1 := (<-store.Channel().Get(c1.Id)).Data.(*model.Channel) c1t1 := (<-store.Channel().Get(c1.Id, false)).Data.(*model.Channel)
t1 := c1t1.ExtraUpdateAt t1 := c1t1.ExtraUpdateAt
u1 := model.User{} u1 := model.User{}
@@ -483,7 +491,7 @@ func TestChannelDeleteMemberStore(t *testing.T) {
o2.NotifyProps = model.GetDefaultChannelNotifyProps() o2.NotifyProps = model.GetDefaultChannelNotifyProps()
Must(store.Channel().SaveMember(&o2)) Must(store.Channel().SaveMember(&o2))
c1t2 := (<-store.Channel().Get(c1.Id)).Data.(*model.Channel) c1t2 := (<-store.Channel().Get(c1.Id, false)).Data.(*model.Channel)
t2 := c1t2.ExtraUpdateAt t2 := c1t2.ExtraUpdateAt
if t2 <= t1 { if t2 <= t1 {

Просмотреть файл

@@ -85,7 +85,8 @@ type ChannelStore interface {
CreateDirectChannel(userId string, otherUserId string) StoreChannel CreateDirectChannel(userId string, otherUserId string) StoreChannel
SaveDirectChannel(channel *model.Channel, member1 *model.ChannelMember, member2 *model.ChannelMember) StoreChannel SaveDirectChannel(channel *model.Channel, member1 *model.ChannelMember, member2 *model.ChannelMember) StoreChannel
Update(channel *model.Channel) StoreChannel Update(channel *model.Channel) StoreChannel
Get(id string) StoreChannel Get(id string, allowFromCache bool) StoreChannel
InvalidateChannel(id string)
GetFromMaster(id string) StoreChannel GetFromMaster(id string) StoreChannel
Delete(channelId string, time int64) StoreChannel Delete(channelId string, time int64) StoreChannel
SetDeleteAt(channelId string, deleteAt int64, updateAt int64) StoreChannel SetDeleteAt(channelId string, deleteAt int64, updateAt int64) StoreChannel