All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Log level of
Failover.startWriterFailover
andFailover.establishedConnection
fromfine
toinfo
for better visibility of failover-related logs (Issue #890).
2.3.5 - 2024-03-14
- Sample code configuring the AWS JDBC Driver with DBCP (PR #930).
- Fix issue with deadlock while using prepared transactions and PostgreSQL Explicit Locking (PR #918).
- Removed
ConnectionStringHostListProvider#identifyConnection
since it is not used (PR #920).
2.3.4 - 2024-03-01
- Documentation:
- Bundled Uber Jar for Federated Authentication. See UsingTheFederatedAuthPlugin.
- Using the Read Write Splitting Plugin's internal connection pool with Spring applications. See UsingTheReadWriteSplittingPlugin.
- Spring Framework application code examples with load balanced access to database cluster reader instances (PR #852).
- New configuration preset
SF_
optimized for Spring Framework applications (PR #852). - Lightweight alternative for IAM token generator that requires fewer dependencies (PR #867).
- Fixes to session state transfer (PR #852).
- Enhanced Host Monitoring Plugin (EFM) v2 plugin to use
ConcurrentHashMap
instead ofHashMap
to avoidConcurrentModificationException
(Issue #855). - Move lock location and skip executing
Statement.getConnection
when runningStatement.cancel
to fixStatement.cancel
for MySQL (PR #851) - Remove Telemetry trace associated with a Monitor thread because traces for long-running tasks is an anti-pattern (PR #875).
- HostSelector implementations to take into account HostAvailability (PR #856).
- Reduced the number of Regular Expression checks with
Matcher.find
to improve performance (PR #854). - HostSpec class to not use a default lastUpdateTime and instead use null (PR 877).
- Moved Reader Selection Strategies out of the
UsingTheReadWriteSplittingPlugin
doc and into its own page. See ReaderSelectionStrategies.
2.3.3 - 2024-01-23
- Documentation:
- Read Write Splitting Plugin Limitations with Spring Boot/Framework.
- AWS Profile configuration parameter. See README, UsingTheJDBCDriver, and AwsCredentialsConfiguration.
- Example code for ReadWriteSplitting Plugin (PR #765).
- Enabling AWS Profile for IAM and AWS Secrets Manager authentication plugins (PR #786).
- SqlMethodAnalyzer to handle empty SQL query and not throw IndexOutOfBoundsException (PR #798).
- Restructure try blocks in dialects for exception handling (PR #799).
- Log message to communicate that an RDS Custom Cluster endpoint can't be used as the 'clusterInstanceHostPattern' configuration setting (PR 801).
- Make a variable volatile in RdsHostListProvider (Issue #486).
- Transfer session state during failover (Issue #812).
- Release all stopped monitors so that they are not reused (PR #831).
- Added update candidates for the MariaDB dialect in order to swap to MySQL dialects in the case of using a MySQL database with the protocol
jdbc:aws-wrapper:mariadb://
, and fixed the RDS MySQL dialect from incorrectly returning false inisDialect
method (Issue #789).
- Session state tracking and transfer redesign (PR #821).
- Improve Multi-AZ cluster detection (PR #824).
- Enhanced Host Monitoring Plugin (EFM) v2 plugin is now a default plugin. The original EFM plugin can still be used by specifying
efm
in thewrapperPlugins
parameter (PR #825). - Update China endpoint patterns (PR #832).
2.3.2 - 2023-12-18
- Federated Authentication Plugin, which supports SAML authentication through ADFS (PR #741).
- Experimental Enhanced Host Monitoring Plugin v2, which is a redesign of the original Enhanced Host Monitoring Plugin that addresses memory leaks and high CPU usage during monitoring sessions (PR #764).
- Fastest Response Strategy Plugin, which implements a new autoscaling strategy (PR #755).
- Plugin code for Aurora Initial Connection Strategy Plugin. This plugin returns an instance endpoint when connected using a cluster endpoint (PR #784).
- Use existing entries to update the round-robin cache (PR #739).
- Updated HikariCP example to include configuring the datasource with a JDBC URL (PR #749).
- Replaced the
sychronized
keyword with reentrant locks in AwsCredentialsManager (PR #785). - Set HostId in HostSpec when connecting using Aurora instance endpoints (PR #782).
2.3.1 - 2023-11-29
- User defined session state transfer functions (PR #729).
- Documentation for using the driver with RDS Multi-AZ database clusters (PR #740).
- Configuration profiles and configuration presets (PR #711 and PR #738).
- Stopped monitoring threads causing out of memory errors (PR #718).
- Automatically register a target driver in the class path to prevent
No suitable driver
SQL exceptions (PR #748).
- Session state tracking to include additional state information (PR #729).
- Log level for intentionally ignored exceptions to reduce the number of warnings (PR #751).
2.3.0 - 2023-11-23
- Fast switchover support for Amazon RDS Multi-AZ DB Clusters (PR #690).
- Endpoint override for the AWS Secrets Manager plugin (PR #707).
- Allow users to set up a lambda to initialize new connections (PR #705).
- Introduced
Dialect.prepareConnectProperties
to allow dialect classes to modify connection properties when opening a new connection (PR #704). - Native telemetry support (PR #617).
- Documentation on known limitations with global databases (PR #695).
- Continue monitoring if unhandled Exception is thrown (PR #676).
- Password properties are now masked in logs (PR #701 and PR #723).
- Issue when getting a connection for a closed statement (PR #682).
- Maven coordinates in README (PR #681).
- Update topology for specific methods (PR #683).
- Added buffer to IAM token expiry and moved token expiry time creation (PR #706).
- Documentation on known limitations with Blue/Green deployments (PR #680).
2.2.5 - 2023-10-03
- Optional preservation of partial session state post failover (PR #632).
- Round Robin host selection strategy (PR #603).
- Sample application failover retry with Spring Boot (PR #638).
- Renamed the
messages.properties
file toaws_advanced_jdbc_wrapper_messages.properties
(Issue #633).
2.2.4 - 2023-08-29
- Host Availability Strategy to help keep host health status up to date (PR #530).
- Implement
setLoginTimeout
from a suggested enhancement (Discussion #509).
- Allow connecting with reader cluster endpoints for Aurora PostgreSQL versions 13.9 and greater by changing the
AuroraPgDialect
topology query (Issue #593). - Race condition issues between
MonitorThreadContainer#getInstance()
andMonitorThreadContainer#releaseInstance()
(PR #601).
- Dynamically sets the default host list provider based on the dialect used. User applications no longer need to manually set the AuroraHostListProvider when connecting to Aurora Postgres or Aurora MySQL databases.
- Deprecated AuroraHostListConnectionPlugin.
- As an enhancement, the wrapper is now able to automatically set the Aurora host list provider for connections to Aurora MySQL and Aurora PostgreSQL databases.
Aurora Host List Connection Plugin is deprecated. If you were using the
AuroraHostListConnectionPlugin
, you can simply remove the plugin from thewrapperPlugins
parameter. However, if you choose to, you can ensure the provider is used by specifying a topology-aware dialect, for more information, see Database Dialects.
- As an enhancement, the wrapper is now able to automatically set the Aurora host list provider for connections to Aurora MySQL and Aurora PostgreSQL databases.
Aurora Host List Connection Plugin is deprecated. If you were using the
- Propagate
Connection.clearWarnings()
to underlying connections in the Read Write Splitting Plugin so that the connection object does not accumulate warning messages (Issue #547). - Close underlying connections in the Read Write Splitting Plugin after switching to read-write or read-only depending on whether internal connection pooling is used (PR #583).
- Sort plugins by default to prevent plugin misconfiguration. This can be disabled by setting the property
autoSortWrapperPluginOrder
to false (PR #542). - Documentation:
- Clarified AWS JDBC Driver limitations with Blue/Green deployments. See Known Limitations.
- Updated and reworded main README.md page.
2.2.3 - 2023-07-28
- Developer plugin to help test various scenarios including events like network outages and database cluster failover. This plugin is NOT intended to be used in production environments and is only for testing (PR #531).
- Documentation:
- Developer plugin. See UsingTheJdbcDriver and UsingTheDeveloperPlugin.
- MySQL code samples (PR #532).
- Add a Table of Contents section for the sample codes on README.md. See README.md.
- Sample tutorial and code example for Vert.x. See the tutorial and code example.
- Added Properties section on the README listing all the driver properties and where they are used. See the README.md.
2.2.2 - 2023-07-05
- Official support for Amazon Aurora with MySQL compatibility. The AWS JDBC Driver has been validated to support MySQL JDBC Driver and MariaDB JDBC Driver.
- Documentation:
- Improved integration test suite performance by creating required test database clusters in advance (PR #411).
- Documentation:
2.2.1 - 2023-6-16
- Move the Spring Wildfly example
gradle.properties
file toexamples/SpringWildflyExample/spring
(Issue #491).
2.2.0 - 2023-6-14
- Autoscaling and the least connections strategy (PR #451).
- Target driver dialects (PR #452).
- Elastic Load Balancer URL support (PR #476).
- Documentation:
- Using the Driver with plain RDS Databases. See Using the Driver.
- Internal connection pool behaviour only verifying password on initial connection. See Using the Read Write Splitting Plugin Internal Connection Pooling document and code example.
- Link performance test in table of contents. See Documentation Table of Contents.
- Cluster URLs are not internally pooled. See Using Read Write Splitting Plugin Internal Connection Pooling.
- The
leastConnections
strategy in the Using Read Write Splitting Plugin Internal Connection Pooling at point 3.
- Sample code and tutorial for using the driver with:
- Pruned null connections in connection tracker plugins (PR #461).
- HikariCP integration tests and reworked AwsWrapperDataSource by removing property names, introduced a set of simple properties to set database, server name and server port (PR #468).
- Checkstyle failure due to modified license and driver connection provider passing original properties resulting properties being overridden for subsequent connections (PR #471).
- IamAuthConnectionPlugin to properly prioritize the override property IAM_DEFAULT_PORT then Hosts port, and then Dialect port (Issue #473).
- Values for the
wrapperLoggerLevel
parameter are no longer case-sensitive (#PR #481).
- Extended test logs with thread names (PR #465).
- Updated logging format so it is easier to distinguish the logger name from the log message (PR #469).
2.1.2 - 2023-5-21
- Explicitly check for 28000 and 28P01 SQLStates in the IAM authentication plugin after SQLExceptions are thrown (PR #456 and PR #457).
2.1.1 - 2023-5-15
- MySQL reference in code that could impact workflows with other drivers (PR #446).
2.1.0 - 2023-5-11
- Checks for stale writer records in
AuroraHostListProvider
obtained after writer-failover so that they are not used (PR #435).
- Potential security concern by ensuring that user-specific connections in the connection pool are returned to the correct user (PR #432).
- Connection state transfer bug where switching from read-only connection to writer connection incorrectly triggers the failover process (Issue #426).
- Incorrect invalidation of the newly promoted writer and random readers after failover. EFM plugin to use instance endpoint as the monitoring endpoint in case the initial connection is established using cluster endpoint (PR #431).
- Running Hibernate tests no longer runs unrelated tests (PR #417).
- Reader failover using a shared Properties object resulting in race conditions (PR #436 & PR #438).
- Temporarily setting the socket timeout for the topology query if it is not set, to avoid topology query from executing indefinitely (PR #416).
- Removed logic from the failover plugin that changes connection to a writer instance when
setReadOnly(false)
is called on a reader connection (Issue #426). This functionality already exists in the read write splitting plugin. - Removed Multi-writer cluster related code as they are no longer supported (PR #435).
- Clarified documentation on the failover process to account for Aurora PostgreSQL clusters being offline during failover (PR #437).
⚠️ Breaking changes were introduced with the newfailoverMode
configuration parameter (PR #434):- The
failoverMode
parameter replaces theenableFailoverStrictReader
configuration parameter. - If you were previously using
enableFailoverStrictReader=true
, please update it tofailoverMode=strict-reader
. - For more information, please check the (documentation)
- The
2.0.0 - 2023-04-28
- Read / Write Splitting (Official Release).
- Internal connection pools for the R/W splitting plugin (PR #359)
- Database dialects (PR #372 addresses Issue #341), which allow users to specify the database type to connect to.
- Fetched the instance endpoint and added it to the host aliases for connections established using custom domains (Issue #386).
- Parsed region from ARN (PR #392 addresses Issue #391).
- Updated documentation on:
⚠️ Breaking changes were introduced with the internal connection pool changes (PR #359):- The ConnectionPlugin interface has introduced three new methods: forceConnect, acceptsStrategy, and getHostSpecByStrategy. Although the AbstractConnectionPlugin implements default behavior for these methods, you should consider adding your own implementations if you have implemented a custom ConnectionPlugin. More details on these methods can be found in the ConnectionPlugin Javadocs and the pipelines documentation.
- The HostListProvider interface has introduced a new method: getHostRole. If you have implemented your own HostListProvider, you will need to implement this method. More details on this method can be found in the HostListProvider Javadocs.
1.0.2 - 2023-03-31
- Default list of plugins added to the parameter
wrapperPlugins
(PR #332). - Read-write splitting plugin example using Spring JDBC template. See Read-Write Splitting Spring JDBC Template Example.
- Read-write splitting plugin benchmark and performance results (PR #340 & PR #316).
- Aurora Connection Tracker plugin tracks all opened connections and closes all impacted connections after a failover (PR #298).
- Driver Metadata plugin allows users to override the driver name (PR #371 addresses Issue #370).
- Documentation for the Driver Metadata plugin and Aurora Connection Tracker plugin. See Using The Driver Metadata Connection Plugin & Using The Aurora Connection Tracker Plugin.
- Unwrapped Savepoint objects when passing them in as parameters (Issue #328).
- Added null checks to
WrapperUtils#getConnectionFromSqlObject()
(Issue #348). - Extra question mark in
clusterInstanceHostPattern
parameters is no longer filtered out when setting the connection string (PR #383).
- Lock initialization of
AuroraHostListProvider
(PR #347). - Optimized thread locks and expiring cache for the Enhanced Monitoring Plugin (PR #365).
- Updated Hibernate sample code to reflect changes in the wrapper source code (PR #368).
- Updated KnownLimitations.md to reflect that Amazon RDS Blue/Green Deployments are not supported. See Amazon RDS Blue/Green Deployments.
1.0.1 - 2023-01-30
- Read / Write Splitting and Load Balancing (Experimental). Ongoing changes are being implemented to mirror behaviour of the community MySQL JDBC driver. We do not recommend using this in production until an official release.
- The Aurora Stale DNS Plugin to prevent the user application from incorrectly opening a new connection to an old writer node when DNS records have not yet updated after a recent failover event. For more details, see Aurora Stale DNS Plugin.
- FailoverSQLException classes for easier error handling. See Read-Write Splitting Postgres Example.
- OSGi compatibility (PR #270).
- AwsCredentialsManager to customize credentials providers used in
IamAuthenticationPlugin
andAwsSecretsManagerPlugin
. For more information, see AWS Credentials Configuration.
DataSourceConnectionProvider
no longer removes user/password properties on connect (Issue #288 and Issue #305).- Runtime exceptions thrown as reported in issue #284.
- Incorrect log message in
PluginServiceImpl#setAvailability
that says host alias not found instead of empty hosts change list. - FailoverTimeoutMS not being obeyed during failover, causing failover to take twice as long (PR #244).
- Reader failover sometimes reconnect to writer instances as reported by Issue #223. Applications can now set the
failoverStrictReader
parameter to only allow failover to reader nodes during the reader failover process. See more details here. - AWS Secrets Manager Plugin leaking PoolingHttpClientConnectionManager (PR #321).
- Internal
inTransaction
flag not being updated whenautocommit
status changes (PR #282). - Incorrect wrapper version returned from
getDriverVersion
calls (PR #319). - Incorrect
setReadOnly
behaviour when the method is called on a closed connection (Issue #311). isCurrentHostWriter
incorrectly return false during writer failover (PR #323).
- Use default connection check intervals/timeouts in the EFM plugin when a user-supplied setting is not available (PR #274).
- Thread-safety improvements within in the EFM plugin (PR #332).
1.0.0 - 2022-10-06
The Amazon Web Services (AWS) Advanced JDBC Driver allows an application to take advantage of the features of clustered Aurora databases.
- Support for PostgreSQL
- The Failover Connection Plugin
- The Host Monitoring Connection Plugin
- The AWS IAM Authentication Connection Plugin
- The AWS Secrets Manager Connection Plugin