Package org.mariadb.jdbc.client.impl
Class MultiPrimaryClient
- java.lang.Object
-
- org.mariadb.jdbc.client.impl.MultiPrimaryClient
-
- All Implemented Interfaces:
java.lang.AutoCloseable
,Client
- Direct Known Subclasses:
MultiPrimaryReplicaClient
public class MultiPrimaryClient extends java.lang.Object implements Client
Handling connection failing automatic reconnection transparently when possible for multi-master 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 protected boolean
closed
is connections explicitly closedprotected Configuration
conf
configurationprotected Client
currentClient
current clientprotected long
deniedListTimeout
denied timeoutprotected static java.util.concurrent.ConcurrentMap<HostAddress,java.lang.Long>
denyList
temporary blacklisted hostsprotected ClosableLock
lock
thread lockerprivate static Logger
logger
-
Constructor Summary
Constructors Constructor Description MultiPrimaryClient(Configuration conf, ClosableLock lock)
Constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
abort(java.util.concurrent.Executor executor)
Abort current connectionvoid
close()
Close clientvoid
closePrepare(Prepare prepare)
Close prepare commandprotected Client
connectHost(boolean readOnly, boolean failFast)
Trying connecting server.java.util.List<Completion>
execute(ClientMessage message, boolean canRedo)
Send client message and read resultjava.util.List<Completion>
execute(ClientMessage message, Statement stmt, boolean canRedo)
Send client message and read resultjava.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 resultprotected void
executeTransactionReplay(Client oldCli)
Execute transaction replayContext
getContext()
Get connection contextExceptionFactory
getExceptionFactory()
Get connection exception factoryHostAddress
getHostAddress()
Get connection hostjava.lang.String
getSocketIp()
Get current socket IP or null (for Pipe / unix socket)int
getSocketTimeout()
get socket timeoutboolean
isClosed()
Is client closedboolean
isPrimary()
is current client writer or read-onlyvoid
readStreamingResults(java.util.List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion)
Read resultsprotected Client
reConnect()
Connection loopprotected void
replayIfPossible(Client oldClient, boolean canRedo)
Execute transaction replay if in transaction and configured for it, throw an exception if notvoid
reset()
Reset connectionvoid
setReadOnly(boolean readOnly)
Switch to a writer/read-only connection, no effet on mono-connectionvoid
setSocketTimeout(int milliseconds)
Set socket timeoutvoid
syncNewState(Client oldCli)
Synchronized previous and new client states.
-
-
-
Field Detail
-
denyList
protected static final java.util.concurrent.ConcurrentMap<HostAddress,java.lang.Long> denyList
temporary blacklisted hosts
-
logger
private static final Logger logger
-
deniedListTimeout
protected final long deniedListTimeout
denied timeout
-
conf
protected final Configuration conf
configuration
-
lock
protected final ClosableLock lock
thread locker
-
closed
protected boolean closed
is connections explicitly closed
-
currentClient
protected Client currentClient
current client
-
-
Constructor Detail
-
MultiPrimaryClient
public MultiPrimaryClient(Configuration conf, ClosableLock lock) throws java.sql.SQLException
Constructor- Parameters:
conf
- configurationlock
- thread locker- Throws:
java.sql.SQLException
- if fail to connect
-
-
Method Detail
-
connectHost
protected Client connectHost(boolean readOnly, boolean failFast) throws java.sql.SQLException
Trying connecting server.searching each connecting primary / replica connection not temporary denied until found one. searching in temporary denied host if not succeed, until reaching `retriesAllDown` attempts.
- Parameters:
readOnly
- must connect a replica / primaryfailFast
- must try only not denied server- Returns:
- a valid connection client
- Throws:
java.sql.SQLException
- if not succeed to create a connection.
-
reConnect
protected Client reConnect() throws java.sql.SQLException
Connection loop- Returns:
- client connection
- Throws:
java.sql.SQLException
- if fail to connect
-
replayIfPossible
protected void replayIfPossible(Client oldClient, boolean canRedo) throws java.sql.SQLException
Execute transaction replay if in transaction and configured for it, throw an exception if not- Parameters:
oldClient
- previous clientcanRedo
- if command can be redo even if not in transaction- Throws:
java.sql.SQLException
- if not able to replay
-
executeTransactionReplay
protected void executeTransactionReplay(Client oldCli) throws java.sql.SQLException
Execute transaction replay- Parameters:
oldCli
- previous client- Throws:
java.sql.SQLException
- if not able to replay
-
syncNewState
public void syncNewState(Client oldCli) throws java.sql.SQLException
Synchronized previous and new client states.- Parameters:
oldCli
- previous client- Throws:
java.sql.SQLException
- if error occurs
-
execute
public java.util.List<Completion> execute(ClientMessage message, boolean canRedo) throws java.sql.SQLException
Description copied from interface:Client
Send client message and read result
-
execute
public java.util.List<Completion> execute(ClientMessage message, Statement stmt, boolean canRedo) throws java.sql.SQLException
Description copied from interface:Client
Send client message and read result
-
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:Client
Send client message and read result- Specified by:
execute
in interfaceClient
- 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:Client
Send client messages pipelining and read result- Specified by:
executePipeline
in interfaceClient
- 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:Client
Read results- Specified by:
readStreamingResults
in interfaceClient
- 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:Client
Close prepare command- Specified by:
closePrepare
in interfaceClient
- Parameters:
prepare
- prepare command- Throws:
java.sql.SQLException
- if any error occurs
-
abort
public void abort(java.util.concurrent.Executor executor) throws java.sql.SQLException
Description copied from interface:Client
Abort current connection
-
close
public void close() throws java.sql.SQLException
Description copied from interface:Client
Close client
-
setReadOnly
public void setReadOnly(boolean readOnly) throws java.sql.SQLException
Description copied from interface:Client
Switch to a writer/read-only connection, no effet on mono-connection- Specified by:
setReadOnly
in interfaceClient
- Parameters:
readOnly
- must use read-only connection- Throws:
java.sql.SQLException
- if any error occurs
-
getSocketTimeout
public int getSocketTimeout()
Description copied from interface:Client
get socket timeout- Specified by:
getSocketTimeout
in interfaceClient
- Returns:
- socket timeout
-
setSocketTimeout
public void setSocketTimeout(int milliseconds) throws java.sql.SQLException
Description copied from interface:Client
Set socket timeout- Specified by:
setSocketTimeout
in interfaceClient
- Parameters:
milliseconds
- timeout- Throws:
java.sql.SQLException
- if any error occurs
-
isClosed
public boolean isClosed()
Description copied from interface:Client
Is client closed
-
getContext
public Context getContext()
Description copied from interface:Client
Get connection context- Specified by:
getContext
in interfaceClient
- Returns:
- connection context
-
getExceptionFactory
public ExceptionFactory getExceptionFactory()
Description copied from interface:Client
Get connection exception factory- Specified by:
getExceptionFactory
in interfaceClient
- Returns:
- connection exception factory
-
getHostAddress
public HostAddress getHostAddress()
Description copied from interface:Client
Get connection host- Specified by:
getHostAddress
in interfaceClient
- Returns:
- connection host
-
getSocketIp
public java.lang.String getSocketIp()
Description copied from interface:Client
Get current socket IP or null (for Pipe / unix socket)- Specified by:
getSocketIp
in interfaceClient
- Returns:
- Socket current IP
-
isPrimary
public boolean isPrimary()
Description copied from interface:Client
is current client writer or read-only
-
-