MM-32693: Use master when emoji_layer is invalidated (#16951)

We add a map which tracks invalidations to the emoji caches
and use master whenever a fresh item is fetched from DB.

https://mattermost.atlassian.net/browse/MM-32693

```release-note
NONE
```

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Agniva De Sarker
2021-02-26 22:17:51 +05:30
коммит произвёл GitHub
родитель 33c8b0ad73
Коммит 6dcbad049c
14 изменённых файлов: 169 добавлений и 84 удалений

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

@@ -5,6 +5,7 @@ package app
import (
"bytes"
"context"
"errors"
"fmt"
"image"
@@ -57,7 +58,7 @@ func (a *App) CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartIma
return nil, model.NewAppError("createEmoji", "api.emoji.create.other_user.app_error", nil, "", http.StatusForbidden)
}
if existingEmoji, err := a.Srv().Store.Emoji().GetByName(emoji.Name, true); err == nil && existingEmoji != nil {
if existingEmoji, err := a.Srv().Store.Emoji().GetByName(context.Background(), emoji.Name, true); err == nil && existingEmoji != nil {
return nil, model.NewAppError("createEmoji", "api.emoji.create.duplicate.app_error", nil, "", http.StatusBadRequest)
}
@@ -185,7 +186,7 @@ func (a *App) GetEmoji(emojiId string) (*model.Emoji, *model.AppError) {
return nil, model.NewAppError("GetEmoji", "api.emoji.storage.app_error", nil, "", http.StatusNotImplemented)
}
emoji, err := a.Srv().Store.Emoji().Get(emojiId, false)
emoji, err := a.Srv().Store.Emoji().Get(context.Background(), emojiId, false)
if err != nil {
var nfErr *store.ErrNotFound
switch {
@@ -208,7 +209,7 @@ func (a *App) GetEmojiByName(emojiName string) (*model.Emoji, *model.AppError) {
return nil, model.NewAppError("GetEmojiByName", "api.emoji.storage.app_error", nil, "", http.StatusNotImplemented)
}
emoji, err := a.Srv().Store.Emoji().GetByName(emojiName, true)
emoji, err := a.Srv().Store.Emoji().GetByName(context.Background(), emojiName, true)
if err != nil {
var nfErr *store.ErrNotFound
switch {
@@ -236,7 +237,7 @@ func (a *App) GetMultipleEmojiByName(names []string) ([]*model.Emoji, *model.App
}
func (a *App) GetEmojiImage(emojiId string) ([]byte, string, *model.AppError) {
_, storeErr := a.Srv().Store.Emoji().Get(emojiId, true)
_, storeErr := a.Srv().Store.Emoji().Get(context.Background(), emojiId, true)
if storeErr != nil {
var nfErr *store.ErrNotFound
switch {
@@ -282,7 +283,7 @@ func (a *App) GetEmojiStaticUrl(emojiName string) (string, *model.AppError) {
return path.Join(subPath, "/static/emoji", id+".png"), nil
}
emoji, err := a.Srv().Store.Emoji().GetByName(emojiName, true)
emoji, err := a.Srv().Store.Emoji().GetByName(context.Background(), emojiName, true)
if err == nil {
return path.Join(subPath, "/api/v4/emoji", emoji.Id, "image"), nil
}

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

@@ -1735,7 +1735,7 @@ func (a *App) importEmoji(data *EmojiImportData, dryRun bool) *model.AppError {
var emoji *model.Emoji
emoji, err := a.Srv().Store.Emoji().GetByName(*data.Name, true)
emoji, err := a.Srv().Store.Emoji().GetByName(context.Background(), *data.Name, true)
if err != nil {
var nfErr *store.ErrNotFound
if !errors.As(err, &nfErr) {

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

@@ -3853,7 +3853,7 @@ func TestImportImportEmoji(t *testing.T) {
err := th.App.importEmoji(&data, true)
assert.NotNil(t, err, "Invalid emoji should have failed dry run")
emoji, nErr := th.App.Srv().Store.Emoji().GetByName(*data.Name, true)
emoji, nErr := th.App.Srv().Store.Emoji().GetByName(context.Background(), *data.Name, true)
assert.Nil(t, emoji, "Emoji should not have been imported")
assert.Error(t, nErr)
@@ -3873,7 +3873,7 @@ func TestImportImportEmoji(t *testing.T) {
err = th.App.importEmoji(&data, false)
assert.Nil(t, err, "Valid emoji should have succeeded apply mode")
emoji, nErr = th.App.Srv().Store.Emoji().GetByName(*data.Name, true)
emoji, nErr = th.App.Srv().Store.Emoji().GetByName(context.Background(), *data.Name, true)
assert.NotNil(t, emoji, "Emoji should have been imported")
assert.NoError(t, nErr, "Emoji should have been imported without any error")