ARTEMIS-1652 XmlDataImporter forgets delete tmp files
When using the tool to import more than one large messages from xml exported file, this utility class will create some tmp files, each for one large message. However it only delete one of the tmp files. All the rest of tmp files won't get cleaned up.
This commit is contained in:
parent
8fc8ae2add
commit
17db696e8b
|
@ -273,7 +273,7 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
|
||||
if (sort) {
|
||||
for (MessageTemp msgtmp : messages) {
|
||||
sendMessage(msgtmp.queues, msgtmp.message);
|
||||
sendMessage(msgtmp.queues, msgtmp.message, msgtmp.tempFileName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -354,9 +354,9 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
}
|
||||
|
||||
if (sort) {
|
||||
messages.add(new MessageTemp(id, queues, message));
|
||||
messages.add(new MessageTemp(id, queues, message, tempFileName));
|
||||
} else {
|
||||
sendMessage(queues, message);
|
||||
sendMessage(queues, message, tempFileName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -365,12 +365,14 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
long id;
|
||||
List<String> queues;
|
||||
Message message;
|
||||
String tempFileName;
|
||||
|
||||
MessageTemp(long id, List<String> queues, Message message) {
|
||||
MessageTemp(long id, List<String> queues, Message message, String tempFileName) {
|
||||
this.message = message;
|
||||
this.queues = queues;
|
||||
this.message = message;
|
||||
this.id = id;
|
||||
this.tempFileName = tempFileName;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -399,7 +401,7 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
return type;
|
||||
}
|
||||
|
||||
private void sendMessage(List<String> queues, Message message) throws Exception {
|
||||
private void sendMessage(List<String> queues, Message message, String tempFileName) throws Exception {
|
||||
StringBuilder logMessage = new StringBuilder();
|
||||
String destination = addressMap.get(queues.get(0));
|
||||
|
||||
|
@ -451,7 +453,6 @@ public final class XmlDataImporter extends ActionAbstract {
|
|||
if (!tempFile.delete()) {
|
||||
ActiveMQServerLogger.LOGGER.couldNotDeleteTempFile(tempFileName);
|
||||
}
|
||||
tempFileName = "";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ import javax.jms.Session;
|
|||
import javax.jms.TextMessage;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.EnumSet;
|
||||
|
@ -520,6 +521,92 @@ public class XmlImportExportTest extends ActiveMQTestBase {
|
|||
session.commit();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLargeMessagesNoTmpFiles() throws Exception {
|
||||
server = createServer(true);
|
||||
server.start();
|
||||
locator = createInVMNonHALocator();
|
||||
factory = createSessionFactory(locator);
|
||||
ClientSession session = factory.createSession(false, false);
|
||||
|
||||
LargeServerMessageImpl fileMessage = new LargeServerMessageImpl((JournalStorageManager) server.getStorageManager());
|
||||
|
||||
fileMessage.setMessageID(1005);
|
||||
fileMessage.setDurable(true);
|
||||
|
||||
for (int i = 0; i < 2 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE; i++) {
|
||||
fileMessage.addBytes(new byte[]{getSamplebyte(i)});
|
||||
}
|
||||
|
||||
fileMessage.putLongProperty(Message.HDR_LARGE_BODY_SIZE, 2 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE);
|
||||
|
||||
fileMessage.releaseResources();
|
||||
|
||||
session.createQueue("A", RoutingType.MULTICAST, "A", true);
|
||||
|
||||
ClientProducer prod = session.createProducer("A");
|
||||
|
||||
prod.send(fileMessage);
|
||||
prod.send(fileMessage);
|
||||
|
||||
fileMessage.deleteFile();
|
||||
|
||||
session.commit();
|
||||
|
||||
session.close();
|
||||
locator.close();
|
||||
server.stop();
|
||||
|
||||
ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream();
|
||||
XmlDataExporter xmlDataExporter = new XmlDataExporter();
|
||||
xmlDataExporter.process(xmlOutputStream, server.getConfiguration().getBindingsDirectory(), server.getConfiguration().getJournalDirectory(), server.getConfiguration().getPagingDirectory(), server.getConfiguration().getLargeMessagesDirectory());
|
||||
System.out.print(new String(xmlOutputStream.toByteArray()));
|
||||
|
||||
clearDataRecreateServerDirs();
|
||||
server.start();
|
||||
checkForLongs();
|
||||
locator = createInVMNonHALocator();
|
||||
factory = createSessionFactory(locator);
|
||||
session = factory.createSession(false, true, true);
|
||||
|
||||
ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlOutputStream.toByteArray());
|
||||
XmlDataImporter xmlDataImporter = new XmlDataImporter();
|
||||
xmlDataImporter.sort = true;
|
||||
xmlDataImporter.validate(xmlInputStream);
|
||||
xmlInputStream.reset();
|
||||
xmlDataImporter.process(xmlInputStream, session);
|
||||
session.close();
|
||||
session = factory.createSession(false, false);
|
||||
session.start();
|
||||
|
||||
ClientConsumer cons = session.createConsumer("A");
|
||||
|
||||
ClientMessage msg = cons.receive(CONSUMER_TIMEOUT);
|
||||
assertNotNull(msg);
|
||||
assertEquals(2 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, msg.getBodySize());
|
||||
|
||||
for (int i = 0; i < 2 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE; i++) {
|
||||
assertEquals(getSamplebyte(i), msg.getBodyBuffer().readByte());
|
||||
}
|
||||
msg = cons.receive(CONSUMER_TIMEOUT);
|
||||
assertNotNull(msg);
|
||||
assertEquals(2 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, msg.getBodySize());
|
||||
|
||||
for (int i = 0; i < 2 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE; i++) {
|
||||
assertEquals(getSamplebyte(i), msg.getBodyBuffer().readByte());
|
||||
}
|
||||
|
||||
msg.acknowledge();
|
||||
session.commit();
|
||||
|
||||
//make sure there is not tmp file left
|
||||
File workingDir = new File(System.getProperty("user.dir"));
|
||||
String[] flist = workingDir.list();
|
||||
for (String fn : flist) {
|
||||
assertFalse("leftover: " + fn, fn.endsWith(".tmp"));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLargeJmsTextMessage() throws Exception {
|
||||
basicSetUp();
|
||||
|
|
Loading…
Reference in New Issue