Package org.mariadb.jdbc.client
Class MultiPrimaryReplicaClient
- java.lang.Object
-
- org.mariadb.jdbc.client.MultiPrimaryClient
-
- org.mariadb.jdbc.client.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 Logger
logger
private long
nextTryPrimary
private long
nextTryReplica
private Client
primaryClient
private Client
replicaClient
private boolean
requestReadOnly
protected long
waitTimeout
-
Fields inherited from class org.mariadb.jdbc.client.MultiPrimaryClient
closed, conf, currentClient, deniedListTimeout, denyList, lock
-
-
Constructor Summary
Constructors Constructor Description MultiPrimaryReplicaClient(Configuration conf, java.util.concurrent.locks.ReentrantLock lock)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
abort(java.util.concurrent.Executor executor)
void
close()
void
closePrepare(PrepareResultPacket prepare)
java.util.List<Completion>
execute(ClientMessage message, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion)
java.util.List<Completion>
executePipeline(ClientMessage[] messages, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion)
Context
getContext()
ExceptionFactory
getExceptionFactory()
HostAddress
getHostAddress()
int
getSocketTimeout()
boolean
isPrimary()
void
readStreamingResults(java.util.List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion)
protected void
reConnect()
Reconnect connection, trying to continue transparently if possible.private void
reconnectIfNeeded()
void
reset()
void
setReadOnly(boolean readOnly)
void
setSocketTimeout(int milliseconds)
-
Methods inherited from class org.mariadb.jdbc.client.MultiPrimaryClient
connectHost, execute, execute, executeTransactionReplay, getWaitTimeout, isClosed, syncNewState
-
-
-
-
Field Detail
-
logger
private static final Logger logger
-
waitTimeout
protected long waitTimeout
-
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, java.util.concurrent.locks.ReentrantLock lock) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
-
Method Detail
-
reconnectIfNeeded
private void reconnectIfNeeded()
-
reConnect
protected void reConnect() throws java.sql.SQLException
Reconnect connection, trying to continue transparently if possible. Different cases. * replica fails => 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
- 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) throws java.sql.SQLException
- Specified by:
execute
in interfaceClient
- Overrides:
execute
in classMultiPrimaryClient
- Throws:
java.sql.SQLException
-
executePipeline
public java.util.List<Completion> executePipeline(ClientMessage[] messages, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion) throws java.sql.SQLException
- Specified by:
executePipeline
in interfaceClient
- Overrides:
executePipeline
in classMultiPrimaryClient
- Throws:
java.sql.SQLException
-
readStreamingResults
public void readStreamingResults(java.util.List<Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion) throws java.sql.SQLException
- Specified by:
readStreamingResults
in interfaceClient
- Overrides:
readStreamingResults
in classMultiPrimaryClient
- Throws:
java.sql.SQLException
-
closePrepare
public void closePrepare(PrepareResultPacket prepare) throws java.sql.SQLException
- Specified by:
closePrepare
in interfaceClient
- Overrides:
closePrepare
in classMultiPrimaryClient
- Throws:
java.sql.SQLException
-
abort
public void abort(java.util.concurrent.Executor executor) throws java.sql.SQLException
- Specified by:
abort
in interfaceClient
- Overrides:
abort
in classMultiPrimaryClient
- Throws:
java.sql.SQLException
-
close
public void close()
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfaceClient
- Overrides:
close
in classMultiPrimaryClient
-
setReadOnly
public void setReadOnly(boolean readOnly) throws java.sql.SQLException
- Specified by:
setReadOnly
in interfaceClient
- Overrides:
setReadOnly
in classMultiPrimaryClient
- Throws:
java.sql.SQLException
-
getSocketTimeout
public int getSocketTimeout()
- Specified by:
getSocketTimeout
in interfaceClient
- Overrides:
getSocketTimeout
in classMultiPrimaryClient
-
setSocketTimeout
public void setSocketTimeout(int milliseconds) throws java.sql.SQLException
- Specified by:
setSocketTimeout
in interfaceClient
- Overrides:
setSocketTimeout
in classMultiPrimaryClient
- Throws:
java.sql.SQLException
-
getContext
public Context getContext()
- Specified by:
getContext
in interfaceClient
- Overrides:
getContext
in classMultiPrimaryClient
-
getExceptionFactory
public ExceptionFactory getExceptionFactory()
- Specified by:
getExceptionFactory
in interfaceClient
- Overrides:
getExceptionFactory
in classMultiPrimaryClient
-
getHostAddress
public HostAddress getHostAddress()
- Specified by:
getHostAddress
in interfaceClient
- Overrides:
getHostAddress
in classMultiPrimaryClient
-
isPrimary
public boolean isPrimary()
- Specified by:
isPrimary
in interfaceClient
- Overrides:
isPrimary
in classMultiPrimaryClient
-
reset
public void reset()
- Specified by:
reset
in interfaceClient
- Overrides:
reset
in classMultiPrimaryClient
-
-