etcd: Handle create buckets with common prefixes properly (#7556)

common prefixes in bucket name if already created
are disallowed when etcd is configured due to the
prefix matching issue. Make sure that when we look
for bucket we are only interested in exact bucket
name not the prefix.
This commit is contained in:
Harshavardhana 2019-04-17 17:29:49 -07:00 committed by kannappanr
parent 620e462413
commit 4c048963dc
2 changed files with 18 additions and 5 deletions

View file

@ -774,10 +774,6 @@ func (api objectAPIHandlers) DeleteBucketHandler(w http.ResponseWriter, r *http.
return
}
globalNotificationSys.RemoveNotification(bucket)
globalPolicySys.Remove(bucket)
globalNotificationSys.DeleteBucket(ctx, bucket)
if globalDNSConfig != nil {
if err := globalDNSConfig.Delete(bucket); err != nil {
// Deleting DNS entry failed, attempt to create the bucket again.
@ -787,6 +783,10 @@ func (api objectAPIHandlers) DeleteBucketHandler(w http.ResponseWriter, r *http.
}
}
globalNotificationSys.RemoveNotification(bucket)
globalPolicySys.Remove(bucket)
globalNotificationSys.DeleteBucket(ctx, bucket)
// Write success response.
writeSuccessNoContent(w)
}

View file

@ -70,7 +70,20 @@ func (c *coreDNS) Get(bucket string) ([]SrvRecord, error) {
if err != nil {
return nil, err
}
srvRecords = append(srvRecords, records...)
// Make sure we have record.Key is empty
// this can only happen when record.Key
// has bucket entry with exact prefix
// match any record.Key which do not
// match the prefixes we skip them.
for _, record := range records {
if record.Key != "" {
continue
}
srvRecords = append(srvRecords, records...)
}
}
if len(srvRecords) == 0 {
return nil, ErrNoEntriesFound
}
return srvRecords, nil
}