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

feat(capabilities/webapi): use a round robin selector in handler #16170

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from

Conversation

MStreet3
Copy link
Contributor

@MStreet3 MStreet3 commented Jan 31, 2025

This PR:

  • adds a round robin selector that cycles through a slice of gateway IDs
  • replaces the gateway selection in the outgoing connector handler to use the round robin selector

Logs below show subsequent requests for the same message ID using gateways iteratively.

2025-01-31T12:18:23.727-0500    debug   WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:82 sending request to gateway      {"version": "0.0.1@unset", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}
2025-01-31T12:18:23.727-0500    info    WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:96 selected gateway, awaiting connection   {"version": "0.0.1@unset", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0", "gatewayID": "por_gateway"}
2025-01-31T12:18:24.339-0500    debug   WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:124        handling gateway request        {"version": "0.0.1@unset", "gatewayID": "por_gateway", "method": "workflow_syncer", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}
2025-01-31T12:18:24.339-0500    debug   WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:108        received response from gateway  {"version": "0.0.1@unset", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}
2025-01-31T12:18:24.339-0500    debug   WorkflowRegistrySyncer.FetcherService   syncer/fetcher.go:103   received gateway response       {"version": "0.0.1@unset", "donID": "1", "msgID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}
2025-01-31T12:25:15.147-0500    debug   WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:82 sending request to gateway      {"version": "0.0.1@unset", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}
2025-01-31T12:25:15.147-0500    info    WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:96 selected gateway, awaiting connection   {"version": "0.0.1@unset", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0", "gatewayID": "por_gateway_2"}
2025-01-31T12:25:15.743-0500    debug   WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:124        handling gateway request        {"version": "0.0.1@unset", "gatewayID": "por_gateway_2", "method": "workflow_syncer", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}
2025-01-31T12:25:15.743-0500    debug   WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:108        received response from gateway  {"version": "0.0.1@unset", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}
2025-01-31T12:25:15.744-0500    debug   WorkflowRegistrySyncer.FetcherService   syncer/fetcher.go:103   received gateway response       {"version": "0.0.1@unset", "donID": "1", "msgID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}
2025-01-31T12:38:43.718-0500    debug   WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:82 sending request to gateway      {"version": "0.0.1@unset", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}
2025-01-31T12:38:43.719-0500    info    WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:96 selected gateway, awaiting connection   {"version": "0.0.1@unset", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0", "gatewayID": "por_gateway_2"}
2025-01-31T12:38:44.314-0500    debug   WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:124        handling gateway request        {"version": "0.0.1@unset", "gatewayID": "por_gateway_2", "method": "workflow_syncer", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}
2025-01-31T12:38:44.314-0500    debug   WorkflowRegistrySyncer.FetcherService.OutgoingConnectorHandler  webapi/outgoing_connector_handler.go:108        received response from gateway  {"version": "0.0.1@unset", "messageID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0", "gatewayID": "por_gateway_2"}
2025-01-31T12:38:44.314-0500    debug   WorkflowRegistrySyncer.FetcherService   syncer/fetcher.go:103   received gateway response       {"version": "0.0.1@unset", "donID": "1", "msgID": "workflow_syncer/c494b627c6e7c35b55b10b3904e91885c29f13fade8f2739cb8be3e2d53ab3b0"}

Requires

Supports

@MStreet3 MStreet3 requested review from a team as code owners January 31, 2025 17:41
rateLimiter: rateLimiter,
lggr: lgger,
gc: gc,
gatewaySelector: NewRoundRobinSelector(gc.GatewayIDs()),
Copy link
Contributor

Choose a reason for hiding this comment

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

@MStreet3 Thinking about this a bit more -- Is this safe? It basically queries GatewayIDs once, at instantiation time; I wonder if there could be some weird races where we haven't connected to everything and so our list is shorter than it otherwise could be. Maybe it's worth passing in the list of IDs every time we make a choice?

Copy link
Contributor

Choose a reason for hiding this comment

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

Actually 🤦 nvm, you can see that the size of the list doesn't change here:

for _, gw := range config.Gateways {

Copy link
Contributor

github-actions bot commented Jan 31, 2025

AER Report: CI Core ran successfully ✅

aer_workflow , commit

AER Report: Operator UI CI ran successfully ✅

aer_workflow , commit

justinkaseman
justinkaseman previously approved these changes Jan 31, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants