Skip to content

[ServiceBus] correct types for propertiesToModify options#20577

Merged
jeremymeng merged 3 commits intoAzure:mainfrom
jeremymeng:sb/fix-props-to-modify-value-type
Mar 11, 2022
Merged

[ServiceBus] correct types for propertiesToModify options#20577
jeremymeng merged 3 commits intoAzure:mainfrom
jeremymeng:sb/fix-props-to-modify-value-type

Conversation

@jeremymeng
Copy link
Copy Markdown
Member

We claim that we can take any type of property values for properties to be
modified but it's applicationProperties part of a Service Bus message that is
modified. That property has a type of number | boolean | string | Date | null
and is what the service supports.

This PR corrects the types for these options to align with
applicationProperties. Even though it shows as a breaking change, other
unsupported types (e.g., an object literal) would cause service errors so they
never worked.

Packages impacted by this PR

@azure/service-bus

Issues associated with this PR

#20545

Are there test cases added in this PR? (If not, why?)

Not needed. Just type checking.

  • Added a changelog (if necessary)

We claim that we can take `any` type of property values for properties to be
modified but it's `applicationProperties` part of a Service Bus message that is
modified. That property has a type of `number | boolean | string | Date | null`
and is what the service supports.

This PR corrects the types for these options to align with
`applicationProperties`. Even though it shows as a breaking change, other
unsupported types (e.g., an object literal) would cause service errors so they
never worked.
@azure-sdk
Copy link
Copy Markdown
Collaborator

API changes have been detected in @azure/service-bus. You can review API changes here

API changes

-             [key: string]: any;
+             [key: string]: number | boolean | string | Date | null;
-             [key: string]: any;
+             [key: string]: number | boolean | string | Date | null;
-             [key: string]: any;
+             [key: string]: number | boolean | string | Date | null;

}): Promise<void>;
deferMessage(message: ServiceBusReceivedMessage, propertiesToModify?: {
[key: string]: any;
[key: string]: number | boolean | string | Date | null;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we have tests for all these types?

@jeremymeng
Copy link
Copy Markdown
Member Author

do we have tests for all these types?

We have coverage on these types in applicationProperties when creating test messages, not when modifying from abondon/defer/deadLetter calls. I don't feel the need to add invalid types when we can detect them in compile time.

Copy link
Copy Markdown
Member

@deyaaeldeen deyaaeldeen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand the change is to shift some errors to compile time instead of runtime ones coming from core/service, but I wonder if there is any code out there that could break because of this.

@jeremymeng
Copy link
Copy Markdown
Member Author

but I wonder if there is any code out there that could break because of this.

Yeah, I think it's a valid concern. I could probably add clarification on supported types in the ref doc, and leave this PR for next major release.

@jeremymeng jeremymeng marked this pull request as draft March 9, 2022 22:32
@jeremymeng jeremymeng marked this pull request as ready for review March 10, 2022 19:08
@jeremymeng
Copy link
Copy Markdown
Member Author

After discussing with JS architects, this is promoting a runtime error to a compiler error and is considered a bug fix.

@check-enforcer
Copy link
Copy Markdown

This pull request is protected by Check Enforcer.

What is Check Enforcer?

Check Enforcer helps ensure all pull requests are covered by at least one check-run (typically an Azure Pipeline). When all check-runs associated with this pull request pass then Check Enforcer itself will pass.

Why am I getting this message?

You are getting this message because Check Enforcer did not detect any check-runs being associated with this pull request within five minutes. This may indicate that your pull request is not covered by any pipelines and so Check Enforcer is correctly blocking the pull request being merged.

What should I do now?

If the check-enforcer check-run is not passing and all other check-runs associated with this PR are passing (excluding license-cla) then you could try telling Check Enforcer to evaluate your pull request again. You can do this by adding a comment to this pull request as follows:
/check-enforcer evaluate
Typically evaulation only takes a few seconds. If you know that your pull request is not covered by a pipeline and this is expected you can override Check Enforcer using the following command:
/check-enforcer override
Note that using the override command triggers alerts so that follow-up investigations can occur (PRs still need to be approved as normal).

What if I am onboarding a new service?

Often, new services do not have validation pipelines associated with them, in order to bootstrap pipelines for a new service, you can issue the following command as a pull request comment:
/azp run prepare-pipelines
This will run a pipeline that analyzes the source tree and creates the pipelines necessary to build and validate your pull request. Once the pipeline has been created you can trigger the pipeline using the following comment:
/azp run js - [service] - ci

@azure-sdk
Copy link
Copy Markdown
Collaborator

API changes have been detected in @azure/service-bus. You can review API changes here

API changes

-             [key: string]: any;
+             [key: string]: number | boolean | string | Date | null;
-             [key: string]: any;
+             [key: string]: number | boolean | string | Date | null;
-             [key: string]: any;
+             [key: string]: number | boolean | string | Date | null;

@jeremymeng jeremymeng merged commit 4eec65d into Azure:main Mar 11, 2022
@jeremymeng jeremymeng deleted the sb/fix-props-to-modify-value-type branch March 11, 2022 17:52
WeiJun428 pushed a commit to WeiJun428/azure-sdk-for-js that referenced this pull request Mar 20, 2022
)

We claim that we can take `any` type of property values for properties to be
modified but it's `applicationProperties` part of a Service Bus message that is
modified. That property has a type of `number | boolean | string | Date | null`
and is what the service supports.

This PR corrects the types for these options to align with
`applicationProperties`. Even though it shows as a breaking change, other
unsupported types (e.g., an object literal) would cause service errors so they
never worked.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants