package com.mysema.luja.impl;
import static com.mysema.luja.QueryTestHelper.createDocument;
import static com.mysema.luja.QueryTestHelper.randomWords;
import java.io.File;
import java.io.IOException;
import org.apache.lucene.document.Document;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.aop.aspectj.annotation.AspectJProxyFactory;
import com.mysema.luja.LuceneSessionFactory;
import com.mysema.luja.LuceneTransactional;
/**
* Testing we can manage to release locks on the disk full situations
*
* @author laimw
*/
public class DiskFullTest {
LuceneSessionFactory sessionFactory;
interface Dao {
void addLotsOfData();
void addData();
}
class DaoImpl implements Dao {
long counter = 0;
@LuceneTransactional
public void addLotsOfData() {
for (int i = 0; i < 1000; i++) {
Document doc =
createDocument(
"" + counter++,
randomWords(100),
randomWords(100),
randomWords(1000),
1,
1);
sessionFactory.getCurrentSession().beginAppend().addDocument(doc);
}
}
@LuceneTransactional
public void addData() {
Document doc =
createDocument(
"" + counter++,
randomWords(100),
randomWords(100),
randomWords(1000),
1,
1);
sessionFactory.getCurrentSession().beginAppend().addDocument(doc);
}
}
@Test
@Ignore
public void diskFullTest() throws IOException {
String path = "dont_run_this_on_your_harddisk"; // "/Volumes/Cruzer/lucenetest";
Directory dir = FSDirectory.open(new File(path));
sessionFactory = new LuceneSessionFactoryImpl(dir);
AspectJProxyFactory factory = new AspectJProxyFactory(new DaoImpl());
factory.addAspect(new LuceneTransactionHandler());
Dao dao = factory.getProxy();
// Fill disk
try {
for (;;) {
dao.addLotsOfData();
}
} catch (Exception e) {
System.out.println("Got exception " + e.getCause().getMessage());
}
dao.addData();
}
}