@Override public void prepare(final TransactionId txid) throws IOException { Tx tx = null; synchronized (this.inflightTransactions) { tx = this.inflightTransactions.remove(txid); } if (tx == null) { return; } final TransactionOperation to = TransactionOperation.newBuilder() .setType(TransactionType.XA_PREPARE) .setTransactionId(txid.getTransactionKey()) .setWasPrepared(false) .build(); // prepare,必须force final TxCommand msg = TxCommand.newBuilder() .setCmdType(TxCommandType.TX_OP) .setCmdContent(to.toByteString()) .setForce(true) .build(); this.journalStore.write(msg, null, tx.location, false); synchronized (this.preparedTransactions) { this.preparedTransactions.put(txid, tx); } }
@Override public void rollback(final TransactionId txid) throws IOException { Tx tx = null; synchronized (this.inflightTransactions) { tx = this.inflightTransactions.remove(txid); } if (tx == null) { synchronized (this.preparedTransactions) { tx = this.preparedTransactions.remove(txid); } } if (tx != null) { if (txid.isXATransaction()) { final TransactionOperation to = TransactionOperation.newBuilder() // .setType(TransactionType.XA_ROLLBACK) // .setTransactionId(txid.getTransactionKey()) // .setWasPrepared(false) // .build(); final TxCommand msg = TxCommand.newBuilder() .setCmdType(TxCommandType.TX_OP) .setCmdContent(to.toByteString()) .build(); this.journalStore.write(msg, null, tx.location, true); } else { final TransactionOperation to = TransactionOperation.newBuilder() // .setType(TransactionType.LOCAL_ROLLBACK) // .setTransactionId(txid.getTransactionKey()) // .setWasPrepared(false) // .build(); final TxCommand msg = TxCommand.newBuilder() .setCmdType(TxCommandType.TX_OP) .setCmdContent(to.toByteString()) .build(); this.journalStore.write(msg, null, tx.location, true); } } }