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:
AutoCloseable
,Client
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
FieldsModifier and TypeFieldDescriptionprivate static final Logger
private long
private long
private Client
private Client
private boolean
protected long
timeout before retrying to reconnect failing hostFields inherited from class org.mariadb.jdbc.client.impl.MultiPrimaryClient
closed, conf, currentClient, deniedListTimeout, denyList, lock
-
Constructor Summary
ConstructorsConstructorDescriptionMultiPrimaryReplicaClient
(Configuration conf, ClosableLock lock) Constructor -
Method Summary
Modifier and TypeMethodDescriptionvoid
Abort current connectionvoid
close()
Close clientvoid
closePrepare
(Prepare prepare) Close prepare commandexecute
(ClientMessage message, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo) Send client message and read resultexecutePipeline
(ClientMessage[] messages, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo) Send client messages pipelining and read resultGet connection contextGet connection exception factoryGet connection hostint
get socket timeoutboolean
is current client writer or read-onlyvoid
readStreamingResults
(List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion) Read resultsprotected Client
Reconnect connection, trying to continue transparently if possible.private void
void
reset()
Reset connectionvoid
setReadOnly
(boolean readOnly) Switch to a writer/read-only connection, no effet on mono-connectionvoid
setSocketTimeout
(int milliseconds) Set socket timeoutMethods inherited from class org.mariadb.jdbc.client.impl.MultiPrimaryClient
connectHost, execute, execute, executeTransactionReplay, getSocketIp, isClosed, replayIfPossible, syncNewState
-
Field Details
-
logger
-
waitTimeout
protected long waitTimeouttimeout before retrying to reconnect failing host -
replicaClient
-
-
requestReadOnly
private boolean requestReadOnly -
nextTryReplica
private long nextTryReplica -
nextTryPrimary
private long nextTryPrimary
-
-
Constructor Details
-
MultiPrimaryReplicaClient
Constructor- Parameters:
conf
- configurationlock
- thread locker- Throws:
SQLException
- if any error occurs
-
-
Method Details
-
reconnectIfNeeded
private void reconnectIfNeeded() -
reConnect
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:
reConnect
in classMultiPrimaryClient
- Returns:
- client connection
- Throws:
SQLException
- if exception
-
execute
public List<Completion> execute(ClientMessage message, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo) throws SQLException Description copied from interface:Client
Send client message and read result- Specified by:
execute
in interfaceClient
- Overrides:
execute
in 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:
SQLException
- if any error occurs
-
executePipeline
public List<Completion> executePipeline(ClientMessage[] messages, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo) throws SQLException Description copied from interface:Client
Send client messages pipelining and read result- Specified by:
executePipeline
in interfaceClient
- Overrides:
executePipeline
in 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:
SQLException
- if any error occurs
-
readStreamingResults
public void readStreamingResults(List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion) throws SQLException Description copied from interface:Client
Read results- Specified by:
readStreamingResults
in interfaceClient
- Overrides:
readStreamingResults
in 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:
SQLException
- if any error occurs
-
closePrepare
Description copied from interface:Client
Close prepare command- Specified by:
closePrepare
in interfaceClient
- Overrides:
closePrepare
in classMultiPrimaryClient
- Parameters:
prepare
- prepare command- Throws:
SQLException
- if any error occurs
-
abort
Description copied from interface:Client
Abort current connection- Specified by:
abort
in interfaceClient
- Overrides:
abort
in classMultiPrimaryClient
- Parameters:
executor
- executor- Throws:
SQLException
- if any error occurs
-
close
Description copied from interface:Client
Close client- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceClient
- Overrides:
close
in classMultiPrimaryClient
- Throws:
SQLException
- if any error occurs
-
setReadOnly
Description copied from interface:Client
Switch to a writer/read-only connection, no effet on mono-connection- Specified by:
setReadOnly
in interfaceClient
- Overrides:
setReadOnly
in classMultiPrimaryClient
- Parameters:
readOnly
- must use read-only connection- Throws:
SQLException
- if any error occurs
-
getSocketTimeout
public int getSocketTimeout()Description copied from interface:Client
get socket timeout- Specified by:
getSocketTimeout
in interfaceClient
- Overrides:
getSocketTimeout
in classMultiPrimaryClient
- Returns:
- socket timeout
-
setSocketTimeout
Description copied from interface:Client
Set socket timeout- Specified by:
setSocketTimeout
in interfaceClient
- Overrides:
setSocketTimeout
in classMultiPrimaryClient
- Parameters:
milliseconds
- timeout- Throws:
SQLException
- if any error occurs
-
getContext
Description copied from interface:Client
Get connection context- Specified by:
getContext
in interfaceClient
- Overrides:
getContext
in classMultiPrimaryClient
- Returns:
- connection context
-
getExceptionFactory
Description copied from interface:Client
Get connection exception factory- Specified by:
getExceptionFactory
in interfaceClient
- Overrides:
getExceptionFactory
in classMultiPrimaryClient
- Returns:
- connection exception factory
-
getHostAddress
Description copied from interface:Client
Get connection host- Specified by:
getHostAddress
in interfaceClient
- Overrides:
getHostAddress
in classMultiPrimaryClient
- Returns:
- connection host
-
isPrimary
public boolean isPrimary()Description copied from interface:Client
is current client writer or read-only- Specified by:
isPrimary
in interfaceClient
- Overrides:
isPrimary
in classMultiPrimaryClient
- Returns:
- is primary
-
reset
public void reset()Description copied from interface:Client
Reset connection- Specified by:
reset
in interfaceClient
- Overrides:
reset
in classMultiPrimaryClient
-