-
Notifications
You must be signed in to change notification settings - Fork 2.1k
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
vstreamclient: framework for robust + simple usage #17222
base: main
Are you sure you want to change the base?
Conversation
Review ChecklistHello reviewers! 👋 Please follow this checklist when reviewing this Pull Request. General
Tests
Documentation
New flags
If a workflow is added or modified:
Backward compatibility
|
8fa88ec
to
829c980
Compare
829c980
to
378cd92
Compare
Signed-off-by: Derek Perkins <[email protected]>
378cd92
to
97a18c6
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall it looks very good. I have mentioned some issues below. Once we address those, and whatever you feel are needed as part of this, we should merge and address the several TODOs noted in the future.
I am still undecided about where to locate it. I will let others weigh in here.
I had some issues running the unit tests:
- I had to drop the state table before running
TestVStreamClient
for the second time. - I could only run one of the tests at a time. Looks like the first test doesn't clean up the state and hence the second fails, if I just run
go test
. Also it will be good to nameTestVStreamClient
toTestVStreamClientBasic
or some such to make it easier to run each test separately - I think it might be easier not to require the state table by default (or provide some mechanism to clean it up either by default or by setting a flag separately). We could store the state locally for the duration of the test in-memory. Maybe if we fix the previous issues this may not be necessary though ...
- It is difficult to debug this in an IDE because of different short timeouts. While trying to figure out some local failures various contexts kept expiring even after setting a few of the values to high numbers. Not sure what the best solution for this is: maybe move all timeout constants to a common place so anyone developing/debugging can modify it there. Maybe this is just needed for the initial phase, but others who fork this might also run into it while testing their changes.
Also:
- We can just send "" as the
vgtid
to start with the copy phase. No need to generate the per-shard vgtid done inNew()
- We should also get the failing tests working. Maybe it just needs a rebase. If not, let us know if you need help with any eventual failing tests.
- Not sure if you had a look at the e2e tests in
go/test/endtoend/vreplication
. Those allow creating a cluster if you wanted to create an e2e test for this. - Can you explain the specific tests for which you wanted to use non-exported functions from vtgate/vttablet.
go/test/endtoend/vreplication
has tests where entire clusters are created. Do those help?
Description
Proof of concept implementation for #17221.
Currently, the test file requires the local example to be running, and only succeeds on the first run. Once the overall concept and framework are in a good place, I'll add in better testing for CI. There are a lot of test helpers available in the vtgate/vttablet packages that aren't available to me here. It may end up being easier to just add the tests to one of those suites, rather than trying to build an E2E framework in this package.
Code Walkthrough
Related Issue(s)
Checklist
Deployment Notes
Currently runs on the local example setup, per the instructions here: https://vitess.io/blog/2024-07-29-cdc-vstream/#a-look-under-the-hood-at-vstream. Will migrate tests once the RFC is accepted and location is decided on.