docs: public void beginAction(Session session, Statement cs) {
  
          synchronized (liveTransactionTimestamps) {
              session.actionTimestamp = nextChangeTimestamp();
  
              if (!session.isTransaction) {
                  session.transactionTimestamp = session.actionTimestamp;
                  session.isTransaction        = true;
  
                  liveTransactionTimestamps.addLast(session.actionTimestamp);
  
                  try {
                      if (this.mvcc) {
                          database.logger.writeToLog(
                              session, session.getStartTransactionSQL());
                      }
                  } catch (HsqlException e) {}
              }
          }
  
          if (session.isReadOnly()) {
              return;
          }
  
          if (!mvcc) {
              if (session.hasLocks()) {
                  return;
              }
  
              try {
                  writeLock.lock();
  
                  boolean canProceed = beginActionTPL(session, cs);
  
                  if (!canProceed) {
                      session.abortTransaction = true;
                  }
  /* debug 190
                  if (!canProceed) {
                      System.out.println("******* cannot start");
                  }
  // debug 190 */
              } finally {
                  writeLock.unlock();
              }
          }
      }