Merge branch 'master' into mark-as-unread
Этот коммит содержится в:
@@ -29,9 +29,6 @@ const (
|
||||
ALL_CHANNEL_MEMBERS_NOTIFY_PROPS_FOR_CHANNEL_CACHE_SIZE = model.SESSION_CACHE_SIZE
|
||||
ALL_CHANNEL_MEMBERS_NOTIFY_PROPS_FOR_CHANNEL_CACHE_SEC = 1800 // 30 mins
|
||||
|
||||
CHANNEL_MEMBERS_COUNTS_CACHE_SIZE = model.CHANNEL_CACHE_SIZE
|
||||
CHANNEL_MEMBERS_COUNTS_CACHE_SEC = 1800 // 30 mins
|
||||
|
||||
CHANNEL_GUESTS_COUNTS_CACHE_SIZE = model.CHANNEL_CACHE_SIZE
|
||||
CHANNEL_GUESTS_COUNTS_CACHE_SEC = 1800 // 30 mins
|
||||
|
||||
@@ -283,7 +280,6 @@ type publicChannel struct {
|
||||
Purpose string `json:"purpose"`
|
||||
}
|
||||
|
||||
var channelMemberCountsCache = utils.NewLru(CHANNEL_MEMBERS_COUNTS_CACHE_SIZE)
|
||||
var channelPinnedPostCountsCache = utils.NewLru(CHANNEL_PINNEDPOSTS_COUNTS_CACHE_SIZE)
|
||||
var channelGuestCountsCache = utils.NewLru(CHANNEL_GUESTS_COUNTS_CACHE_SIZE)
|
||||
var allChannelMembersForUserCache = utils.NewLru(ALL_CHANNEL_MEMBERS_FOR_USER_CACHE_SIZE)
|
||||
@@ -292,7 +288,6 @@ var channelCache = utils.NewLru(model.CHANNEL_CACHE_SIZE)
|
||||
var channelByNameCache = utils.NewLru(model.CHANNEL_CACHE_SIZE)
|
||||
|
||||
func (s SqlChannelStore) ClearCaches() {
|
||||
channelMemberCountsCache.Purge()
|
||||
channelPinnedPostCountsCache.Purge()
|
||||
channelGuestCountsCache.Purge()
|
||||
allChannelMembersForUserCache.Purge()
|
||||
@@ -301,7 +296,6 @@ func (s SqlChannelStore) ClearCaches() {
|
||||
channelByNameCache.Purge()
|
||||
|
||||
if s.metrics != nil {
|
||||
s.metrics.IncrementMemCacheInvalidationCounter("Channel Member Counts - Purge")
|
||||
s.metrics.IncrementMemCacheInvalidationCounter("Channel Pinned Post Counts - Purge")
|
||||
s.metrics.IncrementMemCacheInvalidationCounter("All Channel Members for User - Purge")
|
||||
s.metrics.IncrementMemCacheInvalidationCounter("All Channel Members Notify Props for Channel - Purge")
|
||||
@@ -1585,46 +1579,14 @@ func (s SqlChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId str
|
||||
}
|
||||
|
||||
func (s SqlChannelStore) InvalidateMemberCount(channelId string) {
|
||||
channelMemberCountsCache.Remove(channelId)
|
||||
if s.metrics != nil {
|
||||
s.metrics.IncrementMemCacheInvalidationCounter("Channel Member Counts - Remove by ChannelId")
|
||||
}
|
||||
}
|
||||
|
||||
func (s SqlChannelStore) GetMemberCountFromCache(channelId string) int64 {
|
||||
if cacheItem, ok := channelMemberCountsCache.Get(channelId); ok {
|
||||
if s.metrics != nil {
|
||||
s.metrics.IncrementMemCacheHitCounter("Channel Member Counts")
|
||||
}
|
||||
return cacheItem.(int64)
|
||||
}
|
||||
|
||||
if s.metrics != nil {
|
||||
s.metrics.IncrementMemCacheMissCounter("Channel Member Counts")
|
||||
}
|
||||
|
||||
count, err := s.GetMemberCount(channelId, true)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
count, _ := s.GetMemberCount(channelId, true)
|
||||
return count
|
||||
}
|
||||
|
||||
func (s SqlChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, *model.AppError) {
|
||||
if allowFromCache {
|
||||
if cacheItem, ok := channelMemberCountsCache.Get(channelId); ok {
|
||||
if s.metrics != nil {
|
||||
s.metrics.IncrementMemCacheHitCounter("Channel Member Counts")
|
||||
}
|
||||
return cacheItem.(int64), nil
|
||||
}
|
||||
}
|
||||
|
||||
if s.metrics != nil {
|
||||
s.metrics.IncrementMemCacheMissCounter("Channel Member Counts")
|
||||
}
|
||||
|
||||
count, err := s.GetReplica().SelectInt(`
|
||||
SELECT
|
||||
count(*)
|
||||
@@ -1639,10 +1601,6 @@ func (s SqlChannelStore) GetMemberCount(channelId string, allowFromCache bool) (
|
||||
return 0, model.NewAppError("SqlChannelStore.GetMemberCount", "store.sql_channel.get_member_count.app_error", nil, "channel_id="+channelId+", "+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
if allowFromCache {
|
||||
channelMemberCountsCache.AddWithExpiresInSecs(channelId, count, CHANNEL_MEMBERS_COUNTS_CACHE_SEC)
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -216,6 +216,7 @@ func (s SqlComplianceStore) MessageExport(after int64, limit int) ([]*model.Mess
|
||||
Posts.DeleteAt AS PostDeleteAt,
|
||||
Posts.Message AS PostMessage,
|
||||
Posts.Type AS PostType,
|
||||
Posts.Props AS PostProps,
|
||||
Posts.OriginalId AS PostOriginalId,
|
||||
Posts.RootId AS PostRootId,
|
||||
Posts.Props AS PostProps,
|
||||
@@ -243,7 +244,7 @@ func (s SqlComplianceStore) MessageExport(after int64, limit int) ([]*model.Mess
|
||||
LEFT JOIN Bots ON Bots.UserId = Posts.UserId
|
||||
WHERE
|
||||
(Posts.CreateAt > :StartTime OR Posts.EditAt > :StartTime OR Posts.DeleteAt > :StartTime) AND
|
||||
Posts.Type = ''
|
||||
Posts.Type NOT LIKE 'system_%'
|
||||
ORDER BY PostUpdateAt
|
||||
LIMIT :Limit`
|
||||
|
||||
|
||||
@@ -11,17 +11,8 @@ import (
|
||||
"github.com/mattermost/mattermost-server/einterfaces"
|
||||
"github.com/mattermost/mattermost-server/model"
|
||||
"github.com/mattermost/mattermost-server/store"
|
||||
"github.com/mattermost/mattermost-server/utils"
|
||||
)
|
||||
|
||||
const (
|
||||
EMOJI_CACHE_SIZE = 5000
|
||||
EMOJI_CACHE_SEC = 1800 // 30 mins
|
||||
)
|
||||
|
||||
var emojiCacheById = utils.NewLru(EMOJI_CACHE_SIZE)
|
||||
var emojiIdCacheByName = utils.NewLru(EMOJI_CACHE_SIZE)
|
||||
|
||||
type SqlEmojiStore struct {
|
||||
SqlStore
|
||||
metrics einterfaces.MetricsInterface
|
||||
@@ -66,26 +57,10 @@ func (es SqlEmojiStore) Save(emoji *model.Emoji) (*model.Emoji, *model.AppError)
|
||||
}
|
||||
|
||||
func (es SqlEmojiStore) Get(id string, allowFromCache bool) (*model.Emoji, *model.AppError) {
|
||||
if allowFromCache {
|
||||
if emoji, ok := es.getFromCacheById(id); ok {
|
||||
return emoji, nil
|
||||
}
|
||||
}
|
||||
|
||||
return es.getBy("Id", id, allowFromCache)
|
||||
}
|
||||
|
||||
func (es SqlEmojiStore) GetByName(name string, allowFromCache bool) (*model.Emoji, *model.AppError) {
|
||||
if id, ok := model.GetSystemEmojiId(name); ok {
|
||||
return es.Get(id, allowFromCache)
|
||||
}
|
||||
|
||||
if allowFromCache {
|
||||
if emoji, ok := es.getFromCacheByName(name); ok {
|
||||
return emoji, nil
|
||||
}
|
||||
}
|
||||
|
||||
return es.getBy("Name", name, allowFromCache)
|
||||
}
|
||||
|
||||
@@ -139,8 +114,6 @@ func (es SqlEmojiStore) Delete(emoji *model.Emoji, time int64) *model.AppError {
|
||||
return model.NewAppError("SqlEmojiStore.Delete", "store.sql_emoji.delete.no_results", nil, "id="+emoji.Id, http.StatusBadRequest)
|
||||
}
|
||||
|
||||
es.removeFromCache(emoji)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -193,51 +166,5 @@ func (es SqlEmojiStore) getBy(what string, key interface{}, addToCache bool) (*m
|
||||
return nil, model.NewAppError("SqlEmojiStore.GetByName", "store.sql_emoji.get.app_error", nil, "key="+fmt.Sprintf("%v", key)+", "+err.Error(), status)
|
||||
}
|
||||
|
||||
if addToCache {
|
||||
es.addToCache(emoji)
|
||||
}
|
||||
|
||||
return emoji, nil
|
||||
}
|
||||
|
||||
func (es SqlEmojiStore) addToCache(emoji *model.Emoji) {
|
||||
emojiCacheById.AddWithExpiresInSecs(emoji.Id, emoji, EMOJI_CACHE_SEC)
|
||||
emojiIdCacheByName.AddWithExpiresInSecs(emoji.Name, emoji.Id, EMOJI_CACHE_SEC)
|
||||
}
|
||||
|
||||
func (es SqlEmojiStore) getFromCacheById(id string) (*model.Emoji, bool) {
|
||||
if cacheItem, ok := emojiCacheById.Get(id); ok {
|
||||
es.incrementMemCacheHitCounter("Emoji")
|
||||
return cacheItem.(*model.Emoji), true
|
||||
}
|
||||
es.incrementMemCacheMissCounter("Emoji")
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func (es SqlEmojiStore) getFromCacheByName(name string) (*model.Emoji, bool) {
|
||||
if id, ok := emojiIdCacheByName.Get(name); ok {
|
||||
return es.getFromCacheById(id.(string))
|
||||
}
|
||||
|
||||
es.incrementMemCacheMissCounter("Emoji")
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func (es SqlEmojiStore) incrementMemCacheHitCounter(cache string) {
|
||||
if es.metrics == nil {
|
||||
return
|
||||
}
|
||||
es.metrics.IncrementMemCacheHitCounter(cache)
|
||||
}
|
||||
|
||||
func (es SqlEmojiStore) incrementMemCacheMissCounter(cache string) {
|
||||
if es.metrics == nil {
|
||||
return
|
||||
}
|
||||
es.metrics.IncrementMemCacheMissCounter(cache)
|
||||
}
|
||||
|
||||
func (es SqlEmojiStore) removeFromCache(emoji *model.Emoji) {
|
||||
emojiCacheById.Remove(emoji.Id)
|
||||
emojiIdCacheByName.Remove(emoji.Name)
|
||||
}
|
||||
|
||||
@@ -18,7 +18,8 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
CURRENT_SCHEMA_VERSION = VERSION_5_16_0
|
||||
CURRENT_SCHEMA_VERSION = VERSION_5_17_0
|
||||
VERSION_5_17_0 = "5.17.0"
|
||||
VERSION_5_16_0 = "5.16.0"
|
||||
VERSION_5_15_0 = "5.15.0"
|
||||
VERSION_5_14_0 = "5.14.0"
|
||||
@@ -163,6 +164,7 @@ func upgradeDatabase(sqlStore SqlStore, currentModelVersionString string) error
|
||||
upgradeDatabaseToVersion514(sqlStore)
|
||||
upgradeDatabaseToVersion515(sqlStore)
|
||||
upgradeDatabaseToVersion516(sqlStore)
|
||||
upgradeDatabaseToVersion517(sqlStore)
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -721,3 +723,9 @@ func upgradeDatabaseToVersion516(sqlStore SqlStore) {
|
||||
sqlStore.CreateIndexIfNotExists("idx_groupchannels_channelid", "GroupChannels", "ChannelId")
|
||||
}
|
||||
}
|
||||
|
||||
func upgradeDatabaseToVersion517(sqlStore SqlStore) {
|
||||
if shouldPerformUpgrade(sqlStore, VERSION_5_16_0, VERSION_5_17_0) {
|
||||
saveSchemaVersion(sqlStore, VERSION_5_17_0)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,6 +141,40 @@ func (us SqlUserStore) Save(user *model.User) (*model.User, *model.AppError) {
|
||||
return user, nil
|
||||
}
|
||||
|
||||
func (us SqlUserStore) DeactivateGuests() ([]string, *model.AppError) {
|
||||
curTime := model.GetMillis()
|
||||
updateQuery := us.getQueryBuilder().Update("Users").
|
||||
Set("UpdateAt", curTime).
|
||||
Set("DeleteAt", curTime).
|
||||
Where(sq.Eq{"Roles": "system_guest"}).
|
||||
Where(sq.Eq{"DeleteAt": 0})
|
||||
|
||||
queryString, args, err := updateQuery.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlUserStore.UpdateActiveForMultipleUsers", "store.sql_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
_, err = us.GetMaster().Exec(queryString, args...)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlUserStore.UpdateActiveForMultipleUsers", "store.sql_user.update_active_for_multiple_users.updating.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
selectQuery := us.getQueryBuilder().Select("Id").From("Users").Where(sq.Eq{"DeleteAt": curTime})
|
||||
|
||||
queryString, args, err = selectQuery.ToSql()
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlUserStore.UpdateActiveForMultipleUsers", "store.sql_user.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
userIds := []string{}
|
||||
_, err = us.GetMaster().Select(&userIds, queryString, args...)
|
||||
if err != nil {
|
||||
return nil, model.NewAppError("SqlUserStore.UpdateActiveForMultipleUsers", "store.sql_user.update_active_for_multiple_users.getting_changed_users.app_error", nil, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
return userIds, nil
|
||||
}
|
||||
|
||||
func (us SqlUserStore) Update(user *model.User, trustedUpdateData bool) (*model.UserUpdate, *model.AppError) {
|
||||
user.PreUpdate()
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user