dtmcli-java icon indicating copy to clipboard operation
dtmcli-java copied to clipboard

dtmcli-core没有实现Saga模式下的空补偿,只实现了TCC模式下的空补偿

Open ipwwp-git opened this issue 2 years ago • 0 comments

// pub.dtm.client.barrier.BranchBarrier#insertBarrier

private boolean insertBarrier(Connection connection) throws SQLException { log.info("insert barrier {}", this); if (Objects.isNull(connection)) { return false; } PreparedStatement preparedStatement = null; try { String sql = "insert ignore into barrier(trans_type, gid, branch_id, op, barrier_id, reason) values(?,?,?,?,?,?)"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, this.getTransTypeEnum().getValue()); preparedStatement.setString(2, this.getGid()); preparedStatement.setString(3, branchId); preparedStatement.setString(4, op); preparedStatement.setString(5, String.format("%02d", barrierId)); preparedStatement.setString(6, op);

        if (preparedStatement.executeUpdate() == 0) {
            return false;
        }
        if (ParamFieldConstants.CANCEL.equals(op)) {
            int opIndex = 4;
            preparedStatement.setString(opIndex, ParamFieldConstants.TRY);
            if (preparedStatement.executeUpdate() > 0) {
                return false;
            }
        }
    } finally {
        if (Objects.nonNull(preparedStatement)) {
            preparedStatement.close();
        }
    }
    return true;
}

这个地方,只判断了ParamFieldConstants.CANCEL.equals(op),而Saga模式的补偿op是compensate,不是cancel

ipwwp-git avatar Mar 02 '23 12:03 ipwwp-git