Skip to content

Conversation

@peterrsongg
Copy link
Contributor

@peterrsongg peterrsongg commented Nov 20, 2025

Description

Generate ListBucketIntelligentTieringConfiguration

Motivation and Context

Testing

Dry run for base branch passed
Fuzz testing passed.
AI Prompt run

AssemblyComparer AWSSDK.S3.New.dll: Error Amazon.S3.Model.ListBucketIntelligentTieringConfigurationsResponse/MethodRemoved: Missing method System.Boolean IsSetIntelligentTieringConfigurationList() in Amazon.S3.Model.ListBucketIntelligentTieringConfigurationsResponse

This was called out by the assembly comparer because the method went from public to internal. I will call this out as a breaking change, but the IsSet method is always internal and i don't see this as a big enough breaking change to warrant a customization hook for.

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

  • All new and existing tests passed

License

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

stack-info: PR: #4145, branch: peterrsongg/petesong/phase-3-pr-3/1
stack-info: PR: #4146, branch: peterrsongg/petesong/phase-3-pr-3/2
stack-info: PR: #4147, branch: peterrsongg/petesong/phase-3-pr-3/3
@peterrsongg peterrsongg force-pushed the peterrsongg/petesong/phase-3-pr-3/2 branch from 798da71 to f8ef622 Compare November 20, 2025 17:37
@peterrsongg peterrsongg force-pushed the peterrsongg/petesong/phase-3-pr-3/3 branch from 831e331 to 43818b1 Compare November 20, 2025 17:37
@peterrsongg
Copy link
Contributor Author

peterrsongg commented Nov 20, 2025

Breaking Changes Analysis for ListBucketIntelligentTieringConfigurations Migration

Files Analyzed: 4 out of 4

  • ListBucketIntelligentTieringConfigurationsRequest.cs (Model)
  • ListBucketIntelligentTieringConfigurationsResponse.cs (Model)
  • ListBucketIntelligentTieringConfigurationsRequestMarshaller.cs (Marshaller)
  • ListBucketIntelligentTieringConfigurationsResponseUnmarshaller.cs (Unmarshaller)

BREAKING CHANGES FOUND:

1. IsSetBucketName() Logic Changed in Request Model

File: ListBucketIntelligentTieringConfigurationsRequest.cs

Custom (Deleted):

internal bool IsSetBucketName()
{
    return !(string.IsNullOrEmpty(this.bucketName));
}

Generated (New):

internal bool IsSetBucketName()
{
    return this._bucketName != null;
}

Impact: The IsSet method changed from !string.IsNullOrEmpty() to != null. This is a BREAKING CHANGE per rule #5. An empty string ("") would return false with the old logic but true with the new logic, potentially causing empty bucket names to be accepted when they should be rejected.


2. ContinuationToken Marshalling Method Changed

File: ListBucketIntelligentTieringConfigurationsRequestMarshaller.cs

Custom (Deleted):

if (listBucketIntelligentTieringConfigurationsRequest.IsSetContinuationToken())
{
    request.AddSubResource("continuation-token", listBucketIntelligentTieringConfigurationsRequest.ContinuationToken.ToString());
}

Generated (New):

if (publicRequest.IsSetContinuationToken())
    request.Parameters.Add("continuation-token", StringUtils.FromString(publicRequest.ContinuationToken));

Impact: The marshaller changed from using AddSubResource() to Parameters.Add(). This is a BREAKING CHANGE that affects how the continuation token is serialized in the HTTP request:

  • AddSubResource() adds it as a sub-resource in the query string (e.g., ?intelligent-tiering&continuation-token=value)
  • Parameters.Add() adds it as a regular parameter (e.g., ?intelligent-tiering&continuation-token=value)

While the URL format may appear similar, these methods handle encoding and parameter ordering differently, which could break existing integrations that depend on the exact HTTP request format.


3. Response Internal Method Names Changed (Minor Issue)

File: ListBucketIntelligentTieringConfigurationsResponse.cs

Custom (Deleted):

internal bool IsSetToken()
{
    return !(string.IsNullOrEmpty(this.continuationToken));
}

internal bool IsSetNextToken()
{
    return !(string.IsNullOrEmpty(this.nextContinuationToken));
}

Generated (New):

internal bool IsSetContinuationToken()
{
    return !string.IsNullOrEmpty(this._continuationToken);
}

internal bool IsSetNextContinuationToken()
{
    return !string.IsNullOrEmpty(this._nextContinuationToken);
}

Impact: Internal method names changed from IsSetToken()/IsSetNextToken() to IsSetContinuationToken()/IsSetNextContinuationToken(). Since these are internal methods, this is NOT a public API breaking change but could break internal SDK code that references these methods.


Summary

  • Total Files Analyzed: 4 / 4 (100%)
  • Critical Breaking Changes: 2
  • Minor Internal Changes: 1

Recommendation: The IsSetBucketName() and continuation token marshalling changes are serious breaking changes that must be fixed before release. The IsSet logic for BucketName must preserve the !string.IsNullOrEmpty() check, and the marshaller must use AddSubResource() to maintain backward compatibility with existing S3 request formatting.

@peterrsongg
Copy link
Contributor Author

In the AI report, none of these are breaking changes

  1. BucketName is validated as part of required params and the IsSet will never get called with an empty string
    2 and 3 are both internal

One thing AI didn't catch is IsTruncated is using the NullableBoolMarshaller. This is okay because IsTruncated always returns a true or false value

@peterrsongg peterrsongg marked this pull request as ready for review November 20, 2025 19:31
@peterrsongg peterrsongg changed the base branch from peterrsongg/petesong/phase-3-pr-3/2 to petesong/4145-4149 November 21, 2025 18:18
@peterrsongg peterrsongg merged commit 72d62b2 into petesong/4145-4149 Nov 21, 2025
1 check passed
peterrsongg added a commit that referenced this pull request Nov 21, 2025
* generate PutBucketIntelligentTieringConfiguration

stack-info: PR: #4145, branch: peterrsongg/petesong/phase-3-pr-3/1

* Generate GetBucketIntelligentTieringConfiguration

stack-info: PR: #4146, branch: peterrsongg/petesong/phase-3-pr-3/2

* Generate ListBucketIntelligentTieringConfiguration

stack-info: PR: #4147, branch: peterrsongg/petesong/phase-3-pr-3/3

* Generate DeleteBucketIntelligentTiering

stack-info: PR: #4148, branch: peterrsongg/petesong/phase-3-pr-3/4
peterrsongg added a commit that referenced this pull request Nov 21, 2025
* generate PutBucketIntelligentTieringConfiguration

stack-info: PR: #4145, branch: peterrsongg/petesong/phase-3-pr-3/1

* Generate GetBucketIntelligentTieringConfiguration

stack-info: PR: #4146, branch: peterrsongg/petesong/phase-3-pr-3/2

* Generate ListBucketIntelligentTieringConfiguration

stack-info: PR: #4147, branch: peterrsongg/petesong/phase-3-pr-3/3

* Generate DeleteBucketIntelligentTiering

stack-info: PR: #4148, branch: peterrsongg/petesong/phase-3-pr-3/4

* add shapes to S3NeedsCustomUpdate and add devconfig

stack-info: PR: #4149, branch: peterrsongg/petesong/phase-3-pr-3/5
@peterrsongg peterrsongg deleted the peterrsongg/petesong/phase-3-pr-3/3 branch November 21, 2025 18:21
@peterrsongg peterrsongg mentioned this pull request Nov 21, 2025
10 tasks
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.

3 participants