public class FailoverConnectionPlugin extends AbstractConnectionPlugin implements StateSnapshotProvider
| Constructor and Description |
|---|
FailoverConnectionPlugin(FullServicesContainer servicesContainer,
java.util.Properties properties) |
| Modifier and Type | Method and Description |
|---|---|
java.sql.Connection |
connect(java.lang.String driverProtocol,
HostSpec hostSpec,
java.util.Properties props,
boolean isInitialConnection,
JdbcCallable<java.sql.Connection,java.sql.SQLException> connectFunc)
Establishes a connection to the given host using the given driver protocol and properties.
|
protected java.sql.Connection |
createConnectionForHost(HostSpec baseHostSpec)
Creates a new physical connection for the given
HostSpec. |
protected <E extends java.lang.Exception> |
dealWithIllegalStateException(java.lang.IllegalStateException e,
java.lang.Class<E> exceptionClass) |
<T,E extends java.lang.Exception> |
execute(java.lang.Class<T> resultClass,
java.lang.Class<E> exceptionClass,
java.lang.Object methodInvokeOn,
java.lang.String methodName,
JdbcCallable<T,E> jdbcMethodFunc,
@Nullable java.lang.Object[] jdbcMethodArgs) |
protected void |
failover(@Nullable HostSpec failedHost,
boolean isInitialConnection)
Initiates the failover procedure.
|
protected void |
failoverReader(@Nullable HostSpec failedHostSpec) |
protected void |
failoverWriter(boolean isInitialConnection) |
java.util.List<Pair<java.lang.String,java.lang.Object>> |
getSnapshotState() |
java.util.Set<java.lang.String> |
getSubscribedMethods() |
protected void |
initFailoverMode() |
void |
initHostProvider(java.lang.String driverProtocol,
java.lang.String initialUrl,
java.util.Properties properties,
HostListProviderService hostListProviderService,
JdbcCallable<java.lang.Void,java.sql.SQLException> initHostProviderFunc) |
protected void |
invalidateCurrentConnection() |
boolean |
isFailoverEnabled() |
void |
notifyNodeListChanged(java.util.Map<java.lang.String,java.util.EnumSet<NodeChangeOptions>> changes) |
protected void |
pickNewConnection() |
protected boolean |
shouldExceptionTriggerConnectionSwitch(java.lang.Throwable t) |
protected void |
throwFailoverSuccessException() |
protected void |
updateTopology(boolean forceUpdate) |
acceptsStrategy, forceConnect, getHostSpecByStrategy, getHostSpecByStrategy, notifyConnectionChangedprotected final java.util.Properties properties
protected boolean enableFailoverSetting
protected boolean enableConnectFailover
protected int failoverTimeoutMsSetting
protected int failoverClusterTopologyRefreshRateMsSetting
protected int failoverWriterReconnectIntervalMsSetting
protected int failoverReaderConnectTimeoutMsSetting
protected @Nullable FailoverMode failoverMode
protected @Nullable java.lang.String closedReason
protected @Nullable WriterFailoverHandler writerFailoverHandler
protected @Nullable ReaderFailoverHandler readerFailoverHandler
public static final AwsWrapperProperty FAILOVER_CLUSTER_TOPOLOGY_REFRESH_RATE_MS
public static final AwsWrapperProperty FAILOVER_TIMEOUT_MS
public static final AwsWrapperProperty FAILOVER_WRITER_RECONNECT_INTERVAL_MS
public static final AwsWrapperProperty FAILOVER_READER_CONNECT_TIMEOUT_MS
public static final AwsWrapperProperty ENABLE_CLUSTER_AWARE_FAILOVER
public static final AwsWrapperProperty ENABLE_CONNECT_FAILOVER
public static final AwsWrapperProperty FAILOVER_MODE
public static final AwsWrapperProperty TELEMETRY_FAILOVER_ADDITIONAL_TOP_TRACE
public static final AwsWrapperProperty SKIP_FAILOVER_ON_INTERRUPTED_THREAD
public FailoverConnectionPlugin(FullServicesContainer servicesContainer, java.util.Properties properties)
public java.util.Set<java.lang.String> getSubscribedMethods()
getSubscribedMethods in interface ConnectionPlugingetSubscribedMethods in class AbstractConnectionPluginpublic <T,E extends java.lang.Exception> T execute(java.lang.Class<T> resultClass,
java.lang.Class<E> exceptionClass,
java.lang.Object methodInvokeOn,
java.lang.String methodName,
JdbcCallable<T,E> jdbcMethodFunc,
@Nullable java.lang.Object[] jdbcMethodArgs)
throws E extends java.lang.Exception
execute in interface ConnectionPluginexecute in class AbstractConnectionPluginE extends java.lang.Exceptionpublic void initHostProvider(java.lang.String driverProtocol,
java.lang.String initialUrl,
java.util.Properties properties,
HostListProviderService hostListProviderService,
JdbcCallable<java.lang.Void,java.sql.SQLException> initHostProviderFunc)
throws java.sql.SQLException
initHostProvider in interface ConnectionPlugininitHostProvider in class AbstractConnectionPluginjava.sql.SQLExceptionpublic void notifyNodeListChanged(java.util.Map<java.lang.String,java.util.EnumSet<NodeChangeOptions>> changes)
notifyNodeListChanged in interface ConnectionPluginnotifyNodeListChanged in class AbstractConnectionPluginpublic boolean isFailoverEnabled()
protected void initFailoverMode()
protected void updateTopology(boolean forceUpdate)
throws java.sql.SQLException
java.sql.SQLExceptionprotected java.sql.Connection createConnectionForHost(HostSpec baseHostSpec) throws java.sql.SQLException
HostSpec.baseHostSpec - The host info instance to base the connection off of.java.sql.SQLException - if an error occursprotected <E extends java.lang.Exception> void dealWithIllegalStateException(java.lang.IllegalStateException e,
java.lang.Class<E> exceptionClass)
throws E extends java.lang.Exception
E extends java.lang.Exceptionprotected void failover(@Nullable HostSpec failedHost, boolean isInitialConnection) throws java.sql.SQLException
failedHost - The host with network errors.isInitialConnection - The flag that indicates whether it is an initial connectionjava.sql.SQLException - if an error occursprotected void failoverReader(@Nullable HostSpec failedHostSpec) throws java.sql.SQLException
java.sql.SQLExceptionprotected void throwFailoverSuccessException()
throws java.sql.SQLException
java.sql.SQLExceptionprotected void failoverWriter(boolean isInitialConnection)
throws java.sql.SQLException
java.sql.SQLExceptionprotected void invalidateCurrentConnection()
protected void pickNewConnection()
throws java.sql.SQLException
java.sql.SQLExceptionprotected boolean shouldExceptionTriggerConnectionSwitch(java.lang.Throwable t)
public java.sql.Connection connect(java.lang.String driverProtocol,
HostSpec hostSpec,
java.util.Properties props,
boolean isInitialConnection,
JdbcCallable<java.sql.Connection,java.sql.SQLException> connectFunc)
throws java.sql.SQLException
ConnectionPluginConnectionProvider has been set with
Driver.setCustomConnectionProvider(ConnectionProvider) and
ConnectionProvider.acceptsUrl(String, HostSpec, Properties) returns true for the given
protocol, host, and properties, the connection will be created by the non-default
ConnectionProvider. Otherwise, the connection will be created by the default
ConnectionProvider. The default ConnectionProvider will be DriverConnectionProvider for
connections requested via the DriverManager and
DataSourceConnectionProvider for connections requested via an
AwsWrapperDataSource.connect in interface ConnectionPluginconnect in class AbstractConnectionPlugindriverProtocol - the driver protocol that should be used to establish the connectionhostSpec - the host details for the desired connectionprops - the connection propertiesisInitialConnection - a boolean indicating whether the current Connection is
establishing an initial physical connection to the database or has
already established a physical connection in the pastconnectFunc - the function to call to continue the connect request down the
connect pipelineConnection to the requested hostjava.sql.SQLException - if there was an error establishing a Connection to the requested
hostpublic java.util.List<Pair<java.lang.String,java.lang.Object>> getSnapshotState()
getSnapshotState in interface StateSnapshotProvidergetSnapshotState in class AbstractConnectionPlugin