This closes #23 Fix for truncated files during crashes

This commit is contained in:
Clebert Suconic 2015-06-10 21:50:14 -04:00
commit 0e8eff7ef8
3 changed files with 39 additions and 7 deletions

View File

@ -375,18 +375,25 @@ public class JournalImpl extends JournalBase implements TestableJournal, Journal
{
SequentialFile file = fileFactory.createSequentialFile(fileName, filesRepository.getMaxAIO());
file.open(1, false);
try
if (file.size() >= SIZE_HEADER)
{
file.open(1, false);
JournalFileImpl jrnFile = readFileHeader(file);
try
{
JournalFileImpl jrnFile = readFileHeader(file);
orderedFiles.add(jrnFile);
orderedFiles.add(jrnFile);
}
finally
{
file.close();
}
}
finally
else
{
file.close();
ActiveMQJournalLogger.LOGGER.ignoringShortFile(fileName);
file.delete();
}
}

View File

@ -269,4 +269,8 @@ public interface ActiveMQJournalLogger extends BasicLogger
@Message(id = 144006, value = "IOError code {0}, {1}", format = Message.Format.MESSAGE_FORMAT)
void ioError(final int errorCode, final String errorMessage);
@LogMessage(level = Logger.Level.WARN)
@Message(id = 144007, value = "Ignoring journal file {0}: file is shorter then minimum header size. This file is being removed.", format = Message.Format.MESSAGE_FORMAT)
void ignoringShortFile(String fileName);
}

View File

@ -18,6 +18,7 @@ package org.apache.activemq.artemis.tests.unit.core.journal.impl;
import java.nio.ByteBuffer;
import java.util.List;
import java.io.File;
import org.apache.activemq.artemis.api.core.ActiveMQException;
import org.apache.activemq.artemis.api.core.ActiveMQIOErrorException;
@ -3222,6 +3223,26 @@ public abstract class JournalImplTestUnit extends JournalImplTestBase
}
@Test
public void testLoadTruncatedFile() throws Exception
{
setup(2, 2 * 1024, true);
createJournal();
startJournal();
String testDir = getTestDir();
new File(testDir + File.separator + filePrefix + "-1." + fileExtension).createNewFile();
try
{
load();
}
catch (Exception e)
{
Assert.fail("Unexpected exception: " + e.toString());
}
}
protected abstract int getAlignment();
}