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.
master
Harshavardhana 6 years ago committed by kannappanr
parent 620e462413
commit 4c048963dc
  1. 8
      cmd/bucket-handlers.go
  2. 15
      pkg/dns/etcd_dns.go

@ -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)
}

@ -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
}

Loading…
Cancel
Save