Skip to content
Snippets Groups Projects
Commit be3d3bd2 authored by kaloyane's avatar kaloyane
Browse files

LMS=2255: queue persister should not break if the queue file is shorter than header size

SVN: 21444
parent a646d5f5
No related branches found
No related tags found
No related merge requests found
......@@ -143,7 +143,7 @@ public class RecordBasedQueuePersister<E> implements IQueuePersister<E>
try
{
this.randomAccessFile = new RandomAccessFile(queueFile, "rw");
if (randomAccessFile.length() == 0)
if (randomAccessFile.length() < HEADER_LENGTH)
{
this.recordSize = initialRecordSize;
writeFullHeader(randomAccessFile, firstRecord, lastRecord, initialRecordSize);
......
......@@ -17,6 +17,7 @@
package ch.systemsx.cisd.common.collections;
import java.io.File;
import java.io.RandomAccessFile;
import java.util.concurrent.ArrayBlockingQueue;
import org.testng.AssertJUnit;
......@@ -58,7 +59,7 @@ public class RecordBasedQueuePersisterTest extends AssertJUnit
public void testPersist()
{
String element =
"a string with more characters then "
"a string with more characters than "
+ "RecordBasedQueuePersister.DEFAULT_INITIAL_RECORD_SIZE";
assertEquals(true, element.length() > RecordBasedQueuePersister.DEFAULT_INITIAL_RECORD_SIZE);
queue.add(element);
......@@ -100,4 +101,29 @@ public class RecordBasedQueuePersisterTest extends AssertJUnit
assertEquals("", queue.poll());
assertEquals("foo", queue.poll());
}
@Test
public void testQueueFileSizeLessThanHeaderSize() throws Exception
{
assertEquals("Couldn't delete " + TMP, true, FileUtilities.deleteRecursively(TMP));
TMP.mkdirs();
queue = new ArrayBlockingQueue<String>(10);
// write a data shorter than header size
RandomAccessFile tooShortRaf = new RandomAccessFile(QUEUE_FILE, "rw");
tooShortRaf.writeInt(1);
tooShortRaf.close();
persister = new RecordBasedQueuePersister<String>(queue, QUEUE_FILE);
queue.add("test");
persister.persist();
persister.close();
queue.clear();
persister = new RecordBasedQueuePersister<String>(queue, QUEUE_FILE);
assertEquals(1, queue.size());
assertEquals("test", queue.poll());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment