mirror of
https://github.com/minio/minio.git
synced 2025-01-11 23:13:23 -05:00
setBucketMetadata: Fix a deadlock.
This commit is contained in:
parent
c922dd6fbd
commit
8bf1045645
@ -223,8 +223,6 @@ func (fs Filesystem) GetBucketMetadata(bucket string) (BucketMetadata, *probe.Er
|
|||||||
|
|
||||||
// SetBucketMetadata - set bucket metadata.
|
// SetBucketMetadata - set bucket metadata.
|
||||||
func (fs Filesystem) SetBucketMetadata(bucket string, metadata map[string]string) *probe.Error {
|
func (fs Filesystem) SetBucketMetadata(bucket string, metadata map[string]string) *probe.Error {
|
||||||
fs.rwLock.Lock()
|
|
||||||
defer fs.rwLock.Unlock()
|
|
||||||
// Input validation.
|
// Input validation.
|
||||||
if !IsValidBucketName(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
@ -247,7 +245,9 @@ func (fs Filesystem) SetBucketMetadata(bucket string, metadata map[string]string
|
|||||||
}
|
}
|
||||||
return probe.NewError(e)
|
return probe.NewError(e)
|
||||||
}
|
}
|
||||||
|
fs.rwLock.RLock()
|
||||||
bucketMetadata, ok := fs.buckets.Metadata[bucket]
|
bucketMetadata, ok := fs.buckets.Metadata[bucket]
|
||||||
|
fs.rwLock.RUnlock()
|
||||||
if !ok {
|
if !ok {
|
||||||
bucketMetadata = &BucketMetadata{}
|
bucketMetadata = &BucketMetadata{}
|
||||||
bucketMetadata.Name = fi.Name()
|
bucketMetadata.Name = fi.Name()
|
||||||
|
@ -100,7 +100,7 @@ func ParsePostPolicyForm(policy string) (PostPolicyForm, *probe.Error) {
|
|||||||
for k, v := range condt {
|
for k, v := range condt {
|
||||||
if !isString(v) { // Pre-check value type.
|
if !isString(v) { // Pre-check value type.
|
||||||
// All values must be of type string.
|
// All values must be of type string.
|
||||||
return parsedPolicy, probe.NewError(fmt.Errorf("Unknown type ‘%s’ of conditional field value ‘%s’ found in POST policy form.",
|
return parsedPolicy, probe.NewError(fmt.Errorf("Unknown type %s of conditional field value %s found in POST policy form.",
|
||||||
reflect.TypeOf(condt).String(), condt))
|
reflect.TypeOf(condt).String(), condt))
|
||||||
}
|
}
|
||||||
// {"acl": "public-read" } is an alternate way to indicate - [ "eq", "$acl", "public-read" ]
|
// {"acl": "public-read" } is an alternate way to indicate - [ "eq", "$acl", "public-read" ]
|
||||||
@ -115,7 +115,7 @@ func ParsePostPolicyForm(policy string) (PostPolicyForm, *probe.Error) {
|
|||||||
}
|
}
|
||||||
case []interface{}: // Handle array types.
|
case []interface{}: // Handle array types.
|
||||||
if len(condt) != 3 { // Return error if we have insufficient elements.
|
if len(condt) != 3 { // Return error if we have insufficient elements.
|
||||||
return parsedPolicy, probe.NewError(fmt.Errorf("Malformed conditional fields ‘%s’ of type ‘%s’ found in POST policy form.",
|
return parsedPolicy, probe.NewError(fmt.Errorf("Malformed conditional fields %s of type %s found in POST policy form.",
|
||||||
condt, reflect.TypeOf(condt).String()))
|
condt, reflect.TypeOf(condt).String()))
|
||||||
}
|
}
|
||||||
switch toString(condt[0]) {
|
switch toString(condt[0]) {
|
||||||
@ -123,7 +123,7 @@ func ParsePostPolicyForm(policy string) (PostPolicyForm, *probe.Error) {
|
|||||||
for _, v := range condt { // Pre-check all values for type.
|
for _, v := range condt { // Pre-check all values for type.
|
||||||
if !isString(v) {
|
if !isString(v) {
|
||||||
// All values must be of type string.
|
// All values must be of type string.
|
||||||
return parsedPolicy, probe.NewError(fmt.Errorf("Unknown type ‘%s’ of conditional field value ‘%s’ found in POST policy form.",
|
return parsedPolicy, probe.NewError(fmt.Errorf("Unknown type %s of conditional field value %s found in POST policy form.",
|
||||||
reflect.TypeOf(condt).String(), condt))
|
reflect.TypeOf(condt).String(), condt))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -145,11 +145,11 @@ func ParsePostPolicyForm(policy string) (PostPolicyForm, *probe.Error) {
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
// Condition should be valid.
|
// Condition should be valid.
|
||||||
return parsedPolicy, probe.NewError(fmt.Errorf("Unknown type ‘%s’ of conditional field value ‘%s’ found in POST policy form.",
|
return parsedPolicy, probe.NewError(fmt.Errorf("Unknown type %s of conditional field value %s found in POST policy form.",
|
||||||
reflect.TypeOf(condt).String(), condt))
|
reflect.TypeOf(condt).String(), condt))
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return parsedPolicy, probe.NewError(fmt.Errorf("Unknown field ‘%s’ of type ‘%s’ found in POST policy form.",
|
return parsedPolicy, probe.NewError(fmt.Errorf("Unknown field %s of type %s found in POST policy form.",
|
||||||
condt, reflect.TypeOf(condt).String()))
|
condt, reflect.TypeOf(condt).String()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
// Definitions are imported from NodeJS mime-db project under MIT license.
|
// Definitions are imported from NodeJS mime-db project under MIT license.
|
||||||
package mimedb
|
package mimedb
|
||||||
|
|
||||||
// Mime is a collection of mime types with extension as key and content-type as value.
|
// DB - Mime is a collection of mime types with extension as key and content-type as value.
|
||||||
var DB = map[string]struct {
|
var DB = map[string]struct {
|
||||||
ContentType string
|
ContentType string
|
||||||
Compressible bool
|
Compressible bool
|
||||||
|
@ -49,7 +49,7 @@ const progTempl = `// DO NOT EDIT THIS FILE. IT IS AUTO-GENERATED BY "gen-db.go"
|
|||||||
// Definitions are imported from NodeJS mime-db project under MIT license.
|
// Definitions are imported from NodeJS mime-db project under MIT license.
|
||||||
package mimedb
|
package mimedb
|
||||||
|
|
||||||
// Mime is a collection of mime types with extension as key and content-type as value.
|
// DB - Mime is a collection of mime types with extension as key and content-type as value.
|
||||||
var DB = map[string]struct {
|
var DB = map[string]struct {
|
||||||
ContentType string
|
ContentType string
|
||||||
Compressible bool
|
Compressible bool
|
||||||
@ -68,8 +68,6 @@ type mimeEntry struct {
|
|||||||
|
|
||||||
type mimeDB map[string]mimeEntry
|
type mimeDB map[string]mimeEntry
|
||||||
|
|
||||||
var ()
|
|
||||||
|
|
||||||
// JSON data from gobindata and parse them into extDB.
|
// JSON data from gobindata and parse them into extDB.
|
||||||
func convertDB(jsonFile string) (mimeDB, error) {
|
func convertDB(jsonFile string) (mimeDB, error) {
|
||||||
// Structure of JSON data from mime-db project.
|
// Structure of JSON data from mime-db project.
|
||||||
|
Loading…
Reference in New Issue
Block a user