diff options
| author | Bl1tz23 <alex3angle@gmail.com> | 2021-11-09 18:11:06 +0300 |
|---|---|---|
| committer | Bl1tz23 <alex3angle@gmail.com> | 2021-11-09 18:11:06 +0300 |
| commit | c683409e9275d6d059de12e88df3b5275e47cb04 (patch) | |
| tree | 6a5878e76dab341bc15e61421b685a72e92f7277 | |
| parent | 5018b22f368731ca5791c73790c63e0e0a3579c7 (diff) | |
| download | seaweedfs-c683409e9275d6d059de12e88df3b5275e47cb04.tar.xz seaweedfs-c683409e9275d6d059de12e88df3b5275e47cb04.zip | |
s3: add RWMutex to iam, use RLock for concurrent reading
| -rw-r--r-- | weed/s3api/auth_credentials.go | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/weed/s3api/auth_credentials.go b/weed/s3api/auth_credentials.go index 8d05f2a03..9e1cd7f86 100644 --- a/weed/s3api/auth_credentials.go +++ b/weed/s3api/auth_credentials.go @@ -24,7 +24,7 @@ type Iam interface { } type IdentityAccessManagement struct { - m sync.Mutex + m sync.RWMutex identities []*Identity domain string @@ -135,21 +135,22 @@ func (iam *IdentityAccessManagement) loadS3ApiConfiguration(config *iam_pb.S3Api identities = append(identities, t) } iam.m.Lock() - // atomically switch iam.identities = identities - iam.m.Unlock() return nil } func (iam *IdentityAccessManagement) isEnabled() bool { - + iam.m.RLock() + defer iam.m.RUnlock() return len(iam.identities) > 0 } func (iam *IdentityAccessManagement) lookupByAccessKey(accessKey string) (identity *Identity, cred *Credential, found bool) { + iam.m.RLock() + defer iam.m.RUnlock() for _, ident := range iam.identities { for _, cred := range ident.Credentials { // println("checking", ident.Name, cred.AccessKey) @@ -163,7 +164,8 @@ func (iam *IdentityAccessManagement) lookupByAccessKey(accessKey string) (identi } func (iam *IdentityAccessManagement) lookupAnonymous() (identity *Identity, found bool) { - + iam.m.RLock() + defer iam.m.RUnlock() for _, ident := range iam.identities { if ident.Name == "anonymous" { return ident, true |
