https://mattermost.atlassian.net/browse/MM-52216
```release-note
NONE
```
Этот коммит содержится в:
Agniva De Sarker
2023-04-21 22:23:56 +05:30
коммит произвёл GitHub
родитель 041cbe2d24
Коммит 67735be261
6 изменённых файлов: 34 добавлений и 10 удалений

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

@@ -3073,7 +3073,7 @@ func (s SqlChannelStore) Autocomplete(userID, term string, includeDeleted, isGue
channels := model.ChannelListWithTeamData{} channels := model.ChannelListWithTeamData{}
err = s.GetReplicaX().Select(&channels, sql, args...) err = s.GetReplicaX().Select(&channels, sql, args...)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "could not find channel with term=%s", term) return nil, errors.Wrapf(err, "could not find channel with term=%s", trimInput(term))
} }
return channels, nil return channels, nil
} }
@@ -3186,7 +3186,7 @@ func (s SqlChannelStore) AutocompleteInTeamForSearch(teamID string, userID strin
// query the database // query the database
err = s.GetReplicaX().Select(&channels, sql, args...) err = s.GetReplicaX().Select(&channels, sql, args...)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "failed to find Channels with term='%s'", term) return nil, errors.Wrapf(err, "failed to find Channels with term='%s'", trimInput(term))
} }
directChannels, err := s.autocompleteInTeamForSearchDirectMessages(userID, term) directChannels, err := s.autocompleteInTeamForSearchDirectMessages(userID, term)
@@ -3242,7 +3242,7 @@ func (s SqlChannelStore) autocompleteInTeamForSearchDirectMessages(userID string
// query the channel list from the database using SQLX // query the channel list from the database using SQLX
channels := model.ChannelList{} channels := model.ChannelList{}
if err := s.GetReplicaX().Select(&channels, sql, args...); err != nil { if err := s.GetReplicaX().Select(&channels, sql, args...); err != nil {
return nil, errors.Wrapf(err, "failed to find Channels with term='%s' (%s %% %v)", term, sql, args) return nil, errors.Wrapf(err, "failed to find Channels with term='%s'", trimInput(term))
} }
return channels, nil return channels, nil
@@ -3461,7 +3461,7 @@ func (s SqlChannelStore) SearchAllChannels(term string, opts store.ChannelSearch
} }
channels := model.ChannelListWithTeamData{} channels := model.ChannelListWithTeamData{}
if err2 := s.GetReplicaX().Select(&channels, queryString, args...); err2 != nil { if err2 := s.GetReplicaX().Select(&channels, queryString, args...); err2 != nil {
return nil, 0, errors.Wrapf(err2, "failed to find Channels with term='%s'", term) return nil, 0, errors.Wrapf(err2, "failed to find Channels with term='%s'", trimInput(term))
} }
var totalCount int64 var totalCount int64
@@ -3474,7 +3474,7 @@ func (s SqlChannelStore) SearchAllChannels(term string, opts store.ChannelSearch
return nil, 0, errors.Wrap(err, "channel_tosql") return nil, 0, errors.Wrap(err, "channel_tosql")
} }
if err2 := s.GetReplicaX().Get(&totalCount, queryString, args...); err2 != nil { if err2 := s.GetReplicaX().Get(&totalCount, queryString, args...); err2 != nil {
return nil, 0, errors.Wrapf(err2, "failed to find Channels with term='%s'", term) return nil, 0, errors.Wrapf(err2, "failed to find Channels with term='%s'", trimInput(term))
} }
} else { } else {
totalCount = int64(len(channels)) totalCount = int64(len(channels))
@@ -3651,7 +3651,7 @@ func (s SqlChannelStore) performSearch(searchQuery sq.SelectBuilder, term string
channels := model.ChannelList{} channels := model.ChannelList{}
err = s.GetReplicaX().Select(&channels, sql, args...) err = s.GetReplicaX().Select(&channels, sql, args...)
if err != nil { if err != nil {
return channels, errors.Wrapf(err, "failed to find Channels with term='%s'", term) return channels, errors.Wrapf(err, "failed to find Channels with term='%s'", trimInput(term))
} }
return channels, nil return channels, nil
@@ -3744,7 +3744,7 @@ func (s SqlChannelStore) SearchGroupChannels(userId, term string) (model.Channel
groupChannels := model.ChannelList{} groupChannels := model.ChannelList{}
if err := s.GetReplicaX().Select(&groupChannels, sql, params...); err != nil { if err := s.GetReplicaX().Select(&groupChannels, sql, params...); err != nil {
return nil, errors.Wrapf(err, "failed to find Channels with term='%s' and userId=%s", term, userId) return nil, errors.Wrapf(err, "failed to find Channels with term='%s' and userId=%s", trimInput(term), userId)
} }
return groupChannels, nil return groupChannels, nil
} }

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

@@ -681,7 +681,7 @@ func (fs SqlFileInfoStore) Search(paramsList []*model.SearchParams, userId, team
items := []fileInfoWithChannelID{} items := []fileInfoWithChannelID{}
err = fs.GetSearchReplicaX().Select(&items, queryString, args...) err = fs.GetSearchReplicaX().Select(&items, queryString, args...)
if err != nil { if err != nil {
mlog.Warn("Query error searching files.", mlog.Err(err)) mlog.Warn("Query error searching files.", mlog.String("error", trimInput(err.Error())))
// Don't return the error to the caller as it is of no use to the user. Instead return an empty set of search results. // Don't return the error to the caller as it is of no use to the user. Instead return an empty set of search results.
} else { } else {
for _, item := range items { for _, item := range items {

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

@@ -2075,7 +2075,7 @@ func (s *SqlPostStore) search(teamId string, userId string, params *model.Search
var posts []*model.Post var posts []*model.Post
if err := s.GetSearchReplicaX().Select(&posts, searchQuery, searchQueryArgs...); err != nil { if err := s.GetSearchReplicaX().Select(&posts, searchQuery, searchQueryArgs...); err != nil {
mlog.Warn("Query error searching posts.", mlog.Err(err)) mlog.Warn("Query error searching posts.", mlog.String("error", trimInput(err.Error())))
// Don't return the error to the caller as it is of no use to the user. Instead return an empty set of search results. // Don't return the error to the caller as it is of no use to the user. Instead return an empty set of search results.
} else { } else {
for _, p := range posts { for _, p := range posts {

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

@@ -233,3 +233,14 @@ func SanitizeDataSource(driverName, dataSource string) (string, error) {
return "", errors.New("invalid drivername. Not postgres or mysql.") return "", errors.New("invalid drivername. Not postgres or mysql.")
} }
} }
const maxTokenSize = 50
// trimInput limits the string to a max size to prevent clogging up disk space
// while logging
func trimInput(input string) string {
if len(input) > maxTokenSize {
input = input[:maxTokenSize] + "..."
}
return input
}

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

@@ -251,6 +251,8 @@ type AppError struct {
wrapped error wrapped error
} }
const maxErrorLength = 1024
func (er *AppError) Error() string { func (er *AppError) Error() string {
var sb strings.Builder var sb strings.Builder
@@ -276,7 +278,11 @@ func (er *AppError) Error() string {
sb.WriteString(err.Error()) sb.WriteString(err.Error())
} }
return sb.String() res := sb.String()
if len(res) > maxErrorLength {
res = res[:maxErrorLength] + "..."
}
return res
} }
func (er *AppError) Translate(T i18n.TranslateFunc) { func (er *AppError) Translate(T i18n.TranslateFunc) {

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

@@ -116,6 +116,13 @@ func TestAppErrorRender(t *testing.T) {
aerr := NewAppError("here", "message", nil, "details", http.StatusTeapot).Wrap(fmt.Errorf("my error (%w)", fmt.Errorf("inner error"))) aerr := NewAppError("here", "message", nil, "details", http.StatusTeapot).Wrap(fmt.Errorf("my error (%w)", fmt.Errorf("inner error")))
assert.EqualError(t, aerr, "here: message, details, my error (inner error)") assert.EqualError(t, aerr, "here: message, details, my error (inner error)")
}) })
t.Run("MaxLength", func(t *testing.T) {
str := strings.Repeat("error", 65536)
msg := "msg"
aerr := NewAppError("id", msg, nil, str, http.StatusTeapot).Wrap(errors.New(str))
assert.Len(t, aerr.Error(), maxErrorLength+len(msg))
})
} }
func TestAppErrorSerialize(t *testing.T) { func TestAppErrorSerialize(t *testing.T) {