Skip to content

add DialCustom for overridden runtime behavior#18733

Merged
demmer merged 2 commits intovitessio:mainfrom
slackhq:grpc-vtgateconn-dialcustom
Oct 14, 2025
Merged

add DialCustom for overridden runtime behavior#18733
demmer merged 2 commits intovitessio:mainfrom
slackhq:grpc-vtgateconn-dialcustom

Conversation

@demmer
Copy link
Member

@demmer demmer commented Oct 9, 2025

Description

Add a new DialCustom hook to the vtgateconn.

We have a case where we want to create a grpcvtgateconn with a dynamic dialer to include runtime options, specifically to override the load balancer using the following:

	withBalancer := grpc.WithDefaultServiceConfig(...)
	dialer := grpcvtgateconn.Dial(withBalancer)

Rather than registering this dialer in the global set, we want to instead just invoke the dialer function inline using this newly-added hook:

	conn, err := vtgateconn.DialCustom(ctx, dialer, target)

Related Issue(s)

Checklist

  • "Backport to:" labels have been added if this change should be back-ported to release branches
  • If this change is to be back-ported to previous releases, a justification is included in the PR description
  • Tests were added or are not required
  • Did the new or modified tests pass consistently locally and on CI?
  • Documentation was added or is not required

Deployment Notes

AI Disclosure

Signed-off-by: Michael Demmer <mdemmer@slack-corp.com>
@vitess-bot
Copy link
Contributor

vitess-bot bot commented Oct 9, 2025

Review Checklist

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

General

  • Ensure that the Pull Request has a descriptive title.
  • Ensure there is a link to an issue (except for internal cleanup and flaky test fixes), new features should have an RFC that documents use cases and test cases.

Tests

  • Bug fixes should have at least one unit or end-to-end test, enhancement and new features should have a sufficient number of tests.

Documentation

  • Apply the release notes (needs details) label if users need to know about this change.
  • New features should be documented.
  • There should be some code comments as to why things are implemented the way they are.
  • There should be a comment at the top of each new or modified test to explain what the test does.

New flags

  • Is this flag really necessary?
  • Flag names must be clear and intuitive, use dashes (-), and have a clear help text.

If a workflow is added or modified:

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

Backward compatibility

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

@vitess-bot vitess-bot bot added NeedsBackportReason If backport labels have been applied to a PR, a justification is required NeedsDescriptionUpdate The description is not clear or comprehensive enough, and needs work NeedsIssue A linked issue is missing for this Pull Request NeedsWebsiteDocsUpdate What it says labels Oct 9, 2025
@github-actions github-actions bot added this to the v24.0.0 milestone Oct 9, 2025
@codecov
Copy link

codecov bot commented Oct 9, 2025

Codecov Report

❌ Patch coverage is 75.00000% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 67.49%. Comparing base (3d7f63e) to head (335ff58).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
go/vt/vtgate/vtgateconn/vtgateconn.go 75.00% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #18733      +/-   ##
==========================================
- Coverage   67.50%   67.49%   -0.01%     
==========================================
  Files        1605     1605              
  Lines      263756   263764       +8     
==========================================
- Hits       178046   178032      -14     
- Misses      85710    85732      +22     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@demmer demmer removed the NeedsBackportReason If backport labels have been applied to a PR, a justification is required label Oct 13, 2025
Comment on lines +84 to +97
_, err := DialProtocol(context.Background(), protocol, "")
if err != nil || dialer != "default" {
t.Fatalf("default dialerFunc should have been called, got %s, err: %v", dialer, err)
}

_, err = DialCustom(context.Background(), customDialerFunc, protocol)
if err != nil || dialer != "custom" {
t.Fatalf("custom dialerFunc should have been called, got %s, err: %v", dialer, err)
}

_, err = DialCustom(context.Background(), customDialerFunc2, protocol)
if err != nil || dialer != "custom2" {
t.Fatalf("custom2 dialerFunc should have been called, got %s, err: %v", dialer, err)
}
Copy link
Member

Choose a reason for hiding this comment

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

Minor nitpick, but it would be nice if these tests used require:

Suggested change
_, err := DialProtocol(context.Background(), protocol, "")
if err != nil || dialer != "default" {
t.Fatalf("default dialerFunc should have been called, got %s, err: %v", dialer, err)
}
_, err = DialCustom(context.Background(), customDialerFunc, protocol)
if err != nil || dialer != "custom" {
t.Fatalf("custom dialerFunc should have been called, got %s, err: %v", dialer, err)
}
_, err = DialCustom(context.Background(), customDialerFunc2, protocol)
if err != nil || dialer != "custom2" {
t.Fatalf("custom2 dialerFunc should have been called, got %s, err: %v", dialer, err)
}
_, err := DialProtocol(context.Background(), protocol, "")
require.NoError(t, err)
require.Equal(t, dialer, "default", "default dialerFunc should have been called")
_, err = DialCustom(context.Background(), customDialerFunc, protocol)
require.NoError(t, err)
require.Equal(t, dialer, "custom", "custom dialerFunc should have been called")
_, err = DialCustom(context.Background(), customDialerFunc2, protocol)
require.NoError(t, err)
require.Equal(t, dialer, "custom2", "custom2 dialerFunc should have been called")

Copy link
Member Author

Choose a reason for hiding this comment

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

Ah much better thanks. Updated.

@arthurschreiber arthurschreiber added Type: Enhancement Logical improvement (somewhere between a bug and feature) Component: VTGate and removed NeedsDescriptionUpdate The description is not clear or comprehensive enough, and needs work NeedsWebsiteDocsUpdate What it says NeedsIssue A linked issue is missing for this Pull Request labels Oct 14, 2025
Signed-off-by: Michael Demmer <mdemmer@slack-corp.com>
@demmer demmer enabled auto-merge (squash) October 14, 2025 16:19
@demmer demmer merged commit bc0b8c5 into vitessio:main Oct 14, 2025
103 checks passed
@demmer demmer deleted the grpc-vtgateconn-dialcustom branch October 14, 2025 16:50
demmer added a commit to slackhq/vitess that referenced this pull request Oct 14, 2025
Signed-off-by: Michael Demmer <mdemmer@slack-corp.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Component: VTGate Type: Enhancement Logical improvement (somewhere between a bug and feature)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants