diff --git a/management/server/account.go b/management/server/account.go index 1b04ba50a..8a80aefb6 100644 --- a/management/server/account.go +++ b/management/server/account.go @@ -1279,7 +1279,7 @@ func (am *DefaultAccountManager) SyncUserJWTGroups(ctx context.Context, userAuth var hasChanges bool var user *types.User err = am.Store.ExecuteInTransaction(ctx, func(transaction store.Store) error { - user, err = transaction.GetUserByUserID(ctx, store.LockingStrengthUpdate, userAuth.UserId) + user, err = transaction.GetUserByUserID(ctx, store.LockingStrengthShare, userAuth.UserId) if err != nil { return fmt.Errorf("error getting user: %w", err) } @@ -1314,7 +1314,7 @@ func (am *DefaultAccountManager) SyncUserJWTGroups(ctx context.Context, userAuth // Propagate changes to peers if group propagation is enabled if settings.GroupsPropagationEnabled { - groups, err = transaction.GetAccountGroups(ctx, store.LockingStrengthUpdate, userAuth.AccountId) + groups, err = transaction.GetAccountGroups(ctx, store.LockingStrengthShare, userAuth.AccountId) if err != nil { return fmt.Errorf("error getting account groups: %w", err) } @@ -1899,7 +1899,7 @@ func (am *DefaultAccountManager) UpdateToPrimaryAccount(ctx context.Context, acc // propagateUserGroupMemberships propagates all account users' group memberships to their peers. // Returns true if any groups were modified, true if those updates affect peers and an error. func propagateUserGroupMemberships(ctx context.Context, transaction store.Store, accountID string) (groupsUpdated bool, peersAffected bool, err error) { - groups, err := transaction.GetAccountGroups(ctx, store.LockingStrengthUpdate, accountID) + groups, err := transaction.GetAccountGroups(ctx, store.LockingStrengthShare, accountID) if err != nil { return false, false, err } diff --git a/management/server/account_test.go b/management/server/account_test.go index 3191a15f8..3f2bf0f91 100644 --- a/management/server/account_test.go +++ b/management/server/account_test.go @@ -2617,6 +2617,7 @@ func TestAccount_GetNextInactivePeerExpiration(t *testing.T) { } func TestAccount_SetJWTGroups(t *testing.T) { + t.Setenv("NETBIRD_STORE_ENGINE", "postgres") manager, err := createManager(t) require.NoError(t, err, "unable to create account manager") diff --git a/management/server/store/sql_store.go b/management/server/store/sql_store.go index 1b6c1497f..390a6c220 100644 --- a/management/server/store/sql_store.go +++ b/management/server/store/sql_store.go @@ -460,7 +460,7 @@ func (s *SqlStore) SaveGroups(ctx context.Context, lockStrength LockingStrength, } return s.db.Transaction(func(tx *gorm.DB) error { - result := tx.Session(&gorm.Session{FullSaveAssociations: true}). + result := tx. Clauses( clause.Locking{Strength: string(lockStrength)}, clause.OnConflict{ @@ -475,8 +475,6 @@ func (s *SqlStore) SaveGroups(ctx context.Context, lockStrength LockingStrength, } for _, g := range groups { - g.StoreGroupPeers() - if err := tx.Model(&g). Association("GroupPeers"). Replace(g.GroupPeers); err != nil { diff --git a/management/server/store/sql_store_test.go b/management/server/store/sql_store_test.go index 8ff8c35f8..887f23ba3 100644 --- a/management/server/store/sql_store_test.go +++ b/management/server/store/sql_store_test.go @@ -1371,12 +1371,11 @@ func TestSqlStore_SaveGroups(t *testing.T) { GroupPeers: []types.GroupPeer{}, }, { - ID: "group-2", - AccountID: accountID, - Issued: "integration", - Peers: []string{"peer3", "peer4"}, - Resources: []types.Resource{}, - GroupPeers: []types.GroupPeer{}, + ID: "group-2", + AccountID: accountID, + Issued: "integration", + Peers: []string{"peer3", "peer4"}, + Resources: []types.Resource{}, }, } err = store.SaveGroups(context.Background(), LockingStrengthUpdate, accountID, groups) diff --git a/management/server/types/group.go b/management/server/types/group.go index 5f4d1d2bb..f0ab6ddb6 100644 --- a/management/server/types/group.go +++ b/management/server/types/group.go @@ -45,7 +45,7 @@ func (g *Group) LoadGroupPeers() { for i, peer := range g.GroupPeers { g.Peers[i] = peer.PeerID } - g.GroupPeers = nil + g.GroupPeers = []GroupPeer{} } func (g *Group) StoreGroupPeers() { g.GroupPeers = make([]GroupPeer, len(g.Peers)) @@ -55,7 +55,7 @@ func (g *Group) StoreGroupPeers() { PeerID: peer, } } - g.Peers = nil + g.Peers = []string{} } // EventMeta returns activity event meta related to the group