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

Move vreplication to vitess json parser #12761

Merged

Conversation

rohit-nayak-ps
Copy link
Contributor

@rohit-nayak-ps rohit-nayak-ps commented Mar 29, 2023

Description

This PR moves away from using the ajson based binlog parser, switching instead to the new internal json parser created as part of the new evalengine work which was refactored in #12757 to be usable by other Vitess modules.

The primary motivation for this work was to resolve the problem we have today where decimals and numerics are vreplicated in a lossy manner.

Key Changes

  • VStreamer uses the functionality of the new parser which converts the binary representation in binlogs into a json document string.
  • VReplication (vplayer and vcopier) will map the json document string into a format using json_objects and json_arrays while creating the insert/update dmls in vreplication workflows.
  • Initially there were import cycles due to dependency b/w the go/mysql and sqlparser packages. Some code organization and a significant refactor of binlog json parsing code is part of this PR along with a new serialization of json data types using json_object() and json_array() for use in DMLs.

Related Issue(s)

Fixes: #8686

Checklist

  • "Backport to:" labels have been added if this change should be back-ported
  • Tests were added or are not required
  • Did the new or modified tests pass consistently locally and on the CI
  • Documentation was added or is not required

@rohit-nayak-ps rohit-nayak-ps added the Skip CI Skip CI actions from running label Mar 29, 2023
@vitess-bot vitess-bot bot added NeedsDescriptionUpdate The description is not clear or comprehensive enough, and needs work NeedsWebsiteDocsUpdate What it says labels Mar 29, 2023
@vitess-bot
Copy link
Contributor

vitess-bot bot commented Mar 29, 2023

Review Checklist

Hello reviewers! 👋 Please follow this checklist when reviewing this Pull Request.

General

  • Ensure that the Pull Request has a descriptive title.
  • If this is a change that users need to know about, please apply the release notes (needs details) label so that merging is blocked unless the summary release notes document is included.
  • If a test is added or modified, there should be a documentation on top of the test to explain what the expected behavior is what the test does.

If a new flag is being introduced:

  • Is it really necessary to add this flag?
  • Flag names should be clear and intuitive (as far as possible)
  • Help text should be descriptive.
  • Flag names should use dashes (-) as word separators rather than underscores (_).

If a workflow is added or modified:

  • Each item in Jobs should be named in order to mark it as required.
  • If the workflow should be required, the maintainer team should be notified.

Bug fixes

  • There should be at least one unit or end-to-end test.
  • The Pull Request description should include a link to an issue that describes the bug.

Non-trivial changes

  • There should be some code comments as to why things are implemented the way they are.

New/Existing features

  • Should be documented, either by modifying the existing documentation or creating new documentation.
  • New features should have a link to a feature request issue or an RFC that documents the use cases, corner cases and test cases.

Backward compatibility

  • Protobuf changes should be wire-compatible.
  • Changes to _vt tables and RPCs need to be backward compatible.
  • vtctl command output order should be stable and awk-able.
  • RPC changes should be compatible with vitess-operator
  • If a flag is removed, then it should also be removed from VTop, if used there.

@vmg vmg force-pushed the rn-vrep-move-to-vitess-json-parser branch from eee0706 to 2822a1f Compare March 29, 2023 16:33
@vmg vmg marked this pull request as ready for review March 29, 2023 16:33
@dbussink dbussink force-pushed the rn-vrep-move-to-vitess-json-parser branch from c778177 to 5fe03bc Compare March 30, 2023 07:46
@vmg vmg added Type: Internal Cleanup Component: Query Serving and removed NeedsDescriptionUpdate The description is not clear or comprehensive enough, and needs work NeedsWebsiteDocsUpdate What it says Skip CI Skip CI actions from running labels Mar 30, 2023
…at and replication constants required for json parser into sqltypes. Currently has import cycles due to use of CellAlias in json parser

Signed-off-by: Rohit Nayak <rohit@planetscale.com>
…w vitess json parser

Signed-off-by: Rohit Nayak <rohit@planetscale.com>
@rohit-nayak-ps rohit-nayak-ps force-pushed the rn-vrep-move-to-vitess-json-parser branch from a9ad6a5 to 25c4589 Compare April 2, 2023 20:16
vmg and others added 5 commits April 2, 2023 22:17
Signed-off-by: Vicent Marti <vmg@strn.cat>
Signed-off-by: Vicent Marti <vmg@strn.cat>
…ore json values in a lossless manner using JSON_OBJECT/JSON_ARRAYs

Signed-off-by: Rohit Nayak <rohit@planetscale.com>
Signed-off-by: Rohit Nayak <rohit@planetscale.com>
…rings as part of all vrep e2e tests

Signed-off-by: Rohit Nayak <rohit@planetscale.com>
rohit-nayak-ps and others added 3 commits April 3, 2023 12:49
Signed-off-by: Rohit Nayak <rohit@planetscale.com>
…12799)

* Give mysqlctld time to shutdown properly before restarting to account for delays in CI

Signed-off-by: Rohit Nayak <rohit@planetscale.com>

* Address review comments

Signed-off-by: Rohit Nayak <rohit@planetscale.com>

---------

Signed-off-by: Rohit Nayak <rohit@planetscale.com>
…fix vdiff failure

Signed-off-by: Rohit Nayak <rohit@planetscale.com>
Copy link
Contributor

@mattlord mattlord left a comment

Choose a reason for hiding this comment

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

LGTM! Thank you @rohit-nayak-ps, @vmg, and @dbussink !

@rohit-nayak-ps rohit-nayak-ps changed the title [WIP] Move vreplication to vitess json parser Move vreplication to vitess json parser Apr 4, 2023
…ookupUpdateBecauseUncomparableTypes

Signed-off-by: Rohit Nayak <rohit@planetscale.com>
@rohit-nayak-ps rohit-nayak-ps requested review from dbussink and removed request for systay, frouioui and GuptaManan100 April 4, 2023 20:43
… space b/w key and value added by the new serialization

Signed-off-by: Rohit Nayak <rohit@planetscale.com>
@rohit-nayak-ps rohit-nayak-ps merged commit e1be0c7 into vitessio:main Apr 6, 2023
@rohit-nayak-ps rohit-nayak-ps deleted the rn-vrep-move-to-vitess-json-parser branch April 6, 2023 06:25
frouioui pushed a commit to planetscale/vitess that referenced this pull request Nov 21, 2023
…itessio#1836)

* cherry pick of 12761

Signed-off-by: Vitess Cherry-Pick Bot <vitess-cherrypick-bot@planetscale.com>

* Fix conflicts

Signed-off-by: Rohit Nayak <rohit@planetscale.com>

---------

Signed-off-by: Vitess Cherry-Pick Bot <vitess-cherrypick-bot@planetscale.com>
Signed-off-by: Rohit Nayak <rohit@planetscale.com>
Co-authored-by: Vitess Cherry-Pick Bot <vitess-cherrypick-bot@planetscale.com>
Co-authored-by: Rohit Nayak <rohit@planetscale.com>
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.

vstream: json integers get converted into scientific notation
4 participants