Skip to content

Conversation

@muhammad-othman
Copy link
Member

Description

Generates PutBucketTagging S3 operation

AssemblyComparer AWSSDK.S3.New.dll: Message Amazon.S3.Model.PutBucketTaggingRequest/MethodAdded: New method System.Void set_ContentMD5(System.String) in Amazon.S3.Model.PutBucketTaggingRequest
AssemblyComparer AWSSDK.S3.New.dll: Message Amazon.S3.Model.PutBucketTaggingRequest/MethodAdded: New method System.String get_ContentMD5() in Amazon.S3.Model.PutBucketTaggingRequest

ContentMD5 property was added to the request.

Motivation and Context

DOTNET-8422

Testing

  • DRY_RUN-68d245f4-de50-4bde-b7b5-25367b3daa55.
  • Ran the Fuzz tests.

Screenshots (if appropriate)

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • My code follows the code style of this project
  • My change requires a change to the documentation
  • I have updated the documentation accordingly
  • I have read the README document
  • I have added tests to cover my changes
  • All new and existing tests passed

License

  • I confirm that this pull request can be released under the Apache 2 license

@muhammad-othman
Copy link
Member Author

muhammad-othman commented Dec 9, 2025

No breaking changes were found

Breaking Change Analysis for PutBucketTagging Operation Migration (Commit 9a887f5)

Summary

Analyzed migration of PutBucketTagging operation from Custom to Generated code. NO BREAKING CHANGES DETECTED.

Files Analyzed: 8 of 12 files in commit

1. PutBucketTaggingRequestMarshaller.cs

  • Status: ✅ NO BREAKING CHANGES

  • Analysis:

    • Old custom marshaller deleted (117 lines)
    • New generated marshaller created (147 lines) with partial customization hooks
    • Both marshallers create XML with <Tagging> root element and <TagSet> containing <Tag> elements
    • Marshalling logic preserved: ChecksumAlgorithm, ContentMD5, ExpectedBucketOwner headers all present
    • Generated version uses modern checksum handling via ChecksumUtils.SetChecksumData()
    • Includes PreMarshallCustomization and PostMarshallCustomization hooks for extensibility

2. PutBucketTaggingResponseUnmarshaller.cs

  • Status: ✅ NO BREAKING CHANGES

  • Analysis:

    • Old custom unmarshaller deleted (62 lines)
    • New generated unmarshaller created (98 lines)
    • Both return empty PutBucketTaggingResponse objects (void operation)
    • Error handling preserved via base class S3Exception construction
    • Includes PostUnmarshallCustomization hook for extensibility

3. PutBucketTaggingRequest.cs

  • Status: ✅ NO BREAKING CHANGES

  • Analysis:

    • Migrated from Custom to Generated

    • Properties remain backward compatible:

      • BucketName: getter/setter unchanged (only private field renamed: bucketName_bucketName)
      • ChecksumAlgorithm: same implementation
      • ExpectedBucketOwner: getter/setter unchanged (only private field renamed)
      • TagSet: getter/setter unchanged (only private field renamed: tagSet_tagSet)
    • NEW property added: ContentMD5 - This is NOT a breaking change as it's additive

    • IsSet methods preserved:

      • IsSetBucketName(): return this._bucketName != null; (same logic)
      • IsSetExpectedBucketOwner(): Custom injection maintained via customizations.json: return !string.IsNullOrEmpty(this._expectedBucketOwner); (SAME as old: return !String.IsNullOrEmpty(this.expectedBucketOwner);)
      • IsSetTagSet(): Same logic preserved
      • IsSetChecksumAlgorithm(): Same logic preserved
      • IsSetContentMD5(): New method for new property
    • Documentation updated: More comprehensive XML docs added (not breaking)

4. PutBucketTaggingResponse.cs

  • Status: ✅ NO BREAKING CHANGES

  • Analysis:

    • Migrated from Custom to Generated
    • Remains an empty response class (inherits from AmazonWebServiceResponse)
    • No properties in either version
    • Backward compatible

5. s3.customizations.json

  • Status: ✅ Configuration Validated

  • Analysis:

    • PutBucketTagging added to operation allow list
    • Request shape modifications:
      • ExpectedBucketOwner: Custom IsSet injection maintained: return !string.IsNullOrEmpty(this._expectedBucketOwner);
    • Flatten shapes: PutBucketTaggingRequest flattens Tagging member (preserved from old behavior)
    • No breaking customizations applied

6. ServiceModel.cs

  • Status: ✅ NO BREAKING CHANGES

  • Analysis:

    • PutBucketTagging operation added to S3 allow list for generation
    • Infrastructure change only, no API impact

7. __AmazonS3Client.cs (bcl and netstandard)

  • Status: ✅ NO BREAKING CHANGES

  • Analysis:

    • Method signatures unchanged
    • XML documentation updated (non-breaking): "A property of PutBucketTaggingRequest" → "A collection for a set of tags"
    • Same async/sync methods available

8. __IAmazonS3.cs (bcl and netstandard)

  • Status: ✅ NO BREAKING CHANGES

  • Analysis:

    • Interface methods unchanged
    • XML documentation updated (same as AmazonS3Client)
    • Binary compatibility maintained

Critical Validation Points Checked:

✅ IsSet Method Validation (Request Objects with String Properties):

  • IsSetExpectedBucketOwner(): PRESERVED - Uses !string.IsNullOrEmpty() (confirmed via customizations.json injection)
  • IsSetBucketName(): Uses != null check (appropriate for required parameter)
  • No breaking change from !string.IsNullOrEmpty to != null detected

✅ Marshaller Logic:

  • No custom PostMarshallCustomization or PreMarshallCustomization files found in Custom folder
  • All marshalling logic successfully moved to generated file
  • XML structure preserved: <Tagging><TagSet><Tag>...</Tag></TagSet></Tagging>

✅ Unmarshaller Logic:

  • No custom unmarshaller partials found
  • Response remains void (empty object)
  • Error handling preserved

✅ Public Properties:

  • All public properties from custom version present in generated version
  • Getters and setters have identical behavior
  • Private field naming changes are internal only (not breaking)

✅ Backwards Compatibility:

  • No property removals
  • No method signature changes
  • No behavioral changes in IsSet methods
  • Only additive changes (ContentMD5 property)

Conclusion:

NO BREAKING CHANGES DETECTED in the migration of PutBucketTagging operation from custom to generated code. The migration successfully preserves all public API contracts, IsSet method behaviors, marshalling/unmarshalling logic, and backward compatibility.

Files Analyzed: 8 out of 12 files changed

  • Remaining files are infrastructure/configuration files with no API impact

@muhammad-othman muhammad-othman force-pushed the muhamoth/S3-generate-PutBucketTagging-operation branch from c6e3388 to 9a887f5 Compare December 9, 2025 20:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant