fix(manager)_: make sure createCommunityPermission schedules the reeval (#5404)

Fixes https://github.com/status-im/status-desktop/issues/15175

The problem was that we used StartMembersReevaluaitonLoop in createCommunityPermission, in case the loop was never started. Indeed it worked if it was the first ever permission, because the loop would then start and members would be re-evaluated.

However, if the loop was already started, in the case where there were previous permissions, the call would just early exit, because it was already started.

The solution here is to use `ScheduleMembersReevaluaiton` like other permission functions use. To make sure a first permission still works, we call startLoop in schedule if the task doesn't exist.
This commit is contained in:
Jonathan Rainville 2024-06-25 14:46:29 -04:00 committed by GitHub
parent 2cabec66cc
commit d942ad1a1f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 2 deletions

View File

@ -1449,7 +1449,9 @@ func (m *Manager) ScheduleMembersReevaluation(communityID types.HexBytes) error
func (m *Manager) scheduleMembersReevaluation(communityID types.HexBytes, forceImmediateReevaluation bool) error { func (m *Manager) scheduleMembersReevaluation(communityID types.HexBytes, forceImmediateReevaluation bool) error {
t, exists := m.membersReevaluationTasks.Load(communityID.String()) t, exists := m.membersReevaluationTasks.Load(communityID.String())
if !exists { if !exists {
return errors.New("reevaluation task doesn't exist") // No reevaluation task yet. We start the loop which will create it
m.StartMembersReevaluationLoop(communityID, true)
return nil
} }
task, ok := t.(*membersReevaluationTask) task, ok := t.(*membersReevaluationTask)

View File

@ -2739,7 +2739,10 @@ func (m *Messenger) CreateCommunityTokenPermission(request *requests.CreateCommu
} }
if community.IsControlNode() { if community.IsControlNode() {
m.communitiesManager.StartMembersReevaluationLoop(community.ID(), true) err = m.communitiesManager.ScheduleMembersReevaluation(community.ID())
if err != nil {
return nil, err
}
} }
// ensure HRkeys are synced // ensure HRkeys are synced