PLT-7883: Fix database race in bulk importer in GetByUsername. (#7611)
Этот коммит содержится в:
коммит произвёл
Christopher Speller
родитель
785cc06f6e
Коммит
fe41022353
@@ -644,28 +644,30 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var err *model.AppError
|
||||||
|
var savedUser *model.User
|
||||||
if user.Id == "" {
|
if user.Id == "" {
|
||||||
if _, err := a.createUser(user); err != nil {
|
if savedUser, err = a.createUser(user); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if hasUserChanged {
|
if hasUserChanged {
|
||||||
if _, err := a.UpdateUser(user, false); err != nil {
|
if savedUser, err = a.UpdateUser(user, false); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if hasUserRolesChanged {
|
if hasUserRolesChanged {
|
||||||
if _, err := a.UpdateUserRoles(user.Id, roles); err != nil {
|
if savedUser, err = a.UpdateUserRoles(user.Id, roles); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if hasNotifyPropsChanged {
|
if hasNotifyPropsChanged {
|
||||||
if _, err := a.UpdateUserNotifyProps(user.Id, user.NotifyProps); err != nil {
|
if savedUser, err = a.UpdateUserNotifyProps(user.Id, user.NotifyProps); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(password) > 0 {
|
if len(password) > 0 {
|
||||||
if err := a.UpdatePassword(user, password); err != nil {
|
if err = a.UpdatePassword(user, password); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -684,12 +686,16 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if savedUser == nil {
|
||||||
|
savedUser = user
|
||||||
|
}
|
||||||
|
|
||||||
// Preferences.
|
// Preferences.
|
||||||
var preferences model.Preferences
|
var preferences model.Preferences
|
||||||
|
|
||||||
if data.Theme != nil {
|
if data.Theme != nil {
|
||||||
preferences = append(preferences, model.Preference{
|
preferences = append(preferences, model.Preference{
|
||||||
UserId: user.Id,
|
UserId: savedUser.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_THEME,
|
Category: model.PREFERENCE_CATEGORY_THEME,
|
||||||
Name: "",
|
Name: "",
|
||||||
Value: *data.Theme,
|
Value: *data.Theme,
|
||||||
@@ -698,7 +704,7 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
|
|||||||
|
|
||||||
if data.UseMilitaryTime != nil {
|
if data.UseMilitaryTime != nil {
|
||||||
preferences = append(preferences, model.Preference{
|
preferences = append(preferences, model.Preference{
|
||||||
UserId: user.Id,
|
UserId: savedUser.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
|
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
|
||||||
Name: "use_military_time",
|
Name: "use_military_time",
|
||||||
Value: *data.UseMilitaryTime,
|
Value: *data.UseMilitaryTime,
|
||||||
@@ -707,7 +713,7 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
|
|||||||
|
|
||||||
if data.CollapsePreviews != nil {
|
if data.CollapsePreviews != nil {
|
||||||
preferences = append(preferences, model.Preference{
|
preferences = append(preferences, model.Preference{
|
||||||
UserId: user.Id,
|
UserId: savedUser.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
|
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
|
||||||
Name: "collapse_previews",
|
Name: "collapse_previews",
|
||||||
Value: *data.CollapsePreviews,
|
Value: *data.CollapsePreviews,
|
||||||
@@ -716,7 +722,7 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
|
|||||||
|
|
||||||
if data.MessageDisplay != nil {
|
if data.MessageDisplay != nil {
|
||||||
preferences = append(preferences, model.Preference{
|
preferences = append(preferences, model.Preference{
|
||||||
UserId: user.Id,
|
UserId: savedUser.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
|
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
|
||||||
Name: "message_display",
|
Name: "message_display",
|
||||||
Value: *data.MessageDisplay,
|
Value: *data.MessageDisplay,
|
||||||
@@ -725,7 +731,7 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
|
|||||||
|
|
||||||
if data.ChannelDisplayMode != nil {
|
if data.ChannelDisplayMode != nil {
|
||||||
preferences = append(preferences, model.Preference{
|
preferences = append(preferences, model.Preference{
|
||||||
UserId: user.Id,
|
UserId: savedUser.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
|
Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
|
||||||
Name: "channel_display_mode",
|
Name: "channel_display_mode",
|
||||||
Value: *data.ChannelDisplayMode,
|
Value: *data.ChannelDisplayMode,
|
||||||
@@ -734,9 +740,9 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
|
|||||||
|
|
||||||
if data.TutorialStep != nil {
|
if data.TutorialStep != nil {
|
||||||
preferences = append(preferences, model.Preference{
|
preferences = append(preferences, model.Preference{
|
||||||
UserId: user.Id,
|
UserId: savedUser.Id,
|
||||||
Category: model.PREFERENCE_CATEGORY_TUTORIAL_STEPS,
|
Category: model.PREFERENCE_CATEGORY_TUTORIAL_STEPS,
|
||||||
Name: user.Id,
|
Name: savedUser.Id,
|
||||||
Value: *data.TutorialStep,
|
Value: *data.TutorialStep,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -747,19 +753,14 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return a.ImportUserTeams(*data.Username, data.Teams)
|
return a.ImportUserTeams(savedUser, data.Teams)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) ImportUserTeams(username string, data *[]UserTeamImportData) *model.AppError {
|
func (a *App) ImportUserTeams(user *model.User, data *[]UserTeamImportData) *model.AppError {
|
||||||
if data == nil {
|
if data == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
user, err := a.GetUserByUsername(username)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tdata := range *data {
|
for _, tdata := range *data {
|
||||||
team, err := a.GetTeamByName(*tdata.Name)
|
team, err := a.GetTeamByName(*tdata.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user