Package org.mariadb.jdbc.client.impl
Class MultiPrimaryReplicaClient
- java.lang.Object
-
- org.mariadb.jdbc.client.impl.MultiPrimaryClient
-
- org.mariadb.jdbc.client.impl.MultiPrimaryReplicaClient
-
- All Implemented Interfaces:
java.lang.AutoCloseable,Client
public class MultiPrimaryReplicaClient extends MultiPrimaryClient
Handling connection failing automatic reconnection transparently when possible for replication Topology.remark: would have been better using proxy, but for AOT compilation, avoiding to using not supported proxy class.
-
-
Field Summary
Fields Modifier and Type Field Description private static Loggerloggerprivate longnextTryPrimaryprivate longnextTryReplicaprivate ClientprimaryClientprivate ClientreplicaClientprivate booleanrequestReadOnlyprotected longwaitTimeouttimeout before retrying to reconnect failing host-
Fields inherited from class org.mariadb.jdbc.client.impl.MultiPrimaryClient
closed, conf, currentClient, deniedListTimeout, denyList, lock
-
-
Constructor Summary
Constructors Constructor Description MultiPrimaryReplicaClient(Configuration conf, ClosableLock lock)Constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidabort(java.util.concurrent.Executor executor)Abort current connectionvoidclose()Close clientvoidclosePrepare(Prepare prepare)Close prepare commandjava.util.List<Completion>execute(ClientMessage message, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo)Send client message and read resultjava.util.List<Completion>executePipeline(ClientMessage[] messages, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo)Send client messages pipelining and read resultContextgetContext()Get connection contextExceptionFactorygetExceptionFactory()Get connection exception factoryHostAddressgetHostAddress()Get connection hostintgetSocketTimeout()get socket timeoutbooleanisPrimary()is current client writer or read-onlyvoidreadStreamingResults(java.util.List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion)Read resultsprotected ClientreConnect()Reconnect connection, trying to continue transparently if possible.private voidreconnectIfNeeded()voidreset()Reset connectionvoidsetReadOnly(boolean readOnly)Switch to a writer/read-only connection, no effet on mono-connectionvoidsetSocketTimeout(int milliseconds)Set socket timeout-
Methods inherited from class org.mariadb.jdbc.client.impl.MultiPrimaryClient
connectHost, execute, execute, executeTransactionReplay, getSocketIp, isClosed, replayIfPossible, syncNewState
-
-
-
-
Field Detail
-
logger
private static final Logger logger
-
waitTimeout
protected long waitTimeout
timeout before retrying to reconnect failing host
-
replicaClient
private Client replicaClient
-
primaryClient
private Client primaryClient
-
requestReadOnly
private boolean requestReadOnly
-
nextTryReplica
private long nextTryReplica
-
nextTryPrimary
private long nextTryPrimary
-
-
Constructor Detail
-
MultiPrimaryReplicaClient
public MultiPrimaryReplicaClient(Configuration conf, ClosableLock lock) throws java.sql.SQLException
Constructor- Parameters:
conf- configurationlock- thread locker- Throws:
java.sql.SQLException- if any error occurs
-
-
Method Detail
-
reconnectIfNeeded
private void reconnectIfNeeded()
-
reConnect
protected Client reConnect() throws java.sql.SQLException
Reconnect connection, trying to continue transparently if possible. Different possible cases : replica fails, then reconnect to replica or to master if no replica availableif reconnect succeed on replica / use master, no problem, continuing without interruption // if reconnect primary, then replay transaction / throw exception if was in transaction.
- Overrides:
reConnectin classMultiPrimaryClient- Returns:
- client connection
- Throws:
java.sql.SQLException- if exception
-
execute
public java.util.List<Completion> execute(ClientMessage message, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo) throws java.sql.SQLException
Description copied from interface:ClientSend client message and read result- Specified by:
executein interfaceClient- Overrides:
executein classMultiPrimaryClient- Parameters:
message- client messagestmt- statementfetchSize- fetch sizemaxRows- maximum number of rows. 0 = allresultSetConcurrency- concurrencyresultSetType- result-set typecloseOnCompletion- close statement on completioncanRedo- can client message be redone in case of failover- Returns:
- results
- Throws:
java.sql.SQLException- if any error occurs
-
executePipeline
public java.util.List<Completion> executePipeline(ClientMessage[] messages, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo) throws java.sql.SQLException
Description copied from interface:ClientSend client messages pipelining and read result- Specified by:
executePipelinein interfaceClient- Overrides:
executePipelinein classMultiPrimaryClient- Parameters:
messages- client messagestmt- statementfetchSize- fetch sizemaxRows- maximum number of rows. 0 = allresultSetConcurrency- concurrencyresultSetType- result-set typecloseOnCompletion- close statement on completioncanRedo- can client message be redone in case of failover- Returns:
- results
- Throws:
java.sql.SQLException- if any error occurs
-
readStreamingResults
public void readStreamingResults(java.util.List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion) throws java.sql.SQLException
Description copied from interface:ClientRead results- Specified by:
readStreamingResultsin interfaceClient- Overrides:
readStreamingResultsin classMultiPrimaryClient- Parameters:
completions- List that will have the new resultsfetchSize- fetch sizemaxRows- maximum number of rows. 0 = allresultSetConcurrency- concurrencyresultSetType- result-set typecloseOnCompletion- close statement on completion- Throws:
java.sql.SQLException- if any error occurs
-
closePrepare
public void closePrepare(Prepare prepare) throws java.sql.SQLException
Description copied from interface:ClientClose prepare command- Specified by:
closePreparein interfaceClient- Overrides:
closePreparein classMultiPrimaryClient- Parameters:
prepare- prepare command- Throws:
java.sql.SQLException- if any error occurs
-
abort
public void abort(java.util.concurrent.Executor executor) throws java.sql.SQLExceptionDescription copied from interface:ClientAbort current connection- Specified by:
abortin interfaceClient- Overrides:
abortin classMultiPrimaryClient- Parameters:
executor- executor- Throws:
java.sql.SQLException- if any error occurs
-
close
public void close() throws java.sql.SQLExceptionDescription copied from interface:ClientClose client- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfaceClient- Overrides:
closein classMultiPrimaryClient- Throws:
java.sql.SQLException- if any error occurs
-
setReadOnly
public void setReadOnly(boolean readOnly) throws java.sql.SQLExceptionDescription copied from interface:ClientSwitch to a writer/read-only connection, no effet on mono-connection- Specified by:
setReadOnlyin interfaceClient- Overrides:
setReadOnlyin classMultiPrimaryClient- Parameters:
readOnly- must use read-only connection- Throws:
java.sql.SQLException- if any error occurs
-
getSocketTimeout
public int getSocketTimeout()
Description copied from interface:Clientget socket timeout- Specified by:
getSocketTimeoutin interfaceClient- Overrides:
getSocketTimeoutin classMultiPrimaryClient- Returns:
- socket timeout
-
setSocketTimeout
public void setSocketTimeout(int milliseconds) throws java.sql.SQLExceptionDescription copied from interface:ClientSet socket timeout- Specified by:
setSocketTimeoutin interfaceClient- Overrides:
setSocketTimeoutin classMultiPrimaryClient- Parameters:
milliseconds- timeout- Throws:
java.sql.SQLException- if any error occurs
-
getContext
public Context getContext()
Description copied from interface:ClientGet connection context- Specified by:
getContextin interfaceClient- Overrides:
getContextin classMultiPrimaryClient- Returns:
- connection context
-
getExceptionFactory
public ExceptionFactory getExceptionFactory()
Description copied from interface:ClientGet connection exception factory- Specified by:
getExceptionFactoryin interfaceClient- Overrides:
getExceptionFactoryin classMultiPrimaryClient- Returns:
- connection exception factory
-
getHostAddress
public HostAddress getHostAddress()
Description copied from interface:ClientGet connection host- Specified by:
getHostAddressin interfaceClient- Overrides:
getHostAddressin classMultiPrimaryClient- Returns:
- connection host
-
isPrimary
public boolean isPrimary()
Description copied from interface:Clientis current client writer or read-only- Specified by:
isPrimaryin interfaceClient- Overrides:
isPrimaryin classMultiPrimaryClient- Returns:
- is primary
-
reset
public void reset()
Description copied from interface:ClientReset connection- Specified by:
resetin interfaceClient- Overrides:
resetin classMultiPrimaryClient
-
-