[MM-15274] Migrate "Team.Get" to Sync by default (#10694)

* Migrate Team.Get to Sync by default

* change parseRange return value to ok

* fix formatting

* remove err checks

* use require.nil

* require nil
Этот коммит содержится в:
tengis b
2019-04-27 01:18:07 +09:00
коммит произвёл Jesús Espino
родитель 2f237d68b7
Коммит 8252eab5da
14 изменённых файлов: 115 добавлений и 98 удалений

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

@@ -1922,12 +1922,10 @@ func (a *App) MoveChannel(team *model.Team, channel *model.Channel, user *model.
} }
// keep instance of the previous team // keep instance of the previous team
var previousTeam *model.Team previousTeam, err := a.Srv.Store.Team().Get(channel.TeamId)
result := <-a.Srv.Store.Team().Get(channel.TeamId) if err != nil {
if result.Err != nil { return err
return result.Err
} }
previousTeam = result.Data.(*model.Team)
channel.TeamId = team.Id channel.TeamId = team.Id
if result := <-a.Srv.Store.Channel().Update(channel); result.Err != nil { if result := <-a.Srv.Store.Channel().Update(channel); result.Err != nil {

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

@@ -224,7 +224,14 @@ func (a *App) tryExecuteCustomCommand(args *model.CommandArgs, trigger string, m
chanChan <- store.StoreResult{Data: channel, Err: err} chanChan <- store.StoreResult{Data: channel, Err: err}
close(chanChan) close(chanChan)
}() }()
teamChan := a.Srv.Store.Team().Get(args.TeamId)
teamChan := make(chan store.StoreResult, 1)
go func() {
team, err := a.Srv.Store.Team().Get(args.TeamId)
teamChan <- store.StoreResult{Data: team, Err: err}
close(teamChan)
}()
userChan := make(chan store.StoreResult, 1) userChan := make(chan store.StoreResult, 1)
go func() { go func() {
user, err := a.Srv.Store.User().Get(args.UserId) user, err := a.Srv.Store.User().Get(args.UserId)

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

@@ -184,12 +184,9 @@ func (me *LoadTestProvider) SetupCommand(a *App, args *model.CommandArgs, messag
} }
} }
} else { } else {
team, err := a.Srv.Store.Team().Get(args.TeamId)
var team *model.Team if err != nil {
if tr := <-a.Srv.Store.Team().Get(args.TeamId); tr.Err != nil {
return &model.CommandResponse{Text: "Failed to create testing environment", ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} return &model.CommandResponse{Text: "Failed to create testing environment", ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
} else {
team = tr.Data.(*model.Team)
} }
client.MockSession(args.Session.Token) client.MockSession(args.Session.Token)
@@ -215,16 +212,14 @@ func (me *LoadTestProvider) UsersCommand(a *App, args *model.CommandArgs, messag
cmd = strings.TrimSpace(strings.TrimPrefix(cmd, "fuzz")) cmd = strings.TrimSpace(strings.TrimPrefix(cmd, "fuzz"))
} }
usersr, err := parseRange(cmd, "") usersr, ok := parseRange(cmd, "")
if !err { if !ok {
usersr = utils.Range{Begin: 2, End: 5} usersr = utils.Range{Begin: 2, End: 5}
} }
var team *model.Team team, err := a.Srv.Store.Team().Get(args.TeamId)
if tr := <-a.Srv.Store.Team().Get(args.TeamId); tr.Err != nil { if err != nil {
return &model.CommandResponse{Text: "Failed to create testing environment", ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} return &model.CommandResponse{Text: "Failed to create testing environment", ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
} else {
team = tr.Data.(*model.Team)
} }
client := model.NewAPIv4Client(args.SiteURL) client := model.NewAPIv4Client(args.SiteURL)
@@ -244,16 +239,14 @@ func (me *LoadTestProvider) ChannelsCommand(a *App, args *model.CommandArgs, mes
cmd = strings.TrimSpace(strings.TrimPrefix(cmd, "fuzz")) cmd = strings.TrimSpace(strings.TrimPrefix(cmd, "fuzz"))
} }
channelsr, err := parseRange(cmd, "") channelsr, ok := parseRange(cmd, "")
if !err { if !ok {
channelsr = utils.Range{Begin: 2, End: 5} channelsr = utils.Range{Begin: 2, End: 5}
} }
var team *model.Team team, err := a.Srv.Store.Team().Get(args.TeamId)
if tr := <-a.Srv.Store.Team().Get(args.TeamId); tr.Err != nil { if err != nil {
return &model.CommandResponse{Text: "Failed to create testing environment", ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} return &model.CommandResponse{Text: "Failed to create testing environment", ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
} else {
team = tr.Data.(*model.Team)
} }
client := model.NewAPIv4Client(args.SiteURL) client := model.NewAPIv4Client(args.SiteURL)
@@ -274,8 +267,8 @@ func (me *LoadTestProvider) PostsCommand(a *App, args *model.CommandArgs, messag
cmd = strings.TrimSpace(strings.TrimPrefix(cmd, "fuzz")) cmd = strings.TrimSpace(strings.TrimPrefix(cmd, "fuzz"))
} }
postsr, err := parseRange(cmd, "") postsr, ok := parseRange(cmd, "")
if !err { if !ok {
postsr = utils.Range{Begin: 20, End: 30} postsr = utils.Range{Begin: 20, End: 30}
} }

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

@@ -363,11 +363,11 @@ func (a *App) FillInPostProps(post *model.Post, channel *model.Channel) *model.A
func (a *App) handlePostEvents(post *model.Post, user *model.User, channel *model.Channel, triggerWebhooks bool, parentPostList *model.PostList) error { func (a *App) handlePostEvents(post *model.Post, user *model.User, channel *model.Channel, triggerWebhooks bool, parentPostList *model.PostList) error {
var team *model.Team var team *model.Team
if len(channel.TeamId) > 0 { if len(channel.TeamId) > 0 {
result := <-a.Srv.Store.Team().Get(channel.TeamId) t, err := a.Srv.Store.Team().Get(channel.TeamId)
if result.Err != nil { if err != nil {
return result.Err return err
} }
team = result.Data.(*model.Team) team = t
} else { } else {
// Blank team for DMs // Blank team for DMs
team = &model.Team{} team = &model.Team{}

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

@@ -141,12 +141,11 @@ func (a *App) SlackAddUsers(teamId string, slackusers []SlackUser, importerLog *
addedUsers := make(map[string]*model.User) addedUsers := make(map[string]*model.User)
// Need the team // Need the team
result := <-a.Srv.Store.Team().Get(teamId) team, err := a.Srv.Store.Team().Get(teamId)
if result.Err != nil { if err != nil {
importerLog.WriteString(utils.T("api.slackimport.slack_import.team_fail")) importerLog.WriteString(utils.T("api.slackimport.slack_import.team_fail"))
return addedUsers return addedUsers
} }
team := result.Data.(*model.Team)
for _, sUser := range slackusers { for _, sUser := range slackusers {
firstName := sUser.Profile.FirstName firstName := sUser.Profile.FirstName
@@ -193,12 +192,11 @@ func (a *App) SlackAddUsers(teamId string, slackusers []SlackUser, importerLog *
} }
func (a *App) SlackAddBotUser(teamId string, log *bytes.Buffer) *model.User { func (a *App) SlackAddBotUser(teamId string, log *bytes.Buffer) *model.User {
result := <-a.Srv.Store.Team().Get(teamId) team, err := a.Srv.Store.Team().Get(teamId)
if result.Err != nil { if err != nil {
log.WriteString(utils.T("api.slackimport.slack_import.team_fail")) log.WriteString(utils.T("api.slackimport.slack_import.team_fail"))
return nil return nil
} }
team := result.Data.(*model.Team)
password := model.NewId() password := model.NewId()
username := "slackimportuser_" + model.NewId() username := "slackimportuser_" + model.NewId()

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

@@ -340,7 +340,13 @@ func (a *App) sendUpdatedMemberRoleEvent(userId string, member *model.TeamMember
} }
func (a *App) AddUserToTeam(teamId string, userId string, userRequestorId string) (*model.Team, *model.AppError) { func (a *App) AddUserToTeam(teamId string, userId string, userRequestorId string) (*model.Team, *model.AppError) {
tchan := a.Srv.Store.Team().Get(teamId) tchan := make(chan store.StoreResult, 1)
go func() {
team, err := a.Srv.Store.Team().Get(teamId)
tchan <- store.StoreResult{Data: team, Err: err}
close(tchan)
}()
uchan := make(chan store.StoreResult, 1) uchan := make(chan store.StoreResult, 1)
go func() { go func() {
user, err := a.Srv.Store.User().Get(userId) user, err := a.Srv.Store.User().Get(userId)
@@ -368,11 +374,12 @@ func (a *App) AddUserToTeam(teamId string, userId string, userRequestorId string
} }
func (a *App) AddUserToTeamByTeamId(teamId string, user *model.User) *model.AppError { func (a *App) AddUserToTeamByTeamId(teamId string, user *model.User) *model.AppError {
result := <-a.Srv.Store.Team().Get(teamId) team, err := a.Srv.Store.Team().Get(teamId)
if result.Err != nil { if err != nil {
return result.Err return err
} }
return a.JoinUserToTeam(result.Data.(*model.Team), user, "")
return a.JoinUserToTeam(team, user, "")
} }
func (a *App) AddUserToTeamByToken(userId string, tokenId string) (*model.Team, *model.AppError) { func (a *App) AddUserToTeamByToken(userId string, tokenId string) (*model.Team, *model.AppError) {
@@ -393,7 +400,13 @@ func (a *App) AddUserToTeamByToken(userId string, tokenId string) (*model.Team,
tokenData := model.MapFromJson(strings.NewReader(token.Extra)) tokenData := model.MapFromJson(strings.NewReader(token.Extra))
tchan := a.Srv.Store.Team().Get(tokenData["teamId"]) tchan := make(chan store.StoreResult, 1)
go func() {
team, err := a.Srv.Store.Team().Get(tokenData["teamId"])
tchan <- store.StoreResult{Data: team, Err: err}
close(tchan)
}()
uchan := make(chan store.StoreResult, 1) uchan := make(chan store.StoreResult, 1)
go func() { go func() {
user, err := a.Srv.Store.User().Get(userId) user, err := a.Srv.Store.User().Get(userId)
@@ -556,11 +569,7 @@ func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId
} }
func (a *App) GetTeam(teamId string) (*model.Team, *model.AppError) { func (a *App) GetTeam(teamId string) (*model.Team, *model.AppError) {
result := <-a.Srv.Store.Team().Get(teamId) return a.Srv.Store.Team().Get(teamId)
if result.Err != nil {
return nil, result.Err
}
return result.Data.(*model.Team), nil
} }
func (a *App) GetTeamByName(name string) (*model.Team, *model.AppError) { func (a *App) GetTeamByName(name string) (*model.Team, *model.AppError) {
@@ -797,7 +806,13 @@ func (a *App) GetTeamUnread(teamId, userId string) (*model.TeamUnread, *model.Ap
} }
func (a *App) RemoveUserFromTeam(teamId string, userId string, requestorId string) *model.AppError { func (a *App) RemoveUserFromTeam(teamId string, userId string, requestorId string) *model.AppError {
tchan := a.Srv.Store.Team().Get(teamId) tchan := make(chan store.StoreResult, 1)
go func() {
team, err := a.Srv.Store.Team().Get(teamId)
tchan <- store.StoreResult{Data: team, Err: err}
close(tchan)
}()
uchan := make(chan store.StoreResult, 1) uchan := make(chan store.StoreResult, 1)
go func() { go func() {
user, err := a.Srv.Store.User().Get(userId) user, err := a.Srv.Store.User().Get(userId)
@@ -967,7 +982,13 @@ func (a *App) InviteNewUsersToTeam(emailList []string, teamId, senderId string)
return err return err
} }
tchan := a.Srv.Store.Team().Get(teamId) tchan := make(chan store.StoreResult, 1)
go func() {
team, err := a.Srv.Store.Team().Get(teamId)
tchan <- store.StoreResult{Data: team, Err: err}
close(tchan)
}()
uchan := make(chan store.StoreResult, 1) uchan := make(chan store.StoreResult, 1)
go func() { go func() {
user, err := a.Srv.Store.User().Get(senderId) user, err := a.Srv.Store.User().Get(senderId)

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

@@ -67,11 +67,10 @@ func (a *App) CreateUserWithToken(user *model.User, tokenId string) (*model.User
tokenData := model.MapFromJson(strings.NewReader(token.Extra)) tokenData := model.MapFromJson(strings.NewReader(token.Extra))
result = <-a.Srv.Store.Team().Get(tokenData["teamId"]) team, err := a.Srv.Store.Team().Get(tokenData["teamId"])
if result.Err != nil { if err != nil {
return nil, result.Err return nil, err
} }
team := result.Data.(*model.Team)
user.Email = tokenData["email"] user.Email = tokenData["email"]
user.EmailVerified = true user.EmailVerified = true

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

@@ -24,8 +24,8 @@ func getTeamFromTeamArg(a *app.App, teamArg string) *model.Team {
} }
if team == nil { if team == nil {
if result := <-a.Srv.Store.Team().Get(teamArg); result.Err == nil { if t, err := a.Srv.Store.Team().Get(teamArg); err == nil {
team = result.Data.(*model.Team) team = t
} }
} }

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

@@ -398,9 +398,8 @@ func (s *SqlSupplier) GroupCreateGroupSyncable(ctx context.Context, groupSyncabl
switch groupSyncable.Type { switch groupSyncable.Type {
case model.GroupSyncableTypeTeam: case model.GroupSyncableTypeTeam:
teamResult := <-s.Team().Get(groupSyncable.SyncableId) if _, err := s.Team().Get(groupSyncable.SyncableId); err != nil {
if teamResult.Err != nil { result.Err = err
result.Err = teamResult.Err
return result return result
} }

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

@@ -238,22 +238,16 @@ func (s SqlTeamStore) UpdateDisplayName(name string, teamId string) store.StoreC
}) })
} }
func (s SqlTeamStore) Get(id string) store.StoreChannel { func (s SqlTeamStore) Get(id string) (*model.Team, *model.AppError) {
return store.Do(func(result *store.StoreResult) { obj, err := s.GetReplica().Get(model.Team{}, id)
obj, err := s.GetReplica().Get(model.Team{}, id) if err != nil {
if err != nil { return nil, model.NewAppError("SqlTeamStore.Get", "store.sql_team.get.finding.app_error", nil, "id="+id+", "+err.Error(), http.StatusInternalServerError)
result.Err = model.NewAppError("SqlTeamStore.Get", "store.sql_team.get.finding.app_error", nil, "id="+id+", "+err.Error(), http.StatusInternalServerError) }
return if obj == nil {
} return nil, model.NewAppError("SqlTeamStore.Get", "store.sql_team.get.find.app_error", nil, "id="+id, http.StatusNotFound)
if obj == nil { }
result.Err = model.NewAppError("SqlTeamStore.Get", "store.sql_team.get.find.app_error", nil, "id="+id, http.StatusNotFound)
return
}
team := obj.(*model.Team) return obj.(*model.Team), nil
result.Data = team
})
} }
func (s SqlTeamStore) GetByInviteId(inviteId string) store.StoreChannel { func (s SqlTeamStore) GetByInviteId(inviteId string) store.StoreChannel {

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

@@ -84,7 +84,7 @@ type TeamStore interface {
Save(team *model.Team) StoreChannel Save(team *model.Team) StoreChannel
Update(team *model.Team) (*model.Team, *model.AppError) Update(team *model.Team) (*model.Team, *model.AppError)
UpdateDisplayName(name string, teamId string) StoreChannel UpdateDisplayName(name string, teamId string) StoreChannel
Get(id string) StoreChannel Get(id string) (*model.Team, *model.AppError)
GetByName(name string) StoreChannel GetByName(name string) StoreChannel
SearchByName(name string) StoreChannel SearchByName(name string) StoreChannel
SearchAll(term string) StoreChannel SearchAll(term string) StoreChannel

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

@@ -62,19 +62,28 @@ func (_m *TeamStore) ClearAllCustomRoleAssignments() store.StoreChannel {
} }
// Get provides a mock function with given fields: id // Get provides a mock function with given fields: id
func (_m *TeamStore) Get(id string) store.StoreChannel { func (_m *TeamStore) Get(id string) (*model.Team, *model.AppError) {
ret := _m.Called(id) ret := _m.Called(id)
var r0 store.StoreChannel var r0 *model.Team
if rf, ok := ret.Get(0).(func(string) store.StoreChannel); ok { if rf, ok := ret.Get(0).(func(string) *model.Team); ok {
r0 = rf(id) r0 = rf(id)
} else { } else {
if ret.Get(0) != nil { if ret.Get(0) != nil {
r0 = ret.Get(0).(store.StoreChannel) r0 = ret.Get(0).(*model.Team)
} }
} }
return r0 var r1 *model.AppError
if rf, ok := ret.Get(1).(func(string) *model.AppError); ok {
r1 = rf(id)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
} }
// GetActiveMemberCount provides a mock function with given fields: teamId // GetActiveMemberCount provides a mock function with given fields: teamId

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

@@ -4,6 +4,7 @@
package storetest package storetest
import ( import (
"github.com/stretchr/testify/require"
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@@ -392,9 +393,8 @@ func testSchemeStoreDelete(t *testing.T, ss store.Store) {
sres4 := <-ss.Scheme().Delete(d4.Id) sres4 := <-ss.Scheme().Delete(d4.Id)
assert.Nil(t, sres4.Err) assert.Nil(t, sres4.Err)
tres5 := <-ss.Team().Get(t4.Id) t5, err := ss.Team().Get(t4.Id)
assert.Nil(t, tres5.Err) require.Nil(t, err)
t5 := tres5.Data.(*model.Team)
assert.Equal(t, "", *t5.SchemeId) assert.Equal(t, "", *t5.SchemeId)
// Try deleting a channel scheme that's in use. // Try deleting a channel scheme that's in use.

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

@@ -115,10 +115,9 @@ func testTeamStoreUpdateDisplayName(t *testing.T, ss store.Store) {
t.Fatal(err) t.Fatal(err)
} }
ro1 := (<-ss.Team().Get(o1.Id)).Data.(*model.Team) ro1, err := ss.Team().Get(o1.Id)
if ro1.DisplayName != newDisplayName { require.Nil(t, err)
t.Fatal("DisplayName not updated") require.Equal(t, newDisplayName, ro1.DisplayName, "DisplayName not updated")
}
} }
func testTeamStoreGet(t *testing.T, ss store.Store) { func testTeamStoreGet(t *testing.T, ss store.Store) {
@@ -129,17 +128,12 @@ func testTeamStoreGet(t *testing.T, ss store.Store) {
o1.Type = model.TEAM_OPEN o1.Type = model.TEAM_OPEN
store.Must(ss.Team().Save(&o1)) store.Must(ss.Team().Save(&o1))
if r1 := <-ss.Team().Get(o1.Id); r1.Err != nil { r1, err := ss.Team().Get(o1.Id)
t.Fatal(r1.Err) require.Nil(t, err)
} else { require.Equal(t, r1.ToJson(), o1.ToJson())
if r1.Data.(*model.Team).ToJson() != o1.ToJson() {
t.Fatal("invalid returned team")
}
}
if err := (<-ss.Team().Get("")).Err; err == nil { _, err = ss.Team().Get("")
t.Fatal("Missing id should have failed") require.NotNil(t, err, "Missing id should have failed")
}
} }
func testTeamStoreGetByName(t *testing.T, ss store.Store) { func testTeamStoreGetByName(t *testing.T, ss store.Store) {
@@ -1284,7 +1278,9 @@ func testUpdateLastTeamIconUpdate(t *testing.T, ss store.Store) {
t.Fatal(err) t.Fatal(err)
} }
ro1 := (<-ss.Team().Get(o1.Id)).Data.(*model.Team) ro1, err := ss.Team().Get(o1.Id)
require.Nil(t, err)
if ro1.LastTeamIconUpdate <= lastTeamIconUpdateInitial { if ro1.LastTeamIconUpdate <= lastTeamIconUpdateInitial {
t.Fatal("LastTeamIconUpdate not updated") t.Fatal("LastTeamIconUpdate not updated")
} }
@@ -1459,8 +1455,11 @@ func testResetAllTeamSchemes(t *testing.T, ss store.Store) {
res := <-ss.Team().ResetAllTeamSchemes() res := <-ss.Team().ResetAllTeamSchemes()
assert.Nil(t, res.Err) assert.Nil(t, res.Err)
t1 = (<-ss.Team().Get(t1.Id)).Data.(*model.Team) t1, err := ss.Team().Get(t1.Id)
t2 = (<-ss.Team().Get(t2.Id)).Data.(*model.Team) require.Nil(t, err)
t2, err = ss.Team().Get(t2.Id)
require.Nil(t, err)
assert.Equal(t, "", *t1.SchemeId) assert.Equal(t, "", *t1.SchemeId)
assert.Equal(t, "", *t2.SchemeId) assert.Equal(t, "", *t2.SchemeId)