@Override public void commit(final long txID) throws Exception { commit(txID, true); }
@Override public void afterRollback(Transaction tx) { for (Long msg : confirmedMessages) { try { journalStorageManager.confirmPendingLargeMessage(msg); } catch (Throwable e) { ActiveMQServerLogger.LOGGER.journalErrorConfirmingLargeMessage(e, msg); } } } }
@Override public void readLock() { enterCritical(CRITICAL_STORE); storageManagerLock.readLock().lock(); }
@Override public long storeHeuristicCompletion(final Xid xid, final boolean isCommit) throws Exception { readLock(); try { long id = generateID(); messageJournal.appendAddRecord(id, JournalRecordIds.HEURISTIC_COMPLETION, new HeuristicCompletionEncoding(xid, isCommit), true, getContext(true)); return id; } finally { readUnLock(); } }
@Override public void storePageTransaction(final long txID, final PageTransactionInfo pageTransaction) throws Exception { readLock(); try { pageTransaction.setRecordID(generateID()); messageJournal.appendAddRecordTransactional(txID, pageTransaction.getRecordID(), JournalRecordIds.PAGE_TRANSACTION, pageTransaction); } finally { readUnLock(); } }
PersistentQueueBindingEncoding bindingEncoding = newQueueBindingEncoding(id, buffer); mapBindings.put(bindingEncoding.getId(), bindingEncoding); } else if (rec == JournalRecordIds.ID_COUNTER_RECORD) { idGenerator.loadState(record.id, buffer); } else if (rec == JournalRecordIds.ADDRESS_BINDING_RECORD) { PersistentAddressBindingEncoding bindingEncoding = newAddressBindingEncoding(id, buffer); addressBindingInfos.add(bindingEncoding); } else if (rec == JournalRecordIds.GROUP_RECORD) { GroupingEncoding encoding = newGroupEncoding(id, buffer); groupingInfos.add(encoding); } else if (rec == JournalRecordIds.ADDRESS_SETTING_RECORD) { PersistedAddressSetting setting = newAddressEncoding(id, buffer); mapPersistedAddressSettings.put(setting.getAddressMatch(), setting); } else if (rec == JournalRecordIds.SECURITY_RECORD) { PersistedRoles roles = newSecurityRecord(id, buffer); mapPersistedRoles.put(roles.getAddressMatch(), roles); } else if (rec == JournalRecordIds.QUEUE_STATUS_RECORD) { QueueStatusEncoding statusEncoding = newQueueStatusEncoding(id, buffer); PersistentQueueBindingEncoding queueBindingEncoding = mapBindings.get(statusEncoding.queueID); if (queueBindingEncoding != null) { this.deleteQueueStatus(statusEncoding.getId());
readLock(); try { LargeServerMessage largeMessage = parseLargeMessage(messages, buff); PageSubscription sub = locateSubscription(encoding.queueID, pageSubscriptions, queueInfos, pagingManager); PageSubscription sub = locateSubscription(encoding.getQueueID(), pageSubscriptions, queueInfos, pagingManager); PageSubscription sub = locateSubscription(encoding.getQueueID(), pageSubscriptions, queueInfos, pagingManager); PageSubscription sub = locateSubscription(encoding.queueID, pageSubscriptions, queueInfos, pagingManager); PageSubscription sub = locateSubscription(pendingCountEncoding.getQueueID(), pageSubscriptions, queueInfos, pagingManager); if (sub != null) { sub.notEmpty(); loadPreparedTransactions(postOffice, pagingManager, resourceManager, queueInfos, preparedTransactions, duplicateIDMap, pageSubscriptions, pendingLargeMessages, journalLoader); checkInvalidPageTransactions(pagingManager, invalidPageTransactions); readUnLock();
@Override public void storeAddressSetting(PersistedAddressSetting addressSetting) throws Exception { deleteAddressSetting(addressSetting.getAddressMatch()); readLock(); try { long id = idGenerator.generateID(); addressSetting.setStoreId(id); bindingsJournal.appendAddRecord(id, JournalRecordIds.ADDRESS_SETTING_RECORD, addressSetting, true); mapPersistedAddressSettings.put(addressSetting.getAddressMatch(), addressSetting); } finally { readUnLock(); } }
@Override public void storeSecurityRoles(PersistedRoles persistedRoles) throws Exception { deleteSecurityRoles(persistedRoles.getAddressMatch()); readLock(); try { final long id = idGenerator.generateID(); persistedRoles.setStoreId(id); bindingsJournal.appendAddRecord(id, JournalRecordIds.SECURITY_RECORD, persistedRoles, true); mapPersistedRoles.put(persistedRoles.getAddressMatch(), persistedRoles); } finally { readUnLock(); } }
@Override public synchronized void stop(boolean ioCriticalError, boolean sendFailover) throws Exception { if (!started) { return; } if (!ioCriticalError) { performCachedLargeMessageDeletes(); // Must call close to make sure last id is persisted if (journalLoaded && idGenerator != null) idGenerator.persistCurrentID(); } final CountDownLatch latch = new CountDownLatch(1); executor.execute(new Runnable() { @Override public void run() { latch.countDown(); } }); latch.await(30, TimeUnit.SECONDS); beforeStop(); bindingsJournal.stop(); messageJournal.stop(); journalLoaded = false; started = false; }
@Override public synchronized void start() throws Exception { if (started) { return; } beforeStart(); singleThreadExecutor = ioExecutorFactory.getExecutor(); bindingsJournal.start(); messageJournal.start(); started = true; }
protected void confirmLargeMessage(final LargeServerMessage largeServerMessage) { synchronized (largeServerMessage) { if (largeServerMessage.getPendingRecordID() >= 0) { try { confirmPendingLargeMessage(largeServerMessage.getPendingRecordID()); largeServerMessage.setPendingRecordID(LargeServerMessage.NO_PENDING_ID); } catch (Exception e) { ActiveMQServerLogger.LOGGER.warn(e.getMessage(), e); } } } }