protected SequentialFile createFileForLargeMessage(final long messageID, final boolean durable) { if (durable) { return createFileForLargeMessage(messageID, LargeMessageExtension.DURABLE); } else { return createFileForLargeMessage(messageID, LargeMessageExtension.TEMPORARY); } }
/** * */ protected SequentialFile createFile() { return storageManager.createFileForLargeMessage(getMessageID(), durable); }
@Override public Message copy() { SequentialFile newfile = storageManager.createFileForLargeMessage(messageID, durable); Message newMessage = new LargeServerMessageImpl(this, properties, newfile, messageID); return newMessage; }
/** * Assumption is that this is only called with a writeLock on the StorageManager. */ @Override protected void performCachedLargeMessageDeletes() { largeMessagesToDelete.forEach((messageId, largeServerMessage) -> { SequentialFile msg = createFileForLargeMessage(messageId, LargeMessageExtension.DURABLE); try { msg.delete(); } catch (Exception e) { ActiveMQServerLogger.LOGGER.journalErrorDeletingMessage(e, messageId); } if (replicator != null) { replicator.largeMessageDelete(messageId, JournalStorageManager.this); } confirmLargeMessage(largeServerMessage); }); largeMessagesToDelete.clear(); }
@Override /** * @param messages * @param buff * @return * @throws Exception */ protected LargeServerMessage parseLargeMessage(final Map<Long, Message> messages, final ActiveMQBuffer buff) throws Exception { LargeServerMessage largeMessage = createLargeMessage(); LargeMessagePersister.getInstance().decode(buff, largeMessage); if (largeMessage.containsProperty(Message.HDR_ORIG_MESSAGE_ID)) { // for compatibility: couple with old behaviour, copying the old file to avoid message loss long originalMessageID = largeMessage.getLongProperty(Message.HDR_ORIG_MESSAGE_ID); SequentialFile currentFile = createFileForLargeMessage(largeMessage.getMessageID(), true); if (!currentFile.exists()) { SequentialFile linkedFile = createFileForLargeMessage(originalMessageID, true); if (linkedFile.exists()) { linkedFile.copyTo(currentFile); linkedFile.close(); } } currentFile.close(); } return largeMessage; }