Skip to content

Commit

Permalink
fix data race in local membership
Browse files Browse the repository at this point in the history
Signed-off-by: Thibaud Germain <[email protected]>
  • Loading branch information
IBM-Blockchainers committed Jul 12, 2024
1 parent 478124c commit c9ce8d0
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
14 changes: 11 additions & 3 deletions token/services/identity/msp/idemix/lm.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,12 @@ func (l *LocalMembership) GetIdentifier(id driver.Identity) (string, error) {
}

func (l *LocalMembership) GetDefaultIdentifier() string {
l.resolversMutex.RLock()
defer l.resolversMutex.RUnlock()
return l.getDefaultIdentifier()
}

func (l *LocalMembership) getDefaultIdentifier() string {
for _, resolver := range l.resolvers {
if resolver.Default {
return resolver.Name
Expand Down Expand Up @@ -148,7 +154,7 @@ func (l *LocalMembership) RegisterIdentity(idConfig driver.IdentityConfiguration
l.resolversMutex.Lock()
defer l.resolversMutex.Unlock()

return l.registerIdentityConfiguration(idConfig, l.GetDefaultIdentifier() == "")
return l.registerIdentityConfiguration(idConfig, l.getDefaultIdentifier() == "")
}

func (l *LocalMembership) IDs() ([]string, error) {
Expand All @@ -170,6 +176,8 @@ func (l *LocalMembership) Load() error {
l.resolversByName = make(map[string]*common.Resolver)
l.resolversByEnrollmentID = make(map[string]*common.Resolver)

// l.resolversMutex.Unlock()

// load identities from configuration
for _, identityConfig := range l.identities {
logger.Debugf("load wallet for identity [%+v]", identityConfig)
Expand All @@ -187,7 +195,7 @@ func (l *LocalMembership) Load() error {
logger.Debugf("load identities from storage...done")

// if no default identity, use the first one
defaultIdentifier := l.GetDefaultIdentifier()
defaultIdentifier := l.getDefaultIdentifier()
if len(defaultIdentifier) == 0 {
logger.Warnf("no default identity, use the first one available")
if len(l.resolvers) > 0 {
Expand Down Expand Up @@ -370,7 +378,7 @@ func (l *LocalMembership) loadFromStorage() error {
URL: entry.URL,
Config: entry.Config,
Raw: entry.Raw,
}, l.GetDefaultIdentifier() == ""); err != nil {
}, l.getDefaultIdentifier() == ""); err != nil {
return err
}
}
Expand Down
10 changes: 8 additions & 2 deletions token/services/identity/msp/x509/lm.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func (lm *LocalMembership) Load(identities []*config.Identity) error {
logger.Debugf("load identities from storage...done")

// if no default identity, use the first one
defaultIdentifier := lm.GetDefaultIdentifier()
defaultIdentifier := lm.getDefaultIdentifier()
if len(defaultIdentifier) == 0 {
logger.Warnf("no default identity, use the first one available")
if len(lm.resolvers) > 0 {
Expand Down Expand Up @@ -133,6 +133,12 @@ func (lm *LocalMembership) GetIdentifier(id driver.Identity) (string, error) {
}

func (lm *LocalMembership) GetDefaultIdentifier() string {
lm.resolversMutex.RLock()
defer lm.resolversMutex.RUnlock()
return lm.getDefaultIdentifier()
}

func (lm *LocalMembership) getDefaultIdentifier() string {
for _, resolver := range lm.resolvers {
if resolver.Default {
return resolver.Name
Expand Down Expand Up @@ -179,7 +185,7 @@ func (lm *LocalMembership) RegisterIdentity(idConfig driver.IdentityConfiguratio
return errors.Wrapf(err, "failed to load msp config [%s]", idConfig.ID)
}
}
return lm.registerIdentity(mspConfig, identityConfig, lm.GetDefaultIdentifier() == "")
return lm.registerIdentity(mspConfig, identityConfig, lm.getDefaultIdentifier() == "")
}

func (lm *LocalMembership) IDs() ([]string, error) {
Expand Down

0 comments on commit c9ce8d0

Please sign in to comment.