Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize SystemEnvironmentPropertyMapper #21523

Conversation

dreis2211
Copy link
Contributor

Hi,

I just noticed a couple of minor performance tweaks in SystemEnvironmentPropertyMapper. The biggest one is probably to avoid creating ConfigurationPropertyName instances twice for every isAncestorOf check (once for the normal of() call and once for the isValid() check).

Cheers,
Christoph

@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged label May 20, 2020
@snicoll snicoll added type: enhancement A general enhancement and removed status: waiting-for-triage An issue we've not yet triaged labels May 25, 2020
@snicoll snicoll added this to the 2.3.1 milestone May 25, 2020
Copy link
Member

@snicoll snicoll left a comment

Choose a reason for hiding this comment

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

Thanks for the PR. I am not sure why you've added that extra catch block there.

try {
return ConfigurationPropertyName.of(legacyCompatibleName).isAncestorOf(candidate);
}
catch (Exception ex) {
Copy link
Member

Choose a reason for hiding this comment

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

Can you share what that extra catch block is supposed to cover?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The removal of isValid here might lead to exceptions if the name can't be constructed.

Copy link
Member

Choose a reason for hiding this comment

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

I'd argue that legacyCompatibleName is a bit misleading then. It makes me wonder looking at the code why a catch block is necessary. Thoughts?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I didn't change anything in that regards. I think the name was chosen to reflect the "legacy" format and isValid() was added to be sure that no incompatible output breaks the code here. This PR just sticks to that behaviour of not breaking anything with a potentially invalid name.
Having that said, I too had a hard time seeing how an invalid name can be produced from a valid name, but didn't want to change the intention of the code.

Copy link
Member

Choose a reason for hiding this comment

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

Alright, thanks for the feedback. Flagging for team attention to see what the rest of the team thinks.

@snicoll snicoll self-assigned this May 25, 2020
@snicoll snicoll added the for: team-attention An issue we'd like other members of the team to review label May 25, 2020
@snicoll snicoll modified the milestones: 2.3.1, 2.3.x May 26, 2020
@philwebb philwebb self-requested a review June 5, 2020 15:52
@philwebb philwebb self-assigned this Jun 5, 2020
@philwebb philwebb removed the for: team-attention An issue we'd like other members of the team to review label Jun 5, 2020
philwebb pushed a commit that referenced this pull request Jun 5, 2020
Update `SystemEnvironmentPropertyMapper` to use single chars
rather than strings whenever possible.

See gh-21523
philwebb pushed a commit that referenced this pull request Jun 5, 2020
philwebb pushed a commit that referenced this pull request Jun 5, 2020
philwebb added a commit that referenced this pull request Jun 5, 2020
Introduce a new `ConfigurationPropertyName.ofIfValid` method to
save us needing to throw and catch an exception unnecessarily.

See gh-21523
@philwebb philwebb closed this in bbb5742 Jun 5, 2020
@philwebb
Copy link
Member

philwebb commented Jun 5, 2020

Thanks once again @dreis2211! I split this up into a few smaller commits and also added a new method to ConfigurationPropertyName to save needing to throw/catch the exception.

@philwebb philwebb modified the milestones: 2.3.x, 2.3.1 Jun 5, 2020
@philwebb philwebb removed their request for review June 5, 2020 23:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: enhancement A general enhancement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants