public boolean tryExistsCon(final BackendConnection conn, RouteResultsetNode node) { if (conn == null) { return false; } if (!conn.isFromSlaveDB() || node.canRunnINReadDB(this.autocommit)) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("found connections in session to use " + conn + " for " + node); } conn.setAttachment(node); return true; } else { // slavedb connection and can't use anymore ,release it if (LOGGER.isDebugEnabled()) { LOGGER.debug( "release slave connection,can't be used in trasaction " + conn + " for " + node); } releaseConnection(node, LOGGER.isDebugEnabled(), false); } return false; }
public void releaseConnection(RouteResultsetNode rrn, boolean debug, final boolean needRollback) { BackendConnection c = target.remove(rrn); if (c != null) { if (debug) { LOGGER.debug("release connection " + c); } if (c.getAttachment() != null) { c.setAttachment(null); } if (!c.isClosed()) { if (c.isAutocommit()) { c.release(); } else if (needRollback) { c.setResponseHandler(new RollbackReleaseHandler()); c.rollback(); } else { c.release(); } } } }