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 voidclose()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 resultbooleanisPrimary()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()Lazily (re)connect a previously-failed primary/replica.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
abort, connectHost, execute, execute, executeTransactionReplay, getContext, getExceptionFactory, getHostAddress, getSocketIp, getSocketTimeout, 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()
Lazily (re)connect a previously-failed primary/replica.
-
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
-
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
-
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
-
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
-
-