diff --git a/weed/s3api/auth_credentials_subscribe.go b/weed/s3api/auth_credentials_subscribe.go index 964ee4822..e0eb15554 100644 --- a/weed/s3api/auth_credentials_subscribe.go +++ b/weed/s3api/auth_credentials_subscribe.go @@ -33,13 +33,22 @@ func (s3a *S3ApiServer) subscribeMetaEvents(clientName string, lastTsNs int64, p _ = s3a.onIamConfigChange(dir, message.OldEntry, message.NewEntry) _ = s3a.onCircuitBreakerConfigChange(dir, message.OldEntry, message.NewEntry) - // For moves across directories, also notify handlers about the source directory + // For moves across directories, replay a delete event for the source directory if message.NewParentPath != "" && resp.Directory != message.NewParentPath { _ = s3a.onBucketMetadataChange(resp.Directory, message.OldEntry, nil) _ = s3a.onIamConfigChange(resp.Directory, message.OldEntry, nil) _ = s3a.onCircuitBreakerConfigChange(resp.Directory, message.OldEntry, nil) } + // For same-directory renames, replay a delete event for the old name + // so handlers can clean up stale state (e.g., old bucket names) + if message.OldEntry != nil && message.NewEntry != nil && + (message.NewParentPath == "" || message.NewParentPath == resp.Directory) && + message.OldEntry.Name != message.NewEntry.Name { + _ = s3a.onBucketMetadataChange(dir, message.OldEntry, nil) + _ = s3a.onCircuitBreakerConfigChange(dir, message.OldEntry, nil) + } + return nil }