Class TransactionCoordinator

    • Method Detail

      • add

        public TransactionCoordinator add​(TransactionalComponent elt)
        Add a TransactionalComponent. Safe to call at any time but it is good practice is to add all the components before any transactions start. Internally, the coordinator ensures the add will safely happen but it does not add the component to existing transactions. This must be setup before recovery is attempted.
      • modifyConfig

        public void modifyConfig​(java.lang.Runnable action)
        Perform modification of this TransactionCoordiator after it has been started.

        This operation enters exclusive mode, releases the configuration lock, then calls the action. On exit from the action, it resets the configuration lock, and exits exclusive mode.

        Do not call inside a transaction, it may cause a deadlock.

        Use with care!

      • setQuorumGenerator

        public void setQuorumGenerator​(QuorumGenerator qGen)
      • start

        public void start()
      • setTxnIdGenerator

        public void setTxnIdGenerator​(TxnIdGenerator generator)
      • getJournal

        public Journal getJournal()
      • getLocation

        public Location getLocation()
      • shutdown

        public void shutdown()
      • shutdown

        public void shutdown​(boolean silent)
      • startExclusiveMode

        public void startExclusiveMode()
        Enter exclusive mode; block if necessary. There are no active transactions on return; new transactions will be held up in 'begin'. Return to normal (release waiting transactions, allow new transactions) with finishExclusiveMode().

        Do not call inside an existing transaction.

      • tryExclusiveMode

        public boolean tryExclusiveMode()
        Try to enter exclusive mode. If return is true, then there are no active transactions on return and new transactions will be held up in 'begin'. If false, there were in-progress transactions. Return to normal (release waiting transactions, allow new transactions) with finishExclusiveMode().

        Do not call inside an existing transaction.

      • tryExclusiveMode

        public boolean tryExclusiveMode​(boolean canBlock)
        Try to enter exclusive mode. If return is true, then there are no active transactions on return and new transactions will be held up in 'begin'. If false, there were in-progress transactions. Return to normal (release waiting transactions, allow new transactions) with finishExclusiveMode().

        Do not call inside an existing transaction.

        Parameters:
        canBlock - Allow the operation block and wait for the exclusive mode lock.
      • finishExclusiveMode

        public void finishExclusiveMode()
        Return to normal (release waiting transactions, allow new transactions). Must be paired with an earlier startExclusiveMode().
      • execExclusive

        public void execExclusive​(java.lang.Runnable action)
        Execute an action in exclusive mode. This method can block. Equivalent to:
          startExclusiveMode();
          try { action.run(); }
          finally { finishExclusiveMode(); }
         
        Parameters:
        action -
      • blockWriters

        public void blockWriters()
        Block until no writers are active. When this returns, this guarantees that the database is not changing and the journal is flushed to disk.

        The application must call enableWriters() later.

        This operation must not be nested (it will block).

        See Also:
        tryBlockWriters(), enableWriters()
      • tryBlockWriters

        public boolean tryBlockWriters()
        Try to block all writers, or return if can't at the moment.

        Unlike a write transaction, there is no associated transaction.

        If it returns true, the application must call enableWriters() later.

        Returns:
        true if the operation succeeded and writers are blocked
        See Also:
        blockWriters(), enableWriters()
      • tryBlockWriters

        public boolean tryBlockWriters​(boolean canBlock)
        Block until no writers are active, optionally blocking or returning if can't at the moment.

        Unlike a write transaction, there is no associated transaction.

        If it returns true, the application must call enableWriters() later.

        Parameters:
        canBlock -
        Returns:
        true if the operation succeeded and writers are blocked
      • execAsWriter

        public void execAsWriter​(java.lang.Runnable action)
        Execute an action in as if a Write but no write transaction started. This method can block.

        Equivalent to:

          blockWriters();
          try { action.run(); }
          finally { enableWriters(); }
         
        Parameters:
        action -
      • begin

        public Transaction begin​(TxnType txnType)
        Start a transaction. This may block.
      • begin

        public Transaction begin​(TxnType txnType,
                                 boolean canBlock)
        Start a transaction. Returns null if this operation would block. Readers can start at any time. A single writer policy is currently imposed so a "begin(WRITE)" may block.
      • countActiveReaders

        public long countActiveReaders()
      • countActiveWriter

        public long countActiveWriter()
      • countActive

        public long countActive()
      • countBegin

        public long countBegin()
      • countBeginRead

        public long countBeginRead()
      • countBeginWrite

        public long countBeginWrite()
      • countFinished

        public long countFinished()