@Override public void run() { journalLock.readLock().lock(); final JournalTransaction tx = getTransactionInfo(txID); try { tx.checkErrorCondition(); JournalInternalRecord prepareRecord = new JournalCompleteRecordTX(TX_RECORD_TYPE.PREPARE, txID, transactionData); JournalFile usedFile = appendRecord(prepareRecord, true, sync, tx, callback); if (logger.isTraceEnabled()) { logger.trace("appendPrepareRecord::txID=" + txID + ", usedFile = " + usedFile); } tx.prepare(usedFile); } catch (ActiveMQShutdownException e) { result.fail(e); logger.error("appendPrepareRecord:" + e, e); } catch (Throwable e) { result.fail(e); logger.error("appendPrepareRecord:" + e, e); setErrorCondition(callback, tx, e); } finally { journalLock.readLock().unlock(); result.set(tx); } } });
@Override public void run() { journalLock.readLock().lock(); final JournalTransaction tx = getTransactionInfo(txID); try { tx.checkErrorCondition(); JournalInternalRecord prepareRecord = new JournalCompleteRecordTX(TX_RECORD_TYPE.PREPARE, txID, transactionData); JournalFile usedFile = appendRecord(prepareRecord, true, sync, tx, callback); if (logger.isTraceEnabled()) { logger.trace("appendPrepareRecord::txID=" + txID + ", usedFile = " + usedFile); } tx.prepare(usedFile); } catch (ActiveMQShutdownException e) { result.fail(e); logger.error("appendPrepareRecord:" + e, e); } catch (Throwable e) { result.fail(e); logger.error("appendPrepareRecord:" + e, e); setErrorCondition(callback, tx, e); } finally { journalLock.readLock().unlock(); result.set(tx); } } });
@Override public void onReadPrepareRecord(final long transactionID, final byte[] extraData, final int numberOfRecords) throws Exception { hasData.lazySet(true); TransactionHolder tx = loadTransactions.get(transactionID); if (tx == null) { // The user could choose to prepare empty transactions tx = new TransactionHolder(transactionID); loadTransactions.put(transactionID, tx); } tx.prepared = true; tx.extraData = extraData; JournalTransaction journalTransaction = transactions.get(transactionID); if (journalTransaction == null) { journalTransaction = new JournalTransaction(transactionID, JournalImpl.this); transactions.put(transactionID, journalTransaction); } boolean healthy = checkTransactionHealth(file, journalTransaction, orderedFiles, numberOfRecords); if (healthy) { journalTransaction.prepare(file); } else { ActiveMQJournalLogger.LOGGER.preparedTXIncomplete(transactionID); tx.invalid = true; } }
@Override public void onReadPrepareRecord(final long transactionID, final byte[] extraData, final int numberOfRecords) throws Exception { if (logger.isTraceEnabled()) { logger.trace("onReadPrepareRecord " + transactionID); } if (pendingTransactions.get(transactionID) != null) { JournalTransaction newTransaction = getNewJournalTransaction(transactionID); JournalInternalRecord prepareRecord = new JournalCompleteRecordTX(TX_RECORD_TYPE.PREPARE, transactionID, new ByteArrayEncoding(extraData)); checkSize(prepareRecord.getEncodeSize()); writeEncoder(prepareRecord, newTransaction.getCounter(currentFile)); newTransaction.prepare(currentFile); } }
@Override public void onReadPrepareRecord(final long transactionID, final byte[] extraData, final int numberOfRecords) throws Exception { hasData.lazySet(true); TransactionHolder tx = loadTransactions.get(transactionID); if (tx == null) { // The user could choose to prepare empty transactions tx = new TransactionHolder(transactionID); loadTransactions.put(transactionID, tx); } tx.prepared = true; tx.extraData = extraData; JournalTransaction journalTransaction = transactions.get(transactionID); if (journalTransaction == null) { journalTransaction = new JournalTransaction(transactionID, JournalImpl.this); transactions.put(transactionID, journalTransaction); } boolean healthy = checkTransactionHealth(file, journalTransaction, orderedFiles, numberOfRecords); if (healthy) { journalTransaction.prepare(file); } else { ActiveMQJournalLogger.LOGGER.preparedTXIncomplete(transactionID); tx.invalid = true; } }
@Override public void onReadPrepareRecord(final long transactionID, final byte[] extraData, final int numberOfRecords) throws Exception { if (logger.isTraceEnabled()) { logger.trace("onReadPrepareRecord " + transactionID); } if (pendingTransactions.get(transactionID) != null) { JournalTransaction newTransaction = getNewJournalTransaction(transactionID); JournalInternalRecord prepareRecord = new JournalCompleteRecordTX(TX_RECORD_TYPE.PREPARE, transactionID, new ByteArrayEncoding(extraData)); checkSize(prepareRecord.getEncodeSize()); writeEncoder(prepareRecord, newTransaction.getCounter(currentFile)); newTransaction.prepare(currentFile); } }