diff --git a/weed/remote_storage/azure/azure_storage_client_test.go b/weed/remote_storage/azure/azure_storage_client_test.go index b0cd8f513..5be013428 100644 --- a/weed/remote_storage/azure/azure_storage_client_test.go +++ b/weed/remote_storage/azure/azure_storage_client_test.go @@ -7,6 +7,7 @@ import ( "testing" "time" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/remote_pb" "github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants" @@ -45,8 +46,8 @@ func TestAzureStorageClientBasic(t *testing.T) { t.Run("CreateBucket", func(t *testing.T) { err := azClient.CreateBucket(testContainer) // Ignore error if bucket already exists - if err != nil && !contains(err.Error(), "already exists") && !contains(err.Error(), "ContainerAlreadyExists") { - t.Logf("Warning: Failed to create bucket: %v", err) + if err != nil && !bloberror.HasCode(err, bloberror.ContainerAlreadyExists) { + t.Fatalf("Failed to create bucket: %v", err) } }) @@ -166,8 +167,8 @@ func TestAzureStorageClientBasic(t *testing.T) { // Test 9: Verify file deleted (should fail) t.Run("VerifyDeleted", func(t *testing.T) { _, err := azClient.ReadFile(loc, 0, 10) - if err == nil { - t.Error("Expected error reading deleted file, got none") + if !bloberror.HasCode(err, bloberror.BlobNotFound) { + t.Errorf("Expected BlobNotFound error, but got: %v", err) } }) diff --git a/weed/replication/sink/azuresink/azure_sink.go b/weed/replication/sink/azuresink/azure_sink.go index c75b4a9c1..13e4c9f30 100644 --- a/weed/replication/sink/azuresink/azure_sink.go +++ b/weed/replication/sink/azuresink/azure_sink.go @@ -15,6 +15,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/appendblob" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror" "github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" @@ -96,6 +97,10 @@ func (g *AzureSink) DeleteEntry(key string, isDirectory, deleteIncludeChunks boo DeleteSnapshots: to.Ptr(blob.DeleteSnapshotsOptionTypeInclude), }) if err != nil { + // Make delete idempotent - don't return error if blob doesn't exist + if bloberror.HasCode(err, bloberror.BlobNotFound) { + return nil + } return fmt.Errorf("azure delete %s/%s: %v", g.container, key, err) }