[MM-21378] Add mutex to model.Post to guard against race conditions on Post.Props (#13884)
* Add mutex to model.Post to guard against race conditions on Post.Props * Rename mutex * Add GetProp() method to Post * Fix more tests * Fix flaky test Benchmarks: BenchmarkPostPropsGet_indirect BenchmarkPostPropsGet_indirect-2 85026746 13.0 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_indirect-4 90273747 13.0 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_indirect-8 88324293 13.0 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_indirect-16 91427720 13.1 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_direct BenchmarkPostPropsGet_direct-2 1000000000 0.242 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_direct-4 1000000000 0.241 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_direct-8 1000000000 0.240 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsGet_direct-16 1000000000 0.241 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsAdd_indirect BenchmarkPostPropsAdd_indirect-2 5602224 203 ns/op 336 B/op 2 allocs/op BenchmarkPostPropsAdd_indirect-4 5959496 206 ns/op 336 B/op 2 allocs/op BenchmarkPostPropsAdd_indirect-8 5833999 205 ns/op 336 B/op 2 allocs/op BenchmarkPostPropsAdd_indirect-16 5802493 225 ns/op 336 B/op 2 allocs/op BenchmarkPostPropsAdd_direct BenchmarkPostPropsAdd_direct-2 100000000 11.3 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsAdd_direct-4 100000000 11.3 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsAdd_direct-8 100000000 11.6 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsAdd_direct-16 99840794 11.4 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsDel_indirect BenchmarkPostPropsDel_indirect-2 18824002 61.9 ns/op 48 B/op 1 allocs/op BenchmarkPostPropsDel_indirect-4 19470736 63.8 ns/op 48 B/op 1 allocs/op BenchmarkPostPropsDel_indirect-8 17640460 65.3 ns/op 48 B/op 1 allocs/op BenchmarkPostPropsDel_indirect-16 18692962 65.4 ns/op 48 B/op 1 allocs/op BenchmarkPostPropsDel_direct BenchmarkPostPropsDel_direct-2 516257440 2.34 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsDel_direct-4 514865216 2.43 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsDel_direct-8 511330477 2.37 ns/op 0 B/op 0 allocs/op BenchmarkPostPropsDel_direct-16 499504010 2.38 ns/op 0 B/op 0 allocs/op
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
9e580361c2
Коммит
1e53fe85ad
@@ -38,7 +38,7 @@ func TestCreatePost(t *testing.T) {
|
||||
require.Equal(t, "#hashtag", rpost.Hashtags, "hashtag didn't match")
|
||||
require.Empty(t, rpost.FileIds)
|
||||
require.Equal(t, 0, int(rpost.EditAt), "newly created post shouldn't have EditAt set")
|
||||
require.Nil(t, rpost.Props[model.PROPS_ADD_CHANNEL_MEMBER], "newly created post shouldn't have Props['add_channel_member'] set")
|
||||
require.Nil(t, rpost.GetProp(model.PROPS_ADD_CHANNEL_MEMBER), "newly created post shouldn't have Props['add_channel_member'] set")
|
||||
|
||||
post.RootId = rpost.Id
|
||||
post.ParentId = rpost.Id
|
||||
@@ -574,7 +574,7 @@ func TestCreatePostSendOutOfChannelMentions(t *testing.T) {
|
||||
|
||||
wpost := model.PostFromJson(strings.NewReader(event.GetData()["post"].(string)))
|
||||
|
||||
acm, ok := wpost.Props[model.PROPS_ADD_CHANNEL_MEMBER].(map[string]interface{})
|
||||
acm, ok := wpost.GetProp(model.PROPS_ADD_CHANNEL_MEMBER).(map[string]interface{})
|
||||
require.True(t, ok, "should have received ephemeral post with 'add_channel_member' in props")
|
||||
require.True(t, acm["post_id"] != nil, "should not be nil")
|
||||
require.True(t, acm["user_ids"] != nil, "should not be nil")
|
||||
@@ -677,20 +677,20 @@ func TestUpdatePost(t *testing.T) {
|
||||
t.Run("new message, invalid props", func(t *testing.T) {
|
||||
msg1 := "#hashtag a" + model.NewId() + " update post again"
|
||||
rpost.Message = msg1
|
||||
rpost.Props[model.PROPS_ADD_CHANNEL_MEMBER] = "no good"
|
||||
rpost.AddProp(model.PROPS_ADD_CHANNEL_MEMBER, "no good")
|
||||
rrupost, resp := Client.UpdatePost(rpost.Id, rpost)
|
||||
CheckNoError(t, resp)
|
||||
|
||||
assert.Equal(t, msg1, rrupost.Message, "failed to update message")
|
||||
assert.Equal(t, "#hashtag", rrupost.Hashtags, "failed to update hashtags")
|
||||
assert.Nil(t, rrupost.Props[model.PROPS_ADD_CHANNEL_MEMBER], "failed to sanitize Props['add_channel_member'], should be nil")
|
||||
assert.Nil(t, rrupost.GetProp(model.PROPS_ADD_CHANNEL_MEMBER), "failed to sanitize Props['add_channel_member'], should be nil")
|
||||
|
||||
actual, resp := Client.GetPost(rpost.Id, "")
|
||||
CheckNoError(t, resp)
|
||||
|
||||
assert.Equal(t, msg1, actual.Message, "failed to update message")
|
||||
assert.Equal(t, "#hashtag", actual.Hashtags, "failed to update hashtags")
|
||||
assert.Nil(t, actual.Props[model.PROPS_ADD_CHANNEL_MEMBER], "failed to sanitize Props['add_channel_member'], should be nil")
|
||||
assert.Nil(t, actual.GetProp(model.PROPS_ADD_CHANNEL_MEMBER), "failed to sanitize Props['add_channel_member'], should be nil")
|
||||
})
|
||||
|
||||
t.Run("join/leave post", func(t *testing.T) {
|
||||
@@ -848,7 +848,7 @@ func TestPatchPost(t *testing.T) {
|
||||
|
||||
assert.False(t, rpost.IsPinned, "IsPinned did not update properly")
|
||||
assert.Equal(t, "#otherhashtag other message", rpost.Message, "Message did not update properly")
|
||||
assert.Equal(t, *patch.Props, rpost.Props, "Props did not update properly")
|
||||
assert.Equal(t, *patch.Props, rpost.GetProps(), "Props did not update properly")
|
||||
assert.Equal(t, "#otherhashtag", rpost.Hashtags, "Message did not update properly")
|
||||
assert.Equal(t, model.StringArray(fileIds[0:2]), rpost.FileIds, "FileIds should not update")
|
||||
assert.False(t, rpost.HasReactions, "HasReactions did not update properly")
|
||||
@@ -865,7 +865,7 @@ func TestPatchPost(t *testing.T) {
|
||||
|
||||
rpost2, resp := Client.PatchPost(post.Id, patch2)
|
||||
CheckNoError(t, resp)
|
||||
assert.NotEmpty(t, rpost2.Props["attachments"])
|
||||
assert.NotEmpty(t, rpost2.GetProp("attachments"))
|
||||
assert.NotEqual(t, rpost.EditAt, rpost2.EditAt)
|
||||
})
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user