diff --git a/cmd/bucket-handlers.go b/cmd/bucket-handlers.go index 1f29c5ad7..fb91ebf0c 100644 --- a/cmd/bucket-handlers.go +++ b/cmd/bucket-handlers.go @@ -562,10 +562,13 @@ func (api objectAPIHandlers) DeleteBucketHandler(w http.ResponseWriter, r *http. } // Delete bucket access policy, if present - ignore any errors. - removeBucketPolicy(bucket, objectAPI) + _ = removeBucketPolicy(bucket, objectAPI) // Delete notification config, if present - ignore any errors. - removeNotificationConfig(bucket, objectAPI) + _ = removeNotificationConfig(bucket, objectAPI) + + // Delete listener config, if present - ignore any errors. + _ = removeListenerConfig(bucket, objectAPI) // Write success response. writeSuccessNoContent(w) diff --git a/cmd/control-lock-main_test.go b/cmd/control-lock-main_test.go index c3df59f8b..93b1313d4 100644 --- a/cmd/control-lock-main_test.go +++ b/cmd/control-lock-main_test.go @@ -49,10 +49,10 @@ func TestPrintLockState(t *testing.T) { func testLockStateEquality(vliLeft, vliRight VolumeLockInfo) bool { if vliLeft.Bucket != vliRight.Bucket || - vliLeft.Object != vliRight.Object || - vliLeft.LocksOnObject != vliRight.LocksOnObject || - vliLeft.LocksAcquiredOnObject != vliRight.LocksAcquiredOnObject || - vliLeft.TotalBlockedLocks != vliRight.TotalBlockedLocks { + vliLeft.Object != vliRight.Object || + vliLeft.LocksOnObject != vliRight.LocksOnObject || + vliLeft.LocksAcquiredOnObject != vliRight.LocksAcquiredOnObject || + vliLeft.TotalBlockedLocks != vliRight.TotalBlockedLocks { return false } return true diff --git a/cmd/event-notifier.go b/cmd/event-notifier.go index 94855c343..7d5542252 100644 --- a/cmd/event-notifier.go +++ b/cmd/event-notifier.go @@ -205,19 +205,21 @@ func (en *eventNotifier) GetBucketListenerConfig(bucket string) []listenerConfig func (en *eventNotifier) SetBucketListenerConfig(bucket string, lcfg []listenerConfig) error { en.internal.rwMutex.Lock() defer en.internal.rwMutex.Unlock() - if lcfg == nil { + if len(lcfg) == 0 { delete(en.internal.listenerConfigs, bucket) } else { en.internal.listenerConfigs[bucket] = lcfg } en.internal.targets = make(map[string]*listenerLogger) - for _, lc := range lcfg { - logger, err := newListenerLogger(lc.TopicConfig.TopicARN, - lc.TargetServer) - if err != nil { - return err + for _, elcArr := range en.internal.listenerConfigs { + for _, elcElem := range elcArr { + currArn := elcElem.TopicConfig.TopicARN + logger, err := newListenerLogger(currArn, elcElem.TargetServer) + if err != nil { + return err + } + en.internal.targets[currArn] = logger } - en.internal.targets[lc.TopicConfig.TopicARN] = logger } return nil } @@ -443,6 +445,15 @@ func persistListenerConfig(bucket string, lcfg []listenerConfig, obj ObjectLayer return err } +// Remove listener configuration from storage layer. Used when a +// bucket is deleted. +func removeListenerConfig(bucket string, obj ObjectLayer) error { + // make the path + lcPath := path.Join(bucketConfigPrefix, bucket, bucketListenerConfig) + // remove it + return obj.DeleteObject(minioMetaBucket, lcPath) +} + // loads all bucket notifications if present. func loadAllBucketNotifications(objAPI ObjectLayer) (map[string]*notificationConfig, map[string][]listenerConfig, error) { // List buckets to proceed loading all notification configuration. diff --git a/cmd/lockinfo-handlers.go b/cmd/lockinfo-handlers.go index b78c5ba0c..e3dd8731a 100644 --- a/cmd/lockinfo-handlers.go +++ b/cmd/lockinfo-handlers.go @@ -183,4 +183,4 @@ func (c *controlAPIHandlers) LockClear(args *LockClearArgs, reply *GenericReply) nsMutex.ForceUnlock(args.Bucket, args.Object) *reply = GenericReply{} return nil -} \ No newline at end of file +} diff --git a/cmd/namespace-lock_test.go b/cmd/namespace-lock_test.go index e41d91512..9b289084c 100644 --- a/cmd/namespace-lock_test.go +++ b/cmd/namespace-lock_test.go @@ -400,13 +400,13 @@ func TestNamespaceForceUnlockTest(t *testing.T) { }() select { - case <-ch: - // Signalled so all is fine. - break + case <-ch: + // Signalled so all is fine. + break - case <-time.After(100*time.Millisecond): - // In case we hit the time out, the lock has not been cleared. - t.Errorf("Lock not cleared.") + case <-time.After(100 * time.Millisecond): + // In case we hit the time out, the lock has not been cleared. + t.Errorf("Lock not cleared.") } // Clean up lock.