/** * Cleans up the data files * @throws IOException */ public void cleanup() { try { Set<Integer>inProgress = new HashSet<Integer>(); if (LOG.isDebugEnabled()) { LOG.debug("dataFilesInProgress.values: (" + dataFilesInProgress.values().size() + ") " + dataFilesInProgress.values()); } for (Map<Integer, AtomicInteger> set: dataFilesInProgress.values()) { inProgress.addAll(set.keySet()); } Integer lastDataFile = asyncDataManager.getCurrentDataFileId(); inProgress.add(lastDataFile); lastDataFile = asyncDataManager.getMark().getDataFileId(); inProgress.addAll(referenceStoreAdapter.getReferenceFileIdsInUse()); Location lastActiveTx = transactionStore.checkpoint(); if (lastActiveTx != null) { lastDataFile = Math.min(lastDataFile, lastActiveTx.getDataFileId()); } LOG.debug("lastDataFile: " + lastDataFile); asyncDataManager.consolidateDataFilesNotIn(inProgress, lastDataFile - 1); } catch (IOException e) { LOG.error("Could not cleanup data files: " + e, e); } }
/** * @param message * @throws IOException */ void addMessage(AMQMessageStore store, Message message, Location location) throws IOException { AMQTx tx = getTx(message.getTransactionId(), location); tx.add(store, message, location); }
AMQMessageStore store = (AMQMessageStore)createMessageStore(message.getDestination()); if (message.isInTransaction()) { transactionStore.addMessage(store, message, pos); } else { if (store.replayAddMessage(context, message, pos)) { AMQMessageStore store = (AMQMessageStore)createMessageStore(command.getDestination()); if (command.getMessageAck().isInTransaction()) { transactionStore.removeMessage(store, command.getMessageAck(), pos); } else { if (store.replayRemoveMessage(context, command.getMessageAck())) { AMQTopicMessageStore store = (AMQTopicMessageStore)createMessageStore(command.getDestination()); if (command.getTransactionId() != null) { transactionStore.acknowledge(store, command, pos); } else { if (store.replayAcknowledge(context, command.getClientId(), command.getSubscritionName(), command.getMessageId())) { transactionStore.replayPrepare(command.getTransactionId()); break; case JournalTransaction.XA_COMMIT: case JournalTransaction.LOCAL_COMMIT: AMQTx tx = transactionStore.replayCommit(command.getTransactionId(), command.getWasPrepared()); if (tx == null) { break; // We may be trying to replay a commit case JournalTransaction.LOCAL_ROLLBACK: case JournalTransaction.XA_ROLLBACK: transactionStore.replayRollback(command.getTransactionId());
checkpointTask.shutdown(); referenceStoreAdapter.savePreparedState(getTransactionStore().getPreparedTransactions()); queues.clear(); topics.clear();
lock.unlock(); transactionStore.addMessage(this, message, location); context.getTransaction().addSynchronization(new Synchronization() { public void afterCommit() throws Exception {
lock.unlock(); transactionStore.removeMessage(this, ack, location); context.getTransaction().addSynchronization(new Synchronization() { public void afterCommit() throws Exception {
lock.unlock(); transactionStore.acknowledge(this, ack, location); context.getTransaction().addSynchronization(new Synchronization() {
asyncDataManager.setMark(location, true); getTransactionStore().setPreparedTransactions( referenceStoreAdapter.retrievePreparedState());
/** * @param ack * @throws IOException */ public void removeMessage(AMQMessageStore store, MessageAck ack, Location location) throws IOException { AMQTx tx = getTx(ack.getTransactionId(), location); tx.add(store, ack); }
public void acknowledge(AMQTopicMessageStore store, JournalTopicAck ack, Location location) { AMQTx tx = getTx(ack.getTransactionId(), location); tx.add(store, ack); }