package fm.liu.timo.mysql.handler.xa; import java.util.concurrent.atomic.AtomicInteger; import fm.liu.timo.TimoServer; import fm.liu.timo.config.ErrorCode; import fm.liu.timo.mysql.packet.ErrorPacket; import fm.liu.timo.mysql.packet.OkPacket; import fm.liu.timo.net.connection.BackendConnection; import fm.liu.timo.server.session.XATransactionSession; import fm.liu.timo.server.session.XATransactionSession.XAState; /** * @author liuhuanting */ public class XAStartHandler extends XAHandler { public XAStartHandler(XATransactionSession session, int count) { super(session, null); super.count = new AtomicInteger(count); } @Override public void ok(byte[] ok, BackendConnection con) { if (decrement()) { if (failed()) { error(); return; } TimoServer.getInstance().setXAStarting(false); session.setState(XAState.ACTIVE); OkPacket p = new OkPacket(); p.read(ok); p.packetId = ++packetId; session.savepoint(p); } } private void error() { session.clear(); TimoServer.getInstance().setXAStarting(false); session.getFront().writeErrMessage(ErrorCode.ER_YES, this.errMsg); recycleResources(); } @Override public void error(byte[] error, BackendConnection con) { ErrorPacket err = new ErrorPacket(); err.read(error); this.setFail(err.errno, new String(err.message)); if (decrement()) { error(); } } }