Class MultiPrimaryClient

  • All Implemented Interfaces:
    AutoCloseable, org.mariadb.jdbc.client.Client
    Direct Known Subclasses:
    MultiPrimaryReplicaClient

    public class MultiPrimaryClient
    extends Object
    implements org.mariadb.jdbc.client.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.

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void abort​(Executor executor)
      Abort current connection
      void close()
      Close client
      void closePrepare​(Prepare prepare)
      Close prepare command
      protected org.mariadb.jdbc.client.Client connectHost​(boolean readOnly, boolean failFast)
      Trying connecting server.
      List<org.mariadb.jdbc.client.Completion> execute​(org.mariadb.jdbc.message.ClientMessage message, boolean canRedo)
      Send client message and read result
      List<org.mariadb.jdbc.client.Completion> execute​(org.mariadb.jdbc.message.ClientMessage message, Statement stmt, boolean canRedo)
      Send client message and read result
      List<org.mariadb.jdbc.client.Completion> execute​(org.mariadb.jdbc.message.ClientMessage message, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo)
      Send client message and read result
      List<org.mariadb.jdbc.client.Completion> executePipeline​(org.mariadb.jdbc.message.ClientMessage[] messages, Statement stmt, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion, boolean canRedo)
      Send client messages pipelining and read result
      protected void executeTransactionReplay​(org.mariadb.jdbc.client.Client oldCli)
      Execute transaction replay
      org.mariadb.jdbc.client.Context getContext()
      Get connection context
      ExceptionFactory getExceptionFactory()
      Get connection exception factory
      HostAddress getHostAddress()
      Get connection host
      int getSocketTimeout()
      get socket timeout
      boolean isClosed()
      Is client closed
      boolean isPrimary()
      is current client writer or read-only
      void readStreamingResults​(List<org.mariadb.jdbc.client.Completion> completions, int fetchSize, long maxRows, int resultSetConcurrency, int resultSetType, boolean closeOnCompletion)
      Read results
      protected org.mariadb.jdbc.client.Client reConnect()
      Connection loop
      protected void replayIfPossible​(org.mariadb.jdbc.client.Client oldClient, boolean canRedo)
      Execute transaction replay if in transaction and configured for it, throw an exception if not
      void reset()
      Reset connection
      void setReadOnly​(boolean readOnly)
      Switch to a writer/read-only connection, no effet on mono-connection
      void setSocketTimeout​(int milliseconds)
      Set socket timeout
      void syncNewState​(org.mariadb.jdbc.client.Client oldCli)
      Synchronized previous and new client states.
    • Field Detail

      • deniedListTimeout

        protected final long deniedListTimeout
        denied timeout
      • closed

        protected boolean closed
        is connections explicitly closed
      • currentClient

        protected org.mariadb.jdbc.client.Client currentClient
        current client
    • Method Detail

      • connectHost

        protected org.mariadb.jdbc.client.Client connectHost​(boolean readOnly,
                                                             boolean failFast)
                                                      throws 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 / primary
        failFast - must try only not denied server
        Returns:
        a valid connection client
        Throws:
        SQLException - if not succeed to create a connection.
      • reConnect

        protected org.mariadb.jdbc.client.Client reConnect()
                                                    throws SQLException
        Connection loop
        Returns:
        client connection
        Throws:
        SQLException - if fail to connect
      • replayIfPossible

        protected void replayIfPossible​(org.mariadb.jdbc.client.Client oldClient,
                                        boolean canRedo)
                                 throws SQLException
        Execute transaction replay if in transaction and configured for it, throw an exception if not
        Parameters:
        oldClient - previous client
        canRedo - if command can be redo even if not in transaction
        Throws:
        SQLException - if not able to replay
      • executeTransactionReplay

        protected void executeTransactionReplay​(org.mariadb.jdbc.client.Client oldCli)
                                         throws SQLException
        Execute transaction replay
        Parameters:
        oldCli - previous client
        Throws:
        SQLException - if not able to replay
      • syncNewState

        public void syncNewState​(org.mariadb.jdbc.client.Client oldCli)
                          throws SQLException
        Synchronized previous and new client states.
        Parameters:
        oldCli - previous client
        Throws:
        SQLException - if error occurs
      • execute

        public List<org.mariadb.jdbc.client.Completion> execute​(org.mariadb.jdbc.message.ClientMessage message,
                                                                boolean canRedo)
                                                         throws SQLException
        Description copied from interface: org.mariadb.jdbc.client.Client
        Send client message and read result
        Specified by:
        execute in interface org.mariadb.jdbc.client.Client
        Parameters:
        message - client message
        canRedo - can client message be redone in case of failover
        Returns:
        results
        Throws:
        SQLException - if execution fails
      • execute

        public List<org.mariadb.jdbc.client.Completion> execute​(org.mariadb.jdbc.message.ClientMessage message,
                                                                Statement stmt,
                                                                boolean canRedo)
                                                         throws SQLException
        Description copied from interface: org.mariadb.jdbc.client.Client
        Send client message and read result
        Specified by:
        execute in interface org.mariadb.jdbc.client.Client
        Parameters:
        message - client message
        stmt - statement
        canRedo - can client message be redone in case of failover
        Returns:
        results
        Throws:
        SQLException - if execution fails
      • execute

        public List<org.mariadb.jdbc.client.Completion> execute​(org.mariadb.jdbc.message.ClientMessage message,
                                                                Statement stmt,
                                                                int fetchSize,
                                                                long maxRows,
                                                                int resultSetConcurrency,
                                                                int resultSetType,
                                                                boolean closeOnCompletion,
                                                                boolean canRedo)
                                                         throws SQLException
        Description copied from interface: org.mariadb.jdbc.client.Client
        Send client message and read result
        Specified by:
        execute in interface org.mariadb.jdbc.client.Client
        Parameters:
        message - client message
        stmt - statement
        fetchSize - fetch size
        maxRows - maximum number of rows. 0 = all
        resultSetConcurrency - concurrency
        resultSetType - result-set type
        closeOnCompletion - close statement on completion
        canRedo - can client message be redone in case of failover
        Returns:
        results
        Throws:
        SQLException - if any error occurs
      • executePipeline

        public List<org.mariadb.jdbc.client.Completion> executePipeline​(org.mariadb.jdbc.message.ClientMessage[] messages,
                                                                        Statement stmt,
                                                                        int fetchSize,
                                                                        long maxRows,
                                                                        int resultSetConcurrency,
                                                                        int resultSetType,
                                                                        boolean closeOnCompletion,
                                                                        boolean canRedo)
                                                                 throws SQLException
        Description copied from interface: org.mariadb.jdbc.client.Client
        Send client messages pipelining and read result
        Specified by:
        executePipeline in interface org.mariadb.jdbc.client.Client
        Parameters:
        messages - client message
        stmt - statement
        fetchSize - fetch size
        maxRows - maximum number of rows. 0 = all
        resultSetConcurrency - concurrency
        resultSetType - result-set type
        closeOnCompletion - close statement on completion
        canRedo - can client message be redone in case of failover
        Returns:
        results
        Throws:
        SQLException - if any error occurs
      • readStreamingResults

        public void readStreamingResults​(List<org.mariadb.jdbc.client.Completion> completions,
                                         int fetchSize,
                                         long maxRows,
                                         int resultSetConcurrency,
                                         int resultSetType,
                                         boolean closeOnCompletion)
                                  throws SQLException
        Description copied from interface: org.mariadb.jdbc.client.Client
        Read results
        Specified by:
        readStreamingResults in interface org.mariadb.jdbc.client.Client
        Parameters:
        completions - List that will have the new results
        fetchSize - fetch size
        maxRows - maximum number of rows. 0 = all
        resultSetConcurrency - concurrency
        resultSetType - result-set type
        closeOnCompletion - close statement on completion
        Throws:
        SQLException - if any error occurs
      • closePrepare

        public void closePrepare​(Prepare prepare)
                          throws SQLException
        Description copied from interface: org.mariadb.jdbc.client.Client
        Close prepare command
        Specified by:
        closePrepare in interface org.mariadb.jdbc.client.Client
        Parameters:
        prepare - prepare command
        Throws:
        SQLException - if any error occurs
      • abort

        public void abort​(Executor executor)
                   throws SQLException
        Description copied from interface: org.mariadb.jdbc.client.Client
        Abort current connection
        Specified by:
        abort in interface org.mariadb.jdbc.client.Client
        Parameters:
        executor - executor
        Throws:
        SQLException - if any error occurs
      • close

        public void close()
                   throws SQLException
        Description copied from interface: org.mariadb.jdbc.client.Client
        Close client
        Specified by:
        close in interface AutoCloseable
        Specified by:
        close in interface org.mariadb.jdbc.client.Client
        Throws:
        SQLException - if any error occurs
      • setReadOnly

        public void setReadOnly​(boolean readOnly)
                         throws SQLException
        Description copied from interface: org.mariadb.jdbc.client.Client
        Switch to a writer/read-only connection, no effet on mono-connection
        Specified by:
        setReadOnly in interface org.mariadb.jdbc.client.Client
        Parameters:
        readOnly - must use read-only connection
        Throws:
        SQLException - if any error occurs
      • getSocketTimeout

        public int getSocketTimeout()
        Description copied from interface: org.mariadb.jdbc.client.Client
        get socket timeout
        Specified by:
        getSocketTimeout in interface org.mariadb.jdbc.client.Client
        Returns:
        socket timeout
      • setSocketTimeout

        public void setSocketTimeout​(int milliseconds)
                              throws SQLException
        Description copied from interface: org.mariadb.jdbc.client.Client
        Set socket timeout
        Specified by:
        setSocketTimeout in interface org.mariadb.jdbc.client.Client
        Parameters:
        milliseconds - timeout
        Throws:
        SQLException - if any error occurs
      • isClosed

        public boolean isClosed()
        Description copied from interface: org.mariadb.jdbc.client.Client
        Is client closed
        Specified by:
        isClosed in interface org.mariadb.jdbc.client.Client
        Returns:
        close flag
      • getContext

        public org.mariadb.jdbc.client.Context getContext()
        Description copied from interface: org.mariadb.jdbc.client.Client
        Get connection context
        Specified by:
        getContext in interface org.mariadb.jdbc.client.Client
        Returns:
        connection context
      • getExceptionFactory

        public ExceptionFactory getExceptionFactory()
        Description copied from interface: org.mariadb.jdbc.client.Client
        Get connection exception factory
        Specified by:
        getExceptionFactory in interface org.mariadb.jdbc.client.Client
        Returns:
        connection exception factory
      • getHostAddress

        public HostAddress getHostAddress()
        Description copied from interface: org.mariadb.jdbc.client.Client
        Get connection host
        Specified by:
        getHostAddress in interface org.mariadb.jdbc.client.Client
        Returns:
        connection host
      • isPrimary

        public boolean isPrimary()
        Description copied from interface: org.mariadb.jdbc.client.Client
        is current client writer or read-only
        Specified by:
        isPrimary in interface org.mariadb.jdbc.client.Client
        Returns:
        is primary
      • reset

        public void reset()
        Description copied from interface: org.mariadb.jdbc.client.Client
        Reset connection
        Specified by:
        reset in interface org.mariadb.jdbc.client.Client