Class AbstractMastersListener
- java.lang.Object
-
- org.mariadb.jdbc.internal.failover.AbstractMastersListener
-
- All Implemented Interfaces:
Listener
- Direct Known Subclasses:
AbstractMastersReplicasListener
,MastersFailoverListener
public abstract class AbstractMastersListener extends Object implements Listener
-
-
Field Summary
Fields Modifier and Type Field Description protected AtomicInteger
currentConnectionAttempts
protected Protocol
currentProtocol
protected boolean
currentReadOnlyAsked
protected AtomicBoolean
explicitClosed
protected GlobalStateInfo
globalInfo
protected long
lastQueryNanos
protected long
lastRetry
protected FailoverProxy
proxy
UrlParser
urlParser
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractMastersListener(UrlParser urlParser, GlobalStateInfo globalInfo)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
abortConnection(Protocol protocol)
Utility to force close existing connection.void
addToBlacklist(HostAddress hostAddress)
After a failover, put the hostAddress in a static list so the other connection will not take this host in account for a time.boolean
canRetryFailLoop()
abstract boolean
checkMasterStatus(SearchFilter searchFilter)
static void
clearBlacklist()
Clear blacklist data.void
closeConnection(Protocol protocol)
Utility to close existing connection.Set<HostAddress>
getBlacklistKeys()
String
getCatalog()
Protocol
getCurrentProtocol()
SearchFilter
getFilterForFailedHost()
long
getLastQueryNanos()
int
getMajorServerVersion()
long
getMasterHostFailNanos()
FailoverProxy
getProxy()
int
getRetriesAllDown()
int
getTimeout()
UrlParser
getUrlParser()
abstract void
handleFailLoop()
HandleErrorResult
handleFailover(SQLException qe, Method method, Object[] args, Protocol protocol, boolean isClosed)
Call when a failover is detected on master connection.boolean
hasHostFail()
void
initializeConnection()
Initialize Listener.boolean
inTransaction()
Object
invoke(Method method, Object[] args)
Object
invoke(Method method, Object[] args, Protocol specificProtocol)
boolean
isAutoReconnect()
boolean
isClosed()
boolean
isExplicitClosed()
boolean
isMasterConnection()
boolean
isMasterHostFail()
boolean
isQueryRelaunchable(Method method, Object[] args)
Check if query can be re-executed.boolean
isReadOnly()
boolean
isServerMariaDb()
boolean
isValid(int timeout)
boolean
noBackslashEscapes()
protected boolean
pingMasterProtocol(Protocol protocol)
protected void
preAutoReconnect()
abstract void
preClose()
abstract void
preExecute()
abstract HandleErrorResult
primaryFail(Method method, Object[] args, boolean killCmd, boolean isClosed)
void
prolog(long maxRows, MariaDbConnection connection, MariaDbStatement statement)
abstract void
reconnect()
abstract void
reconnectFailedConnection(SearchFilter filter)
HandleErrorResult
relaunchOperation(Method method, Object[] args)
After a failover that has bean done, relaunch the operation that was in progress.void
removeFromBlacklist(HostAddress hostAddress)
After a successfull connection, permit to remove a hostAddress from blacklist.protected void
removeListenerFromSchedulers()
protected void
resetMasterFailoverData()
void
resetOldsBlackListHosts()
Permit to remove Host to blacklist after loadBalanceBlacklistTimeout seconds.boolean
sessionStateAware()
boolean
setMasterHostFail()
Set master fail variables.void
setProxy(FailoverProxy proxy)
protected void
setSessionReadOnly(boolean readOnly, Protocol protocol)
abstract void
switchReadOnlyConnection(Boolean readonly)
void
syncConnection(Protocol from, Protocol to)
When switching between 2 connections, report existing connection parameter to the new used connection.void
throwFailoverMessage(HostAddress failHostAddress, boolean wasMaster, SQLException queryException, boolean reconnected)
Throw a human readable message after a failoverException.boolean
versionGreaterOrEqual(int major, int minor, int patch)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.mariadb.jdbc.internal.failover.Listener
foundActiveMaster, getServerThreadId, isMasterConnected, preAbort, rePrepareOnReplica, reset
-
-
-
-
Field Detail
-
urlParser
public final UrlParser urlParser
-
currentConnectionAttempts
protected final AtomicInteger currentConnectionAttempts
-
explicitClosed
protected final AtomicBoolean explicitClosed
-
globalInfo
protected final GlobalStateInfo globalInfo
-
currentReadOnlyAsked
protected volatile boolean currentReadOnlyAsked
-
currentProtocol
protected Protocol currentProtocol
-
proxy
protected FailoverProxy proxy
-
lastRetry
protected long lastRetry
-
lastQueryNanos
protected long lastQueryNanos
-
-
Constructor Detail
-
AbstractMastersListener
protected AbstractMastersListener(UrlParser urlParser, GlobalStateInfo globalInfo)
-
-
Method Detail
-
clearBlacklist
public static void clearBlacklist()
Clear blacklist data.
-
initializeConnection
public void initializeConnection() throws SQLException
Initialize Listener. This listener will be added to the connection validation loop according to option value so the connection will be verified periodically. (Important for aurora, for other, connection pool often have this functionality)- Specified by:
initializeConnection
in interfaceListener
- Throws:
SQLException
- if any exception occur.
-
removeListenerFromSchedulers
protected void removeListenerFromSchedulers()
-
preAutoReconnect
protected void preAutoReconnect() throws SQLException
- Throws:
SQLException
-
getProxy
public FailoverProxy getProxy()
-
setProxy
public void setProxy(FailoverProxy proxy)
-
getBlacklistKeys
public Set<HostAddress> getBlacklistKeys()
- Specified by:
getBlacklistKeys
in interfaceListener
-
handleFailover
public HandleErrorResult handleFailover(SQLException qe, Method method, Object[] args, Protocol protocol, boolean isClosed) throws SQLException
Call when a failover is detected on master connection. Will :- set fail variable
- try to reconnect
- relaunch query if possible
- Specified by:
handleFailover
in interfaceListener
- Parameters:
method
- called methodargs
- methods parametersprotocol
- current protocol- Returns:
- a HandleErrorResult object to indicate if query has been relaunched, and the exception if not
- Throws:
SQLException
- when method and parameters does not exist.
-
addToBlacklist
public void addToBlacklist(HostAddress hostAddress)
After a failover, put the hostAddress in a static list so the other connection will not take this host in account for a time.- Specified by:
addToBlacklist
in interfaceListener
- Parameters:
hostAddress
- the HostAddress to add to blacklist
-
removeFromBlacklist
public void removeFromBlacklist(HostAddress hostAddress)
After a successfull connection, permit to remove a hostAddress from blacklist.- Specified by:
removeFromBlacklist
in interfaceListener
- Parameters:
hostAddress
- the host address tho be remove of blacklist
-
resetOldsBlackListHosts
public void resetOldsBlackListHosts()
Permit to remove Host to blacklist after loadBalanceBlacklistTimeout seconds.
-
resetMasterFailoverData
protected void resetMasterFailoverData()
-
setSessionReadOnly
protected void setSessionReadOnly(boolean readOnly, Protocol protocol) throws SQLException
- Throws:
SQLException
-
handleFailLoop
public abstract void handleFailLoop()
-
getCurrentProtocol
public Protocol getCurrentProtocol()
- Specified by:
getCurrentProtocol
in interfaceListener
-
getMasterHostFailNanos
public long getMasterHostFailNanos()
-
setMasterHostFail
public boolean setMasterHostFail()
Set master fail variables.- Specified by:
setMasterHostFail
in interfaceListener
- Returns:
- true if was already failed
-
isMasterHostFail
public boolean isMasterHostFail()
- Specified by:
isMasterHostFail
in interfaceListener
-
hasHostFail
public boolean hasHostFail()
- Specified by:
hasHostFail
in interfaceListener
-
getFilterForFailedHost
public SearchFilter getFilterForFailedHost()
- Specified by:
getFilterForFailedHost
in interfaceListener
-
relaunchOperation
public HandleErrorResult relaunchOperation(Method method, Object[] args) throws SQLException
After a failover that has bean done, relaunch the operation that was in progress. In case of special operation that crash server, doesn't relaunched it;- Parameters:
method
- the method accessedargs
- the parameters- Returns:
- An object that indicate the result or that the exception as to be thrown
- Throws:
SQLException
- if there is any error relaunching initial method
-
isQueryRelaunchable
public boolean isQueryRelaunchable(Method method, Object[] args)
Check if query can be re-executed.- Parameters:
method
- invoke methodargs
- invoke arguments- Returns:
- true if can be re-executed
-
invoke
public Object invoke(Method method, Object[] args, Protocol specificProtocol) throws Throwable
-
syncConnection
public void syncConnection(Protocol from, Protocol to) throws SQLException
When switching between 2 connections, report existing connection parameter to the new used connection.- Specified by:
syncConnection
in interfaceListener
- Parameters:
from
- used connectionto
- will-be-current connection- Throws:
SQLException
- if catalog cannot be set
-
versionGreaterOrEqual
public boolean versionGreaterOrEqual(int major, int minor, int patch)
- Specified by:
versionGreaterOrEqual
in interfaceListener
-
isServerMariaDb
public boolean isServerMariaDb()
- Specified by:
isServerMariaDb
in interfaceListener
-
sessionStateAware
public boolean sessionStateAware()
- Specified by:
sessionStateAware
in interfaceListener
-
noBackslashEscapes
public boolean noBackslashEscapes()
- Specified by:
noBackslashEscapes
in interfaceListener
-
getMajorServerVersion
public int getMajorServerVersion()
- Specified by:
getMajorServerVersion
in interfaceListener
-
isValid
public boolean isValid(int timeout) throws SQLException
- Specified by:
isValid
in interfaceListener
- Throws:
SQLException
-
isReadOnly
public boolean isReadOnly()
- Specified by:
isReadOnly
in interfaceListener
-
inTransaction
public boolean inTransaction()
- Specified by:
inTransaction
in interfaceListener
-
isMasterConnection
public boolean isMasterConnection()
- Specified by:
isMasterConnection
in interfaceListener
-
isExplicitClosed
public boolean isExplicitClosed()
- Specified by:
isExplicitClosed
in interfaceListener
-
getRetriesAllDown
public int getRetriesAllDown()
- Specified by:
getRetriesAllDown
in interfaceListener
-
isAutoReconnect
public boolean isAutoReconnect()
- Specified by:
isAutoReconnect
in interfaceListener
-
getUrlParser
public UrlParser getUrlParser()
- Specified by:
getUrlParser
in interfaceListener
-
preExecute
public abstract void preExecute() throws SQLException
- Specified by:
preExecute
in interfaceListener
- Throws:
SQLException
-
reconnectFailedConnection
public abstract void reconnectFailedConnection(SearchFilter filter) throws SQLException
- Specified by:
reconnectFailedConnection
in interfaceListener
- Throws:
SQLException
-
switchReadOnlyConnection
public abstract void switchReadOnlyConnection(Boolean readonly) throws SQLException
- Specified by:
switchReadOnlyConnection
in interfaceListener
- Throws:
SQLException
-
primaryFail
public abstract HandleErrorResult primaryFail(Method method, Object[] args, boolean killCmd, boolean isClosed) throws SQLException
- Specified by:
primaryFail
in interfaceListener
- Throws:
SQLException
-
throwFailoverMessage
public void throwFailoverMessage(HostAddress failHostAddress, boolean wasMaster, SQLException queryException, boolean reconnected) throws SQLException
Throw a human readable message after a failoverException.- Specified by:
throwFailoverMessage
in interfaceListener
- Parameters:
failHostAddress
- failedHostAddresswasMaster
- was failed connection masterqueryException
- internal errorreconnected
- connection status- Throws:
SQLException
- error with failover information
-
canRetryFailLoop
public boolean canRetryFailLoop()
- Specified by:
canRetryFailLoop
in interfaceListener
-
prolog
public void prolog(long maxRows, MariaDbConnection connection, MariaDbStatement statement) throws SQLException
- Specified by:
prolog
in interfaceListener
- Throws:
SQLException
-
getCatalog
public String getCatalog() throws SQLException
- Specified by:
getCatalog
in interfaceListener
- Throws:
SQLException
-
getTimeout
public int getTimeout() throws SocketException
- Specified by:
getTimeout
in interfaceListener
- Throws:
SocketException
-
reconnect
public abstract void reconnect() throws SQLException
- Specified by:
reconnect
in interfaceListener
- Throws:
SQLException
-
checkMasterStatus
public abstract boolean checkMasterStatus(SearchFilter searchFilter)
- Specified by:
checkMasterStatus
in interfaceListener
-
getLastQueryNanos
public long getLastQueryNanos()
- Specified by:
getLastQueryNanos
in interfaceListener
-
pingMasterProtocol
protected boolean pingMasterProtocol(Protocol protocol)
-
closeConnection
public void closeConnection(Protocol protocol)
Utility to close existing connection.- Parameters:
protocol
- connection to close.
-
abortConnection
public void abortConnection(Protocol protocol)
Utility to force close existing connection.- Parameters:
protocol
- connection to close.
-
-