Skip to content

feat: gdb support - #685

Merged
karenc-bq merged 23 commits into
mainfrom
dev/v3
Aug 19, 2026
Merged

feat: gdb support#685
karenc-bq merged 23 commits into
mainfrom
dev/v3

Conversation

@karenc-bq

@karenc-bq karenc-bq commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds Aurora Global Database (GDB) support to the AWS Advanced NodeJS Wrapper, along with the supporting refactors that make it possible.

Description

New GDB features

  • GDB Failover Plugin (gdbFailover) — built on Failover v2, adds the notion of a home region and lets applications configure distinct failover behavior for in-home (primary region matches the configured home region) and out-of-home (primary has switched to another region) cases. See UsingTheGdbFailoverPlugin.md.
  • GDB Read/Write Splitting Plugin (gdbReadWriteSplitting) — extends read/write splitting with a home-region constraint so new connections can be kept in-region, avoiding cross-region latency. See UsingTheGdbReadWriteSplittingPlugin.md.
  • Global Aurora Accessible Regions (gdbAccessibleRegions) — a comma-separated allowlist of reachable AWS regions. When set, hosts in excluded regions are filtered out of topology monitoring, failover candidates, read/write splitting targets, and initial connection strategy. See UsingGlobalAuroraAccessibleRegions.md.
  • GDB database dialects and IAM authentication support for GDB.

Supporting refactors

  • EFM plugin restructure — split into efm/v1 and efm/v2 with shared efm/base classes (host_monitor, host_monitor_service, connection_context); removed the legacy efm/ and efm2/ monitor implementations.
  • Topology handling — introduced topology_utils, aurora_topology_utils, global_topology_utils, global_aurora_host_list_provider, and dedicated monitoring connection handlers (aurora_monitoring_connection_handler, gdb_monitoring_connection_handler, global_aurora_topology_monitor).
  • Read/write splitting moved into its own directory and refactored.
  • Storage service refactoring and consolidation of cache items into a single location.
  • Added partial_plugin_service; cleanups removing duplicated getHostAndPort, the suggested cluster id, and alias usage.
  • Federated auth / SAML providers consolidated.

Docs & CI

  • New GDB plugin guides plus updated compatibility documentation.
  • GitHub Actions workflows updated to run on dev/v3.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@karenc-bq
karenc-bq requested a review from a team as a code owner August 14, 2026 20:32
Comment thread mysql/lib/dialect/rds_multi_az_mysql_database_dialect.ts Outdated
Comment thread common/lib/utils/gdb_region_utils.ts Outdated
Comment thread common/lib/plugins/federated_auth/saml_auth_plugin.ts
Comment thread common/lib/plugins/gdb_failover/global_db_failover_plugin.ts Outdated
Comment thread common/lib/plugins/gdb_failover/global_db_failover_plugin.ts Outdated
Comment thread common/lib/partial_plugin_service.ts Outdated
Comment thread common/lib/partial_plugin_service.ts
Comment thread common/lib/utils/messages.ts Outdated
Comment thread common/lib/utils/messages.ts Outdated
"Utils.topology": "Topology: %s",
"RdsHostListProvider.incorrectDialect": "Dialect needs to be a topology aware dialect.",
"RdsHostListProvider.suggestedClusterId": "ClusterId '%s' is suggested for url '%s'.",
"RdsHostListProvider.noClusterId": "No clusterId found. Please ensure clusterId parameter is set to a non-empty string.",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I did a little audit of all the messages and here are the ones that are

In code and not in the messages file:

  • PluginService.errorIdentifyConnection
  • Failover2.unableToConnect
  • LimitlessConnectionPlugin.failedToConnectToHost
  • RdsHostListProvider.parsedListEmpty
  • RdsHostListProvider.invalidPattern.suggestedClusterId
  • RdsHostListProvider.clusterInstanceHostPatternNotSupportedForRDSProxy
  • RdsHostListProvider.clusterInstanceHostPatternNotSupportedForRdsCustom

Fewer args than %s (literal %s leaks — add missing arg)

  • Failover.unexpectedReaderRole — %s: 2, args: 1
  • Bgd.stillInProgressTryMethodLater — %s: 2, args: 1
  • MonitorService.monitorClassMismatch — %s: 4, args: 3
    -PluginManager.unknownPluginCode — %s: 1, args: 0

More args than %s (extra arg dropped)

  • AwsSecretsManagerConnectionPlugin.unhandledError — %s: 1, args: 2
  • HostResponseTimeMonitor.interruptedErrorDuringMonitoring — %s: 1, args: 2
  • LimitlessRouterMonitor.errorDuringMonitoringStop — %s: 1, args: 2
  • HostMonitor.detectedWriter — %s: 1, args: 2
  • LimitlessRouterServiceImpl.nullLimitlessRouterMonitor — %s: 0, args: 1
  • ConfigurationProfileBuilder.profileNameRequired — %s: 0, args: 1

In the messages file and not in the code:
AuroraInitialConnectionStrategyPlugin.requireDynamicProvider
Authentication.unsupportedHostname
Bgd.inProgressConnectionClosed
Bgd.interrupted
Bgd.unhandledNetworkError
Bgd.usesVersion
ClientUtils.connectTimeout
ClusterAwareReaderFailoverHandler.failedReaderConnection
ClusterTopologyMonitor.endMonitoring
ClusterTopologyMonitor.errorDuringMonitoring
ClusterTopologyMonitor.startingHostMonitors
ClusterTopologyMonitor.unableToConnect
ClusterTopologyMonitoring.ignoringNewTopologyRequest
ConnectionStringHostListProvider.errorIdentifyConnection
Failover.TransactionResolutionUnknownError
Failover.connectionExplicitlyClosed
Failover.noOperationsAfterConnectionClosed
Failover.strictReaderUnknownHostRole
Failover2.failoverReaderNotConnectedToReader
GlobalDbFailoverPlugin.unableToConnect
HostMonitor.writerIsStale
HostResponseTimeMonitor.stopped
MonitorImpl.startMonitoringTaskNewContext
MonitorImpl.stopMonitoringTaskNewContext
MonitorImpl.stopped
OpenedConnectionTracker.unableToPopulateOpenedConnectionQueue
PluginService.failedToRetrieveHostPort
PluginService.releaseResources
PluginService.requiredBlockingHostListProvider
PluginServiceImpl.failedToRetrieveHostPort
RdsHostListProvider.noClusterId
RdsMultiAzDatabaseDialect.invalidTopology
ReadWriteSplittingPlugin.closingInternalClients
ReadWriteSplittingPlugin.failedToConnectToWriter
StaleDnsHelper.clusterEndpointDns
StaleDnsHelper.writerInetAddress
StaleDnsPlugin.requireDynamicProvider

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Thanks for catching this. Addressed.

@karenc-bq
karenc-bq merged commit 6de1f95 into main Aug 19, 2026
4 checks passed
@karenc-bq
karenc-bq deleted the dev/v3 branch August 19, 2026 23:01
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.

2 participants