Merged 1.4 to HEAD

svn merge svn://svn.alfresco.com:3691/alfresco/BRANCHES/V1.4@4228 svn://svn.alfresco.com:3691/alfresco/BRANCHES/V1.4@4229 .
   svn resolved root\projects\repository\source\java\org\alfresco\repo\search\impl\lucene\LuceneTest2.java
   svn resolved root\projects\repository\source\java\org\alfresco\repo\search\impl\lucene\LuceneTest2.java
   svn merge svn://svn.alfresco.com:3691/alfresco/BRANCHES/V1.4@4230 svn://svn.alfresco.com:3691/alfresco/BRANCHES/V1.4@4231 .
   svn merge svn://svn.alfresco.com:3691/alfresco/BRANCHES/V1.4@4233 svn://svn.alfresco.com:3691/alfresco/BRANCHES/V1.4@4234 .


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4632 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2006-12-18 13:01:01 +00:00
parent ff07ea1e7d
commit 08759fbe26
4 changed files with 668 additions and 80 deletions

View File

@@ -91,7 +91,7 @@ public class LuceneCategoryServiceImpl implements CategoryService
if (!mode.equals(Mode.ALL)) if (!mode.equals(Mode.ALL))
{ {
luceneQuery.append(mode.equals(Mode.SUB_CATEGORIES) ? "-" : "").append("PATH_WITH_REPEATS:\""); luceneQuery.append(mode.equals(Mode.SUB_CATEGORIES) ? "-" : "").append("PATH:\"");
luceneQuery.append(buildXPath(nodeService.getPath(categoryRef))).append("/"); luceneQuery.append(buildXPath(nodeService.getPath(categoryRef))).append("/");
if (depth.equals(Depth.ANY)) if (depth.equals(Depth.ANY))
{ {
@@ -102,7 +102,7 @@ public class LuceneCategoryServiceImpl implements CategoryService
if (!mode.equals(Mode.MEMBERS)) if (!mode.equals(Mode.MEMBERS))
{ {
luceneQuery.append("PATH_WITH_REPEATS:\""); luceneQuery.append("PATH:\"");
luceneQuery.append(buildXPath(nodeService.getPath(categoryRef))).append("/"); luceneQuery.append(buildXPath(nodeService.getPath(categoryRef))).append("/");
if (depth.equals(Depth.ANY)) if (depth.equals(Depth.ANY))
{ {
@@ -203,7 +203,7 @@ public class LuceneCategoryServiceImpl implements CategoryService
ResultSet resultSet = null; ResultSet resultSet = null;
try try
{ {
resultSet = indexerAndSearcher.getSearcher(storeRef, false).query(storeRef, "lucene", "PATH_WITH_REPEATS:\"/" + getPrefix(qname.getNamespaceURI()) + ISO9075.encode(qname.getLocalName()) + "\"", resultSet = indexerAndSearcher.getSearcher(storeRef, false).query(storeRef, "lucene", "PATH:\"/" + getPrefix(qname.getNamespaceURI()) + ISO9075.encode(qname.getLocalName()) + "\"",
null, null); null, null);
Set<NodeRef> nodeRefs = new HashSet<NodeRef>(resultSet.length()); Set<NodeRef> nodeRefs = new HashSet<NodeRef>(resultSet.length());
@@ -228,7 +228,7 @@ public class LuceneCategoryServiceImpl implements CategoryService
ResultSet resultSet = null; ResultSet resultSet = null;
try try
{ {
resultSet = indexerAndSearcher.getSearcher(storeRef, false).query(storeRef, "lucene", "PATH_WITH_REPEATS:\"//cm:categoryRoot/*\"", null, null); resultSet = indexerAndSearcher.getSearcher(storeRef, false).query(storeRef, "lucene", "PATH:\"//cm:categoryRoot/*\"", null, null);
return resultSetToChildAssocCollection(resultSet); return resultSetToChildAssocCollection(resultSet);
} }
finally finally

View File

@@ -568,11 +568,11 @@ public class LuceneCategoryTest2 extends TestCase
result = impl.getChildren(catACBase , CategoryService.Mode.MEMBERS, CategoryService.Depth.ANY); result = impl.getChildren(catACBase , CategoryService.Mode.MEMBERS, CategoryService.Depth.ANY);
assertEquals(18, result.size()); assertEquals(14, result.size());
result = impl.getChildren(catACBase , CategoryService.Mode.ALL, CategoryService.Depth.ANY); result = impl.getChildren(catACBase , CategoryService.Mode.ALL, CategoryService.Depth.ANY);
assertEquals(21, result.size()); assertEquals(17, result.size());
result = impl.getChildren(catACBase , CategoryService.Mode.SUB_CATEGORIES, CategoryService.Depth.ANY); result = impl.getChildren(catACBase , CategoryService.Mode.SUB_CATEGORIES, CategoryService.Depth.ANY);
@@ -580,7 +580,7 @@ public class LuceneCategoryTest2 extends TestCase
result = impl.getClassifications(rootNodeRef.getStoreRef()); result = impl.getClassifications(rootNodeRef.getStoreRef());
assertEquals(4, result.size()); assertEquals(2, result.size());
result = impl.getCategories(rootNodeRef.getStoreRef(), QName.createQName(TEST_NAMESPACE, "AssetClass"), CategoryService.Depth.IMMEDIATE); result = impl.getCategories(rootNodeRef.getStoreRef(), QName.createQName(TEST_NAMESPACE, "AssetClass"), CategoryService.Depth.IMMEDIATE);
@@ -612,10 +612,10 @@ public class LuceneCategoryTest2 extends TestCase
assertEquals(1, categoryService.getChildren(catACBase , CategoryService.Mode.MEMBERS, CategoryService.Depth.IMMEDIATE).size()); assertEquals(1, categoryService.getChildren(catACBase , CategoryService.Mode.MEMBERS, CategoryService.Depth.IMMEDIATE).size());
assertEquals(2, categoryService.getChildren(catACBase , CategoryService.Mode.SUB_CATEGORIES, CategoryService.Depth.IMMEDIATE).size()); assertEquals(2, categoryService.getChildren(catACBase , CategoryService.Mode.SUB_CATEGORIES, CategoryService.Depth.IMMEDIATE).size());
assertEquals(3, categoryService.getChildren(catACBase , CategoryService.Mode.ALL, CategoryService.Depth.IMMEDIATE).size()); assertEquals(3, categoryService.getChildren(catACBase , CategoryService.Mode.ALL, CategoryService.Depth.IMMEDIATE).size());
assertEquals(18, categoryService.getChildren(catACBase , CategoryService.Mode.MEMBERS, CategoryService.Depth.ANY).size()); assertEquals(14, categoryService.getChildren(catACBase , CategoryService.Mode.MEMBERS, CategoryService.Depth.ANY).size());
assertEquals(3, categoryService.getChildren(catACBase , CategoryService.Mode.SUB_CATEGORIES, CategoryService.Depth.ANY).size()); assertEquals(3, categoryService.getChildren(catACBase , CategoryService.Mode.SUB_CATEGORIES, CategoryService.Depth.ANY).size());
assertEquals(21, categoryService.getChildren(catACBase , CategoryService.Mode.ALL, CategoryService.Depth.ANY).size()); assertEquals(17, categoryService.getChildren(catACBase , CategoryService.Mode.ALL, CategoryService.Depth.ANY).size());
assertEquals(4, categoryService.getClassifications(rootNodeRef.getStoreRef()).size()); assertEquals(2, categoryService.getClassifications(rootNodeRef.getStoreRef()).size());
assertEquals(2, categoryService.getCategories(rootNodeRef.getStoreRef(), QName.createQName(TEST_NAMESPACE, "AssetClass"), CategoryService.Depth.IMMEDIATE).size()); assertEquals(2, categoryService.getCategories(rootNodeRef.getStoreRef(), QName.createQName(TEST_NAMESPACE, "AssetClass"), CategoryService.Depth.IMMEDIATE).size());
assertEquals(3, categoryService.getCategories(rootNodeRef.getStoreRef(), QName.createQName(TEST_NAMESPACE, "AssetClass"), CategoryService.Depth.ANY).size()); assertEquals(3, categoryService.getCategories(rootNodeRef.getStoreRef(), QName.createQName(TEST_NAMESPACE, "AssetClass"), CategoryService.Depth.ANY).size());
assertEquals(6, categoryService.getClassificationAspects().size()); assertEquals(6, categoryService.getClassificationAspects().size());

View File

@@ -383,6 +383,9 @@ public class LuceneIndexerImpl2 extends LuceneBase2 implements LuceneIndexer2
checkAbleToDoWork(false, true); checkAbleToDoWork(false, true);
try try
{ {
// The requires a reindex - a delete may remove too much from under this node - that also lives under
// other nodes via secondary associations. All the nodes below require reindex.
// This is true if the deleted node is via secondary or primary assoc.
delete(relationshipRef.getChildRef()); delete(relationshipRef.getChildRef());
} }
catch (LuceneIndexException e) catch (LuceneIndexException e)
@@ -942,6 +945,8 @@ public class LuceneIndexerImpl2 extends LuceneBase2 implements LuceneIndexer2
Set<NodeRef> set = deleteImpl(command.nodeRef, false, true, mainReader); Set<NodeRef> set = deleteImpl(command.nodeRef, false, true, mainReader);
// Remove any pending indexes // Remove any pending indexes
forIndex.removeAll(set); forIndex.removeAll(set);
// Add the leaf nodes for reindex
forIndex.addAll(set);
} }
} }
commandList.clear(); commandList.clear();
@@ -995,24 +1000,38 @@ public class LuceneIndexerImpl2 extends LuceneBase2 implements LuceneIndexer2
getDeltaReader(); getDeltaReader();
// outputTime("Delete "+nodeRef+" size = "+getDeltaWriter().docCount()); // outputTime("Delete "+nodeRef+" size = "+getDeltaWriter().docCount());
Set<NodeRef> refs = new LinkedHashSet<NodeRef>(); Set<NodeRef> refs = new LinkedHashSet<NodeRef>();
Set<NodeRef> temp = null;
refs.addAll(deleteContainerAndBelow(nodeRef, getDeltaReader(), true, cascade)); if (forReindex)
refs.addAll(deleteContainerAndBelow(nodeRef, mainReader, false, cascade));
if (!forReindex)
{ {
Set<NodeRef> leafrefs = new LinkedHashSet<NodeRef>(); temp = deleteContainerAndBelow(nodeRef, getDeltaReader(), true, cascade);
refs.addAll(temp);
leafrefs.addAll(deletePrimary(refs, getDeltaReader(), true)); deletions.addAll(temp);
leafrefs.addAll(deletePrimary(refs, mainReader, false)); temp = deleteContainerAndBelow(nodeRef, mainReader, false, cascade);
refs.addAll(temp);
leafrefs.addAll(deleteReference(refs, getDeltaReader(), true)); deletions.addAll(temp);
leafrefs.addAll(deleteReference(refs, mainReader, false));
refs.addAll(leafrefs);
} }
else
{
// Delete all and reindex as they could be secondary links we have deleted and they need to be updated.
// Most will skip any indexing as they will really have gone.
temp = deleteContainerAndBelow(nodeRef, getDeltaReader(), true, cascade);
deletions.addAll(temp);
refs.addAll(temp);
temp = deleteContainerAndBelow(nodeRef, mainReader, false, cascade);
deletions.addAll(temp);
refs.addAll(temp);
deletions.addAll(refs); Set<NodeRef> leafrefs = new LinkedHashSet<NodeRef>();
leafrefs.addAll(deletePrimary(deletions, getDeltaReader(), true));
leafrefs.addAll(deletePrimary(deletions, mainReader, false));
// May not have to delete references
leafrefs.addAll(deleteReference(deletions, getDeltaReader(), true));
leafrefs.addAll(deleteReference(deletions, mainReader, false));
refs.addAll(leafrefs);
deletions.addAll(leafrefs);
}
return refs; return refs;

View File

@@ -58,6 +58,7 @@ import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MLText; import org.alfresco.service.cmr.repository.MLText;
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.Path; import org.alfresco.service.cmr.repository.Path;
@@ -188,6 +189,7 @@ public class LuceneTest2 extends TestCase
queryRegisterComponent = (QueryRegisterComponent) ctx.getBean("queryRegisterComponent"); queryRegisterComponent = (QueryRegisterComponent) ctx.getBean("queryRegisterComponent");
namespacePrefixResolver = (DictionaryNamespaceComponent) ctx.getBean("namespaceService"); namespacePrefixResolver = (DictionaryNamespaceComponent) ctx.getBean("namespaceService");
indexerAndSearcher = (LuceneIndexerAndSearcher) ctx.getBean("luceneIndexerAndSearcherFactory"); indexerAndSearcher = (LuceneIndexerAndSearcher) ctx.getBean("luceneIndexerAndSearcherFactory");
((LuceneIndexerAndSearcherFactory2)indexerAndSearcher).setMaxAtomicTransformationTime(1000000);
transactionService = (TransactionService) ctx.getBean("transactionComponent"); transactionService = (TransactionService) ctx.getBean("transactionComponent");
serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY); serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
@@ -389,9 +391,9 @@ public class LuceneTest2 extends TestCase
super(arg0); super(arg0);
} }
public void firstTest() throws Exception public void testFirst() throws Exception
{ {
testSort(); testReadAgainstDelta();
} }
public void test0() throws Exception public void test0() throws Exception
@@ -402,16 +404,505 @@ public class LuceneTest2 extends TestCase
luceneFTS.resume(); luceneFTS.resume();
} }
public void testDeleteSecondaryAssocToContainer() throws Exception
{
luceneFTS.pause();
testTX.commit();
testTX = transactionService.getUserTransaction();
testTX.begin();
runBaseTests();
nodeService.removeChild(n2, n13);
testTX.commit();
testTX = transactionService.getUserTransaction();
testTX.begin();
LuceneSearcherImpl2 searcher = LuceneSearcherImpl2.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher);
searcher.setNodeService(nodeService);
searcher.setDictionaryService(dictionaryService);
searcher.setNamespacePrefixResolver(getNamespacePrefixReolsver("namespace"));
ResultSet results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:three\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:four\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:eight-0\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:five\"", null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:one\"", null,
null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:two\"", null,
null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:one\"", null,
null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:two\"", null,
null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:five\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:six\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:seven\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:eight-1\"",
null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:eight-2\"",
null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:eight-2\"",
null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:eight-1\"",
null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:eight-0\"",
null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:eight-0\"",
null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:nine\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:ten\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:eleven\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve/namespace:thirteen\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve/namespace:thirteen/namespace:fourteen\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve/namespace:thirteen/namespace:common\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:two/namespace:link\"", null,
null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve/namespace:common\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*/namespace:*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/namespace:*/namespace:*\"",
null, null);
assertEquals(7, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*/namespace:five\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*/namespace:*/namespace:*\"",
null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/namespace:*/namespace:*/namespace:*\"",
null, null);
assertEquals(6, results.length());
results.close();
results = searcher
.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:*\"", null, null);
assertEquals(4, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:*/namespace:five/namespace:*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:*/namespace:nine\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/*/*\"", null, null);
assertEquals(7, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/namespace:five\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/*/*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/*\"", null, null);
assertEquals(4, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/namespace:five/*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/*/namespace:nine\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//.\"", null, null);
assertEquals(15, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//.\"", null, null);
assertEquals(23, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*\"", null, null);
assertEquals(14, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*\"", null, null);
assertEquals(22, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/.\"", null, null);
assertEquals(14, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/.\"", null, null);
assertEquals(22, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/./.\"", null, null);
assertEquals(14, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/./.\"", null, null);
assertEquals(22, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//./*\"", null, null);
assertEquals(14, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//./*\"", null, null);
assertEquals(22, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//././*/././.\"", null, null);
assertEquals(14, results.length());
results.close();
results = searcher
.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//././*/././.\"", null, null);
assertEquals(22, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//common\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//common\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//*\"", null, null);
assertEquals(6, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//*\"", null, null);
assertEquals(9, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//.\"", null, null);
assertEquals(7, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//five/nine\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//thirteen/fourteen\"", null, null);
assertEquals(1, results.length());
results.close();
luceneFTS.resume();
}
public void testDeleteSecondaryAssocToLeaf() throws Exception
{
luceneFTS.pause();
testTX.commit();
testTX = transactionService.getUserTransaction();
testTX.begin();
runBaseTests();
nodeService.removeChild(n12, n14);
testTX.commit();
testTX = transactionService.getUserTransaction();
testTX.begin();
LuceneSearcherImpl2 searcher = LuceneSearcherImpl2.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher);
searcher.setNodeService(nodeService);
searcher.setDictionaryService(dictionaryService);
searcher.setNamespacePrefixResolver(getNamespacePrefixReolsver("namespace"));
ResultSet results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:three\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:four\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:eight-0\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:five\"", null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:one\"", null,
null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:two\"", null,
null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:one\"", null,
null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:two\"", null,
null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:five\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:six\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:seven\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:eight-1\"",
null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:eight-2\"",
null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:eight-2\"",
null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:eight-1\"",
null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two/namespace:eight-0\"",
null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:eight-0\"",
null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:nine\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:ten\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:eleven\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve/namespace:thirteen\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve/namespace:thirteen/namespace:fourteen\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve/namespace:thirteen/namespace:common\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve/namespace:common\"", null, null);
assertEquals(0, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*/namespace:*\"", null, null);
assertEquals(6, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/namespace:*/namespace:*\"",
null, null);
assertEquals(8, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*/namespace:five\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*/namespace:*/namespace:*\"",
null, null);
assertEquals(5, results.length());
results.close();
results = searcher
.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:*\"", null, null);
assertEquals(4, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:*/namespace:five/namespace:*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:*/namespace:nine\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/*\"", null, null);
assertEquals(6, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/*/*\"", null, null);
assertEquals(8, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/namespace:five\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/*/*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/*\"", null, null);
assertEquals(4, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/namespace:five/*\"", null, null);
assertEquals(5, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/*/namespace:nine\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//.\"", null, null);
assertEquals(15, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//.\"", null, null);
assertEquals(25, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*\"", null, null);
assertEquals(14, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*\"", null, null);
assertEquals(24, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/.\"", null, null);
assertEquals(14, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/.\"", null, null);
assertEquals(24, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/./.\"", null, null);
assertEquals(14, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/./.\"", null, null);
assertEquals(24, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//./*\"", null, null);
assertEquals(14, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//./*\"", null, null);
assertEquals(24, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//././*/././.\"", null, null);
assertEquals(14, results.length());
results.close();
results = searcher
.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//././*/././.\"", null, null);
assertEquals(24, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//common\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//common\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//*\"", null, null);
assertEquals(6, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//*\"", null, null);
assertEquals(8, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//.\"", null, null);
assertEquals(7, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//five/nine\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//thirteen/fourteen\"", null, null);
assertEquals(1, results.length());
results.close();
luceneFTS.resume();
}
public void testDeleteIssue() throws Exception public void testDeleteIssue() throws Exception
{ {
testTX.commit(); testTX.commit();
UserTransaction tx = transactionService.getUserTransaction(); testTX = transactionService.getUserTransaction();
tx.begin(); testTX.begin();
ChildAssociationRef testFind = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName ChildAssociationRef testFind = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName
.createQName("{namespace}testFind"), testSuperType); .createQName("{namespace}testFind"), testSuperType);
tx.commit(); testTX.commit();
LuceneSearcherImpl2 searcher = LuceneSearcherImpl2.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher); LuceneSearcherImpl2 searcher = LuceneSearcherImpl2.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher);
searcher.setNodeService(nodeService); searcher.setNodeService(nodeService);
@@ -456,11 +947,13 @@ public class LuceneTest2 extends TestCase
luceneFTS.pause(); luceneFTS.pause();
testTX.commit(); testTX.commit();
UserTransaction tx = transactionService.getUserTransaction(); testTX = transactionService.getUserTransaction();
tx.begin(); testTX.begin();
ChildAssociationRef testFind = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName ChildAssociationRef testFind = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName
.createQName("{namespace}testFind"), testSuperType); .createQName("{namespace}testFind"), testSuperType);
tx.commit(); testTX.commit();
testTX = transactionService.getUserTransaction();
testTX.begin();
LuceneSearcherImpl2 searcher = LuceneSearcherImpl2.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher); LuceneSearcherImpl2 searcher = LuceneSearcherImpl2.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher);
searcher.setNodeService(nodeService); searcher.setNodeService(nodeService);
@@ -471,7 +964,8 @@ public class LuceneTest2 extends TestCase
ResultSet results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "QNAME:\"namespace:testFind\""); ResultSet results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "QNAME:\"namespace:testFind\"");
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
testTX.commit();
Thread runner = null; Thread runner = null;
for (int i = 0; i < 20; i++) for (int i = 0; i < 20; i++)
@@ -492,12 +986,12 @@ public class LuceneTest2 extends TestCase
} }
} }
UserTransaction tx3 = transactionService.getUserTransaction(); testTX = transactionService.getUserTransaction();
tx3.begin(); testTX.begin();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "QNAME:\"namespace:testFind\""); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "QNAME:\"namespace:testFind\"");
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
tx3.commit(); testTX.commit();
} }
class Nester extends Thread class Nester extends Thread
@@ -545,7 +1039,6 @@ public class LuceneTest2 extends TestCase
catch (Exception e) catch (Exception e)
{ {
e.printStackTrace(); e.printStackTrace();
System.exit(12);
} }
finally finally
{ {
@@ -571,12 +1064,12 @@ public class LuceneTest2 extends TestCase
final NodeService pns = (NodeService) ctx.getBean("NodeService"); final NodeService pns = (NodeService) ctx.getBean("NodeService");
testTX.commit(); testTX.commit();
UserTransaction tx = transactionService.getUserTransaction(); testTX = transactionService.getUserTransaction();
tx.begin(); testTX.begin();
luceneFTS.pause(); luceneFTS.pause();
buildBaseIndex(); buildBaseIndex();
runBaseTests(); runBaseTests();
tx.commit(); testTX.commit();
Thread thread = new Thread(new Runnable() Thread thread = new Thread(new Runnable()
{ {
@@ -635,8 +1128,8 @@ public class LuceneTest2 extends TestCase
thread.start(); thread.start();
thread.join(); thread.join();
tx = transactionService.getUserTransaction(); testTX = transactionService.getUserTransaction();
tx.begin(); testTX.begin();
SearchParameters sp = new SearchParameters(); SearchParameters sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef()); sp.addStore(rootNodeRef.getStoreRef());
@@ -691,7 +1184,7 @@ public class LuceneTest2 extends TestCase
assertEquals(15, results.length()); assertEquals(15, results.length());
results.close(); results.close();
tx.rollback(); testTX.rollback();
} }
@@ -1146,7 +1639,7 @@ public class LuceneTest2 extends TestCase
luceneFTS.pause(); luceneFTS.pause();
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis() + "_1", indexerAndSearcher); + System.currentTimeMillis() + "_1", indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);
@@ -1169,6 +1662,7 @@ public class LuceneTest2 extends TestCase
luceneFTS.pause(); luceneFTS.pause();
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis() + "_1", indexerAndSearcher); + System.currentTimeMillis() + "_1", indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
@@ -1361,6 +1855,7 @@ public class LuceneTest2 extends TestCase
{ {
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis() + "_" + (new Random().nextInt()), indexerAndSearcher); + System.currentTimeMillis() + "_" + (new Random().nextInt()), indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);
@@ -1513,6 +2008,15 @@ public class LuceneTest2 extends TestCase
null); null);
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve/namespace:thirteen/namespace:common\"", null,
null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
"PATH:\"/namespace:one/namespace:five/namespace:twelve/namespace:common\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*\"", null, null); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*\"", null, null);
assertEquals(5, results.length()); assertEquals(5, results.length());
results.close(); results.close();
@@ -2483,6 +2987,7 @@ public class LuceneTest2 extends TestCase
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis(), indexerAndSearcher); + System.currentTimeMillis(), indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);
@@ -2513,23 +3018,27 @@ public class LuceneTest2 extends TestCase
public void testDeleteLeaf() throws Exception public void testDeleteLeaf() throws Exception
{ {
testTX.commit();
testTX = transactionService.getUserTransaction();
testTX.begin();
luceneFTS.pause();
buildBaseIndex();
runBaseTests();
testTX.commit();
// Delete
testTX = transactionService.getUserTransaction();
testTX.begin();
luceneFTS.pause(); luceneFTS.pause();
buildBaseIndex(); buildBaseIndex();
runBaseTests(); runBaseTests();
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" nodeService.deleteNode(n14);
+ System.currentTimeMillis(), indexerAndSearcher); testTX.commit();
indexer.setNodeService(nodeService); testTX = transactionService.getUserTransaction();
// indexer.setLuceneIndexLock(luceneIndexLock); testTX.begin();
indexer.setDictionaryService(dictionaryService);
indexer.setLuceneFullTextSearchIndexer(luceneFTS);
indexer.setContentService(contentService);
indexer
.deleteNode(new ChildAssociationRef(ASSOC_TYPE_QNAME, n13, QName.createQName("{namespace}fourteen"),
n14));
indexer.commit();
LuceneSearcherImpl2 searcher = LuceneSearcherImpl2.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher); LuceneSearcherImpl2 searcher = LuceneSearcherImpl2.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher);
searcher.setNodeService(nodeService); searcher.setNodeService(nodeService);
@@ -2756,6 +3265,7 @@ public class LuceneTest2 extends TestCase
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis(), indexerAndSearcher); + System.currentTimeMillis(), indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);
@@ -2788,6 +3298,7 @@ public class LuceneTest2 extends TestCase
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis(), indexerAndSearcher); + System.currentTimeMillis(), indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);
@@ -2812,9 +3323,13 @@ public class LuceneTest2 extends TestCase
public void testDeleteContainer() throws Exception public void testDeleteContainer() throws Exception
{ {
testTX.commit();
testTX = transactionService.getUserTransaction();
testTX.begin();
luceneFTS.pause(); luceneFTS.pause();
buildBaseIndex(); buildBaseIndex();
runBaseTests(); runBaseTests();
testTX.commit();
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis(), indexerAndSearcher); + System.currentTimeMillis(), indexerAndSearcher);
@@ -2824,11 +3339,17 @@ public class LuceneTest2 extends TestCase
indexer.setLuceneFullTextSearchIndexer(luceneFTS); indexer.setLuceneFullTextSearchIndexer(luceneFTS);
indexer.setContentService(contentService); indexer.setContentService(contentService);
indexer testTX = transactionService.getUserTransaction();
.deleteNode(new ChildAssociationRef(ASSOC_TYPE_QNAME, n12, QName.createQName("{namespace}thirteen"), testTX.begin();
n13));
indexer.commit(); luceneFTS.pause();
buildBaseIndex();
runBaseTests();
nodeService.deleteNode(n13);
testTX.commit();
testTX = transactionService.getUserTransaction();
testTX.begin();
LuceneSearcherImpl2 searcher = LuceneSearcherImpl2.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher); LuceneSearcherImpl2 searcher = LuceneSearcherImpl2.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher);
searcher.setNodeService(nodeService); searcher.setNodeService(nodeService);
@@ -3056,6 +3577,7 @@ public class LuceneTest2 extends TestCase
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis(), indexerAndSearcher); + System.currentTimeMillis(), indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);
@@ -3299,6 +3821,7 @@ public class LuceneTest2 extends TestCase
indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" + System.currentTimeMillis(), indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" + System.currentTimeMillis(),
indexerAndSearcher); indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);
@@ -3343,6 +3866,7 @@ public class LuceneTest2 extends TestCase
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis(), indexerAndSearcher); + System.currentTimeMillis(), indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);
@@ -3412,6 +3936,7 @@ public class LuceneTest2 extends TestCase
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis() + "_" + (new Random().nextInt()), indexerAndSearcher); + System.currentTimeMillis() + "_" + (new Random().nextInt()), indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);
@@ -3491,6 +4016,7 @@ public class LuceneTest2 extends TestCase
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis() + "_" + (new Random().nextInt()), indexerAndSearcher); + System.currentTimeMillis() + "_" + (new Random().nextInt()), indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);
@@ -3615,21 +4141,22 @@ public class LuceneTest2 extends TestCase
public void testReadAgainstDelta() throws Exception public void testReadAgainstDelta() throws Exception
{ {
testTX.commit(); testTX.commit();
UserTransaction tx = transactionService.getUserTransaction(); testTX = transactionService.getUserTransaction();
tx.begin(); testTX.begin();
luceneFTS.pause(); luceneFTS.pause();
buildBaseIndex(); buildBaseIndex();
runBaseTests(); runBaseTests();
tx.commit(); testTX.commit();
// Delete // Delete
tx = transactionService.getUserTransaction(); testTX = transactionService.getUserTransaction();
tx.begin(); testTX.begin();
runBaseTests(); runBaseTests();
serviceRegistry.getNodeService().deleteNode(n1); serviceRegistry.getNodeService().deleteNode(n1);
assertFalse(serviceRegistry.getNodeService().exists(n13));
SearchParameters sp = new SearchParameters(); SearchParameters sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef()); sp.addStore(rootNodeRef.getStoreRef());
@@ -3637,7 +4164,7 @@ public class LuceneTest2 extends TestCase
sp.setQuery("PATH:\"//.\""); sp.setQuery("PATH:\"//.\"");
sp.excludeDataInTheCurrentTransaction(false); sp.excludeDataInTheCurrentTransaction(false);
ResultSet results = serviceRegistry.getSearchService().query(sp); ResultSet results = serviceRegistry.getSearchService().query(sp);
assertEquals(5, results.length()); assertEquals(6, results.length());
results.close(); results.close();
sp = new SearchParameters(); sp = new SearchParameters();
@@ -3649,7 +4176,48 @@ public class LuceneTest2 extends TestCase
assertEquals(15, results.length()); assertEquals(15, results.length());
results.close(); results.close();
tx.rollback(); testTX.rollback();
sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef());
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.setQuery("PATH:\"//.\"");
sp.addSort("ID", true);
sp.excludeDataInTheCurrentTransaction(false);
results = serviceRegistry.getSearchService().query(sp);
assertEquals(15, results.length());
results.close();
// Delete
testTX = transactionService.getUserTransaction();
testTX.begin();
runBaseTests();
serviceRegistry.getNodeService().deleteNode(n2);
assertTrue(serviceRegistry.getNodeService().exists(n13));
assertFalse(serviceRegistry.getNodeService().exists(n7));
sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef());
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.setQuery("PATH:\"//.\"");
sp.excludeDataInTheCurrentTransaction(false);
results = serviceRegistry.getSearchService().query(sp);
assertEquals(12, results.length());
results.close();
sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef());
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.setQuery("PATH:\"//.\"");
sp.excludeDataInTheCurrentTransaction(true);
results = serviceRegistry.getSearchService().query(sp);
assertEquals(15, results.length());
results.close();
testTX.rollback();
sp = new SearchParameters(); sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef()); sp.addStore(rootNodeRef.getStoreRef());
@@ -3663,8 +4231,8 @@ public class LuceneTest2 extends TestCase
// Create // Create
tx = transactionService.getUserTransaction(); testTX = transactionService.getUserTransaction();
tx.begin(); testTX.begin();
runBaseTests(); runBaseTests();
@@ -3682,7 +4250,7 @@ public class LuceneTest2 extends TestCase
assertEquals(16, results.length()); assertEquals(16, results.length());
results.close(); results.close();
tx.rollback(); testTX.rollback();
sp = new SearchParameters(); sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef()); sp.addStore(rootNodeRef.getStoreRef());
@@ -3696,8 +4264,8 @@ public class LuceneTest2 extends TestCase
// update property // update property
tx = transactionService.getUserTransaction(); testTX = transactionService.getUserTransaction();
tx.begin(); testTX.begin();
runBaseTests(); runBaseTests();
@@ -3725,7 +4293,7 @@ public class LuceneTest2 extends TestCase
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
tx.rollback(); testTX.rollback();
sp = new SearchParameters(); sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef()); sp.addStore(rootNodeRef.getStoreRef());
@@ -3740,8 +4308,8 @@ public class LuceneTest2 extends TestCase
// Add and delete // Add and delete
tx = transactionService.getUserTransaction(); testTX = transactionService.getUserTransaction();
tx.begin(); testTX.begin();
runBaseTests(); runBaseTests();
@@ -3753,7 +4321,7 @@ public class LuceneTest2 extends TestCase
sp.setQuery("PATH:\"//.\""); sp.setQuery("PATH:\"//.\"");
sp.excludeDataInTheCurrentTransaction(false); sp.excludeDataInTheCurrentTransaction(false);
results = serviceRegistry.getSearchService().query(sp); results = serviceRegistry.getSearchService().query(sp);
assertEquals(5, results.length()); assertEquals(6, results.length());
results.close(); results.close();
sp = new SearchParameters(); sp = new SearchParameters();
@@ -3774,7 +4342,7 @@ public class LuceneTest2 extends TestCase
sp.setQuery("PATH:\"//.\""); sp.setQuery("PATH:\"//.\"");
sp.excludeDataInTheCurrentTransaction(false); sp.excludeDataInTheCurrentTransaction(false);
results = serviceRegistry.getSearchService().query(sp); results = serviceRegistry.getSearchService().query(sp);
assertEquals(6, results.length()); assertEquals(7, results.length());
results.close(); results.close();
sp = new SearchParameters(); sp = new SearchParameters();
@@ -3794,7 +4362,7 @@ public class LuceneTest2 extends TestCase
sp.setQuery("PATH:\"//.\""); sp.setQuery("PATH:\"//.\"");
sp.excludeDataInTheCurrentTransaction(false); sp.excludeDataInTheCurrentTransaction(false);
results = serviceRegistry.getSearchService().query(sp); results = serviceRegistry.getSearchService().query(sp);
assertEquals(5, results.length()); assertEquals(6, results.length());
results.close(); results.close();
sp = new SearchParameters(); sp = new SearchParameters();
@@ -3806,7 +4374,7 @@ public class LuceneTest2 extends TestCase
assertEquals(15, results.length()); assertEquals(15, results.length());
results.close(); results.close();
tx.rollback(); testTX.rollback();
sp = new SearchParameters(); sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef()); sp.addStore(rootNodeRef.getStoreRef());
@@ -3824,6 +4392,7 @@ public class LuceneTest2 extends TestCase
{ {
LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta" LuceneIndexerImpl2 indexer = LuceneIndexerImpl2.getUpdateIndexer(rootNodeRef.getStoreRef(), "delta"
+ System.currentTimeMillis() + "_" + (new Random().nextInt()), indexerAndSearcher); + System.currentTimeMillis() + "_" + (new Random().nextInt()), indexerAndSearcher);
indexer.setMaxAtomicTransformationTime(1000000);
indexer.setNodeService(nodeService); indexer.setNodeService(nodeService);
// indexer.setLuceneIndexLock(luceneIndexLock); // indexer.setLuceneIndexLock(luceneIndexLock);
indexer.setDictionaryService(dictionaryService); indexer.setDictionaryService(dictionaryService);