From d4761a94cebfd667373e1635dd1c9ad334b3b80c Mon Sep 17 00:00:00 2001 From: George Goldberg Date: Mon, 11 Jun 2018 15:24:08 +0100 Subject: Fix idempotency of scheme migrations. (#8935) This fixes the issue where if the migration tries to migrate an already scheme-aware member object it would end up removing it's scheme-derived roles. Instead, only if the member object is unmigrated do we default to setting the scheme-derived role booleans to false. We tell if it is an unmigrated member object by checking if the booleans are set to null. --- store/sqlstore/channel_store.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'store/sqlstore/channel_store.go') diff --git a/store/sqlstore/channel_store.go b/store/sqlstore/channel_store.go index 5f336d904..476665514 100644 --- a/store/sqlstore/channel_store.go +++ b/store/sqlstore/channel_store.go @@ -1733,8 +1733,12 @@ func (s SqlChannelStore) MigrateChannelMembers(fromChannelId string, fromUserId for _, member := range channelMembers { roles := strings.Fields(member.Roles) var newRoles []string - member.SchemeAdmin = sql.NullBool{Bool: false, Valid: true} - member.SchemeUser = sql.NullBool{Bool: false, Valid: true} + if !member.SchemeAdmin.Valid { + member.SchemeAdmin = sql.NullBool{Bool: false, Valid: true} + } + if !member.SchemeUser.Valid { + member.SchemeUser = sql.NullBool{Bool: false, Valid: true} + } for _, role := range roles { if role == model.CHANNEL_ADMIN_ROLE_ID { member.SchemeAdmin = sql.NullBool{Bool: true, Valid: true} -- cgit v1.2.3-1-g7c22