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

Optimized FieldConverter #7736

Merged
merged 5 commits into from Jul 10, 2023
Merged

Conversation

YohDeadfall
Copy link
Contributor

@YohDeadfall YohDeadfall commented May 22, 2023

This pull request has three commits:

  1. Optimizes read and writes using prencoded property names:
    1.1. Reading doesn't allocate and decode a JSON property name.
    1.2. Writing doesn't encode property names.
  2. Writing has two length checks less, one for each property name write since there's a limit for non-encoded literals.
  3. Since any interpolated string using static values is preprocessed and turned into a constant string type names where replaced by nameof(Field) expressions.
  4. null values are handled by the writer itself (see this).

@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 flobernd added enhancement 8.x Relates to 8.x client version and removed v8.1.1 labels Jul 5, 2023
Copy link
Member

@flobernd flobernd left a comment

Choose a reason for hiding this comment

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

LGTM! Thanks!

reader.Read();
field = reader.GetString();
}
else if (reader.ValueTextEquals(FormatProperty.EncodedUtf8Bytes))
Copy link
Contributor Author

Choose a reason for hiding this comment

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

For your info, I proposed an ability to pass an encoded text directly to the reader, but it was declined. See dotnet/runtime#86591.

@flobernd flobernd removed the v8.1.2 label Jul 10, 2023
@flobernd flobernd merged commit f181ca7 into elastic:main Jul 10, 2023
13 checks passed
@YohDeadfall YohDeadfall deleted the optimized-field-converter branch July 10, 2023 11:57
flobernd pushed a commit that referenced this pull request 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 <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <git@flobernd.de>
Co-authored-by: Karl-Johan Sjögren <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <git@flobernd.de>
Co-authored-by: Karl-Johan Sjögren <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <git@flobernd.de>
Co-authored-by: Karl-Johan Sjögren <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <git@flobernd.de>
Co-authored-by: Karl-Johan Sjögren <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <git@flobernd.de>
Co-authored-by: Karl-Johan Sjögren <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <git@flobernd.de>
Co-authored-by: Karl-Johan Sjögren <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <git@flobernd.de>
Co-authored-by: Karl-Johan Sjögren <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
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 <git@flobernd.de>
Co-authored-by: Karl-Johan Sjögren <karl.sjogren@gmail.com>
Co-authored-by: Yoh Deadfall <yoh.deadfall@hotmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
8.x Relates to 8.x client version
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants