You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2014/09/17 18:09:04 UTC
svn commit: r1625638 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/query/
oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/
oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/
oak-core/src/test/resourc...
Author: thomasm
Date: Wed Sep 17 16:09:04 2014
New Revision: 1625638
URL: http://svn.apache.org/r1625638
Log:
OAK-2050 Query engine: disable or restrict built-in full-text engine
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AbstractRepositoryTest.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakTarMKRepositoryStub.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrIndexQueryTestIT.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java Wed Sep 17 16:09:04 2014
@@ -31,10 +31,16 @@ public class QueryEngineSettings impleme
private static final int DEFAULT_QUERY_LIMIT_READS =
Integer.getInteger("oak.queryLimitReads", Integer.MAX_VALUE);
+ private static final boolean DEFAULT_FULL_TEXT_COMPARISON_WITHOUT_INDEX =
+ Boolean.getBoolean("oak.queryFullTextComparisonWithoutIndex");
+
private long limitInMemory = DEFAULT_QUERY_LIMIT_IN_MEMORY;
private long limitReads = DEFAULT_QUERY_LIMIT_READS;
+ private boolean fullTextComparisonWithoutIndex =
+ DEFAULT_FULL_TEXT_COMPARISON_WITHOUT_INDEX;
+
/**
* Get the limit on how many nodes a query may read at most into memory, for
* "order by" and "distinct" queries. If this limit is exceeded, the query
@@ -79,4 +85,12 @@ public class QueryEngineSettings impleme
this.limitReads = limitReads;
}
+ public void setFullTextComparisonWithoutIndex(boolean fullTextComparisonWithoutIndex) {
+ this.fullTextComparisonWithoutIndex = fullTextComparisonWithoutIndex;
+ }
+
+ public boolean getFullTextComparisonWithoutIndex() {
+ return fullTextComparisonWithoutIndex;
+ }
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java Wed Sep 17 16:09:04 2014
@@ -48,7 +48,7 @@ public class FullTextSearchImpl extends
* instead, as in the spec, using double quotes.
*/
public static final boolean JACKRABBIT_2_SINGLE_QUOTED_PHRASE = true;
-
+
private final String selectorName;
private final String relativePath;
private final String propertyName;
@@ -167,7 +167,10 @@ public class FullTextSearchImpl extends
}
return true;
}
-
+ // OAK-2050
+ if (!query.getSettings().getFullTextComparisonWithoutIndex()) {
+ return false;
+ }
StringBuilder buff = new StringBuilder();
if (relativePath == null && propertyName != null) {
PropertyValue p = selector.currentProperty(propertyName);
@@ -209,11 +212,21 @@ public class FullTextSearchImpl extends
private static void appendString(StringBuilder buff, PropertyValue p) {
if (p.isArray()) {
- for (String v : p.getValue(STRINGS)) {
- buff.append(v).append(' ');
+ if (p.getType() == Type.BINARIES) {
+ // OAK-2050: don't try to load binaries as this would
+ // run out of memory
+ } else {
+ for (String v : p.getValue(STRINGS)) {
+ buff.append(v).append(' ');
+ }
}
} else {
- buff.append(p.getValue(STRING)).append(' ');
+ if (p.getType() == Type.BINARY) {
+ // OAK-2050: don't try to load binaries as this would
+ // run out of memory
+ } else {
+ buff.append(p.getValue(STRING)).append(' ');
+ }
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java Wed Sep 17 16:09:04 2014
@@ -35,6 +35,7 @@ import org.apache.jackrabbit.oak.api.Typ
import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
import org.apache.jackrabbit.oak.query.AbstractQueryTest;
import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
+import org.junit.Ignore;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
@@ -64,6 +65,7 @@ public class TraversingIndexQueryTest ex
}
@Test
+ @Ignore("OAK-2050")
public void testFullTextTerm() throws Exception {
//OAK-1024 allow '/' in a full-text query
Tree node = root.getTree("/").addChild("content");
@@ -74,6 +76,7 @@ public class TraversingIndexQueryTest ex
}
@Test
+ @Ignore("OAK-2050")
public void testFullTextTermName() throws Exception {
Tree c = root.getTree("/").addChild("content");
c.addChild("testFullTextTermNameSimple");
Modified: jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt Wed Sep 17 16:09:04 2014
@@ -173,22 +173,6 @@ select [jcr:path]
commit / - "test"
-# fulltext search
-
-commit / + "test": { "name": "hello world" }
-
-select [jcr:path]
- from [nt:base]
- where contains(name, 'hello')
-/test
-
-select [jcr:path]
- from [nt:base]
- where contains(*, 'hello')
-/test
-
-commit / - "test"
-
# other tests
select [jcr:path]
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java Wed Sep 17 16:09:04 2014
@@ -43,6 +43,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
import org.apache.jackrabbit.oak.plugins.observation.CommitRateLimiter;
import org.apache.jackrabbit.oak.plugins.version.VersionEditorProvider;
+import org.apache.jackrabbit.oak.query.QueryEngineSettings;
import org.apache.jackrabbit.oak.security.SecurityProviderImpl;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.ConflictHandler;
@@ -184,6 +185,12 @@ public class Jcr {
this.commitRateLimiter = commitRateLimiter;
return this;
}
+
+ @Nonnull
+ public Jcr with(QueryEngineSettings qs) {
+ oak.with(qs);
+ return this;
+ }
public Repository createRepository() {
return new RepositoryImpl(
Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AbstractRepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AbstractRepositoryTest.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AbstractRepositoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AbstractRepositoryTest.java Wed Sep 17 16:09:04 2014
@@ -18,8 +18,6 @@ package org.apache.jackrabbit.oak.jcr;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.Set;
import javax.jcr.GuestCredentials;
@@ -32,6 +30,7 @@ import javax.jcr.security.Privilege;
import org.apache.jackrabbit.api.JackrabbitRepository;
import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
import org.apache.jackrabbit.oak.jcr.FixturesHelper.Fixture;
+import org.apache.jackrabbit.oak.query.QueryEngineSettings;
import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.junit.After;
@@ -105,8 +104,12 @@ public abstract class AbstractRepository
protected Repository getRepository() throws RepositoryException {
if (repository == null) {
nodeStore = createNodeStore(fixture);
+ QueryEngineSettings qs = new QueryEngineSettings();
+ qs.setFullTextComparisonWithoutIndex(true);
repository = new Jcr(nodeStore)
.withObservationQueueLength(observationQueueLength)
+ .withAsyncIndexing()
+ .with(qs)
.createRepository();
}
return repository;
Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakTarMKRepositoryStub.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakTarMKRepositoryStub.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakTarMKRepositoryStub.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakTarMKRepositoryStub.java Wed Sep 17 16:09:04 2014
@@ -33,6 +33,7 @@ import org.apache.jackrabbit.api.securit
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.query.QueryEngineSettings;
import org.apache.jackrabbit.test.NotExecutableException;
import org.apache.jackrabbit.test.RepositoryStub;
@@ -60,6 +61,9 @@ public class OakTarMKRepositoryStub exte
new File("target", "tarmk-" + System.currentTimeMillis());
this.store = new FileStore(directory, 1, false);
Jcr jcr = new Jcr(new Oak(new SegmentNodeStore(store)));
+ QueryEngineSettings qs = new QueryEngineSettings();
+ qs.setFullTextComparisonWithoutIndex(true);
+ jcr.with(qs);
preCreateRepository(jcr);
this.repository = jcr.createRepository();
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java Wed Sep 17 16:09:04 2014
@@ -69,6 +69,11 @@ public class LuceneIndexQueryTest extend
public void sql2() throws Exception {
test("sql2.txt");
}
+
+ @Test
+ public void sql2FullText() throws Exception {
+ test("sql2-fulltext.txt");
+ }
@Test
public void descendantTest() throws Exception {
Modified: jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrIndexQueryTestIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrIndexQueryTestIT.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrIndexQueryTestIT.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrIndexQueryTestIT.java Wed Sep 17 16:09:04 2014
@@ -92,6 +92,11 @@ public class SolrIndexQueryTestIT extend
public void sql2() throws Exception {
test("sql2.txt");
}
+
+ @Test
+ public void sql2FullText() throws Exception {
+ test("sql2-fulltext.txt");
+ }
@Test
@Ignore("OAK-420")