Skip to content

Boosted non-exhaustive enum deserialization #7737

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

Merged
merged 4 commits into from
Jul 10, 2023

Conversation

YohDeadfall
Copy link
Contributor

@YohDeadfall YohDeadfall commented May 23, 2023

So, instead of using very slow reflection and trying to optimize it using an array pool a static like member can be used for structs till .NET 7. How it works in the end? The JIT produces code which calls GetString and immediately returns that value because it's smart enough to detect wrappers.

It also fixes #7729.

@elasticmachine
Copy link
Collaborator

Since this is a community submitted pull request, a Jenkins build has not been kicked off automatically. Can an Elastic organization member please verify the contents of this patch and then kick off a build manually?

@technige
Copy link

Thank you for your submission. We will review this in due course as and when someone is available on the team to do so.

@flobernd
Copy link
Member

flobernd commented Jul 5, 2023

Thanks for this enhancement as well!

Instead of manually adding this interface and the corresponding implementation to every "EnumStruct", it probably makes sense to implement this as a generic optimization to our code generator. I'll keep this PR open for now and push the regenerated files to your branch when I'm done.

@flobernd flobernd added bug 8.x Relates to a 8.x client version labels Jul 5, 2023
@YohDeadfall
Copy link
Contributor Author

Same thoughts, but couldn't get where the generator is. If it would be open sourced then anyone can fix such kind of issue and do improvements.

@flobernd
Copy link
Member

flobernd commented Jul 5, 2023

The code generator repositories are highly coupled to our internal workflow, so opening them up would be a non-trivial task. However, I'm happy to transfer this optimization to the generator project, if possible 🙂

@YohDeadfall
Copy link
Contributor Author

Yeah, that's fine too, but having something open sourced is better (for example, a schema stored in some repo which then can be consumed by build tools here and by other clients).

@flobernd flobernd merged commit ade7b6b into elastic:main Jul 10, 2023
flobernd added a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
github-actions bot pushed a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
github-actions bot pushed a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
github-actions bot pushed a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
github-actions bot pushed a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
github-actions bot pushed a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
github-actions bot pushed a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
github-actions bot pushed a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
github-actions bot pushed a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
flobernd added a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Florian Bernd <[email protected]>
Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
flobernd added a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Florian Bernd <[email protected]>
Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
flobernd added a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Florian Bernd <[email protected]>
Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
flobernd added a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Florian Bernd <[email protected]>
Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
flobernd added a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Florian Bernd <[email protected]>
Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
flobernd added a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Florian Bernd <[email protected]>
Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
flobernd added a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Florian Bernd <[email protected]>
Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
flobernd added a commit that referenced this pull request Jul 11, 2023
* DoubleWithFractionalPortionConverter and FloatWithFractionalPortionConverter should not fall through to always throw a JSONException for non NETCore builds (#7753)

* Complted buckets JSON converter (#7738)

* Boosted non-exhaustive enum deserialization (#7737)

* Optimized `FieldConverter` (#7736)

* Removed unused JsonIgnore (#7735)

* Fixed the equality contract on Metrics type (#7733)

* No allocations in ResponseItem IsValid prop (#7731)

* Refactoring and tiny behavior fix for Ids (#7730)

---------

Co-authored-by: Florian Bernd <[email protected]>
Co-authored-by: Karl-Johan Sjögren <[email protected]>
Co-authored-by: Yoh Deadfall <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
8.x Relates to a 8.x client version
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ElasticsearchClient.GetScript is broken
4 participants