ARTEMIS-1652 Improving delete logic on XmlDataImporter
Before this the test would use a string and a temporary file on the user's folder. After this the test will use a temporary file with the proper File.createTemporaryFile method.
This commit is contained in:
parent
17db696e8b
commit
b2a71d2730
|
@ -26,6 +26,7 @@ import javax.xml.validation.Schema;
|
|||
import javax.xml.validation.SchemaFactory;
|
||||
import javax.xml.validation.Validator;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
|
@ -43,7 +44,6 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeSet;
|
||||
import java.util.UUID;
|
||||
|
||||
import io.airlift.airline.Command;
|
||||
import io.airlift.airline.Option;
|
||||
|
@ -95,8 +95,6 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
|
||||
final Map<String, Long> queueIDs = new HashMap<>();
|
||||
|
||||
String tempFileName = "";
|
||||
|
||||
HashMap<String, String> oldPrefixTranslation = new HashMap<>();
|
||||
|
||||
private ClientSession session;
|
||||
|
@ -328,13 +326,14 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
|
||||
boolean endLoop = false;
|
||||
|
||||
File largeMessageTemporaryFile = null;
|
||||
// loop through the XML and gather up all the message's data (i.e. body, properties, queues, etc.)
|
||||
while (reader.hasNext()) {
|
||||
int eventType = reader.getEventType();
|
||||
switch (eventType) {
|
||||
case XMLStreamConstants.START_ELEMENT:
|
||||
if (XmlDataConstants.MESSAGE_BODY.equals(reader.getLocalName())) {
|
||||
processMessageBody(message.toCore());
|
||||
largeMessageTemporaryFile = processMessageBody(message.toCore());
|
||||
} else if (XmlDataConstants.PROPERTIES_CHILD.equals(reader.getLocalName())) {
|
||||
processMessageProperties(message);
|
||||
} else if (XmlDataConstants.QUEUES_CHILD.equals(reader.getLocalName())) {
|
||||
|
@ -354,9 +353,9 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
}
|
||||
|
||||
if (sort) {
|
||||
messages.add(new MessageTemp(id, queues, message, tempFileName));
|
||||
messages.add(new MessageTemp(id, queues, message, largeMessageTemporaryFile));
|
||||
} else {
|
||||
sendMessage(queues, message, tempFileName);
|
||||
sendMessage(queues, message, largeMessageTemporaryFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -365,9 +364,9 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
long id;
|
||||
List<String> queues;
|
||||
Message message;
|
||||
String tempFileName;
|
||||
File tempFileName;
|
||||
|
||||
MessageTemp(long id, List<String> queues, Message message, String tempFileName) {
|
||||
MessageTemp(long id, List<String> queues, Message message, File tempFileName) {
|
||||
this.message = message;
|
||||
this.queues = queues;
|
||||
this.message = message;
|
||||
|
@ -401,7 +400,7 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
return type;
|
||||
}
|
||||
|
||||
private void sendMessage(List<String> queues, Message message, String tempFileName) throws Exception {
|
||||
private void sendMessage(List<String> queues, Message message, File tempFileName) throws Exception {
|
||||
StringBuilder logMessage = new StringBuilder();
|
||||
String destination = addressMap.get(queues.get(0));
|
||||
|
||||
|
@ -448,10 +447,15 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
producer.send(message);
|
||||
}
|
||||
|
||||
if (tempFileName.length() > 0) {
|
||||
File tempFile = new File(tempFileName);
|
||||
if (!tempFile.delete()) {
|
||||
ActiveMQServerLogger.LOGGER.couldNotDeleteTempFile(tempFileName);
|
||||
if (tempFileName != null) {
|
||||
try {
|
||||
// this is to make sure the large message is sent before we delete it
|
||||
// to avoid races
|
||||
session.commit();
|
||||
} catch (Throwable dontcare) {
|
||||
}
|
||||
if (!tempFileName.delete()) {
|
||||
ActiveMQServerLogger.LOGGER.couldNotDeleteTempFile(tempFileName.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -532,7 +536,8 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
}
|
||||
}
|
||||
|
||||
private void processMessageBody(final ICoreMessage message) throws XMLStreamException, IOException {
|
||||
private File processMessageBody(final ICoreMessage message) throws XMLStreamException, IOException {
|
||||
File tempFileName = null;
|
||||
boolean isLarge = false;
|
||||
|
||||
for (int i = 0; i < reader.getAttributeCount(); i++) {
|
||||
|
@ -546,11 +551,11 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
logger.debug("XMLStreamReader impl: " + reader);
|
||||
}
|
||||
if (isLarge) {
|
||||
tempFileName = UUID.randomUUID().toString() + ".tmp";
|
||||
tempFileName = File.createTempFile("largeMessage", ".tmp");
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Creating temp file " + tempFileName + " for large message.");
|
||||
}
|
||||
try (OutputStream out = new FileOutputStream(tempFileName)) {
|
||||
try (OutputStream out = new BufferedOutputStream(new FileOutputStream(tempFileName))) {
|
||||
getMessageBodyBytes(new MessageBodyBytesProcessor() {
|
||||
@Override
|
||||
public void processBodyBytes(byte[] bytes) throws IOException {
|
||||
|
@ -569,6 +574,8 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
return tempFileName;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue