You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Thomas Mueller (Jira)" <ji...@apache.org> on 2019/08/27 12:38:00 UTC
[jira] [Comment Edited] (OAK-8579) Composite Node Store: Allow
creating an index in the read-only repo first
[ https://issues.apache.org/jira/browse/OAK-8579?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16916605#comment-16916605 ]
Thomas Mueller edited comment on OAK-8579 at 8/27/19 12:37 PM:
---------------------------------------------------------------
Potential patch (need to run more tests):
{noformat}
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java (revision 1864607)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java (working copy)
@@ -30,6 +30,7 @@
import org.apache.jackrabbit.oak.spi.commit.Validator;
import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -172,7 +173,9 @@
@Override
public Validator childNodeAdded(String name, NodeState after)
throws CommitFailedException {
- checkValidName(name);
+ if (!NodeStateUtils.isHidden(name)) {
+ checkValidName(name);
+ }
return this;
}
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java (revision 1864607)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java (working copy)
@@ -475,6 +475,9 @@
}
if (!names.isEmpty()) {
for (String name : names) {
+ if (NodeStateUtils.isHidden(name)) {
+ continue;
+ }
NodeState child = after.getChildNode(name);
String primary = child.getName(JCR_PRIMARYTYPE);
Iterable<String> mixins = child.getNames(JCR_MIXINTYPES);
Index: oak-lucene/src/test/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreLuceneIndexTest.java
===================================================================
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreLuceneIndexTest.java (revision 1864609)
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreLuceneIndexTest.java (working copy)
@@ -103,20 +103,13 @@
}
/**
- * Given a composite node store , trying to create an index in read-write part
- * with the same index node already existing in the read only part already
- * we should get OakConstraint001 . This is the current behaviour,
- * but can be worked upon (improved) in the future .
+ * Given a composite node store , create an index in read-write part
+ * with the same index node already existing in the read-only part already.
*/
@Test
- public void tryAddIndexInReadWriteWithIndexExistinginReadOnly() {
- try {
- repoV1.setupIndexAndContentInRepo("luceneTest", "foo", true, VERSION_1);
- assertTrue(false);
- } catch (Exception e) {
- assert (e.getLocalizedMessage().contains(
- "OakConstraint0001: /oak:index/luceneTest/:oak:mount-readOnlyV1-index-data[[]]: The primary type null does not exist"));
- }
+ public void addIndexInReadWriteWithIndexExistinginReadOnly() throws Exception {
+ repoV1.setupIndexAndContentInRepo("luceneTest", "foo", true, VERSION_1);
+ repoV1.cleanup();
}
/**
{noformat}
was (Author: tmueller):
Potential patch (need to run more tests):
{noformat}
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java (revision 1864607)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java (working copy)
@@ -30,6 +30,7 @@
import org.apache.jackrabbit.oak.spi.commit.Validator;
import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -172,7 +173,9 @@
@Override
public Validator childNodeAdded(String name, NodeState after)
throws CommitFailedException {
- checkValidName(name);
+ if (!NodeStateUtils.isHidden(name)) {
+ checkValidName(name);
+ }
return this;
}
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java (revision 1864607)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditor.java (working copy)
@@ -475,6 +475,9 @@
}
if (!names.isEmpty()) {
for (String name : names) {
+ if (NodeStateUtils.isHidden(name)) {
+ continue;
+ }
NodeState child = after.getChildNode(name);
String primary = child.getName(JCR_PRIMARYTYPE);
Iterable<String> mixins = child.getNames(JCR_MIXINTYPES);
Index: oak-lucene/src/test/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreLuceneIndexTest.java
===================================================================
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreLuceneIndexTest.java (revision 1864609)
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreLuceneIndexTest.java (working copy)
@@ -109,14 +109,14 @@
* but can be worked upon (improved) in the future .
*/
@Test
- public void tryAddIndexInReadWriteWithIndexExistinginReadOnly() {
- try {
+ public void tryAddIndexInReadWriteWithIndexExistinginReadOnly() throws Exception {
+// try {
repoV1.setupIndexAndContentInRepo("luceneTest", "foo", true, VERSION_1);
- assertTrue(false);
- } catch (Exception e) {
- assert (e.getLocalizedMessage().contains(
- "OakConstraint0001: /oak:index/luceneTest/:oak:mount-readOnlyV1-index-data[[]]: The primary type null does not exist"));
- }
+// assertTrue(false);
+// } catch (Exception e) {
+// assert (e.getLocalizedMessage().contains(
+// "OakConstraint0001: /oak:index/luceneTest/:oak:mount-readOnlyV1-index-data[[]]: The primary type null does not exist"));
+// }
}
{noformat}
> Composite Node Store: Allow creating an index in the read-only repo first
> -------------------------------------------------------------------------
>
> Key: OAK-8579
> URL: https://issues.apache.org/jira/browse/OAK-8579
> Project: Jackrabbit Oak
> Issue Type: Improvement
> Components: composite, core, indexing, lucene
> Reporter: Thomas Mueller
> Priority: Major
>
> Currently, it is not allowed to first create a new index in the read-only repository, and then in the read-write repository. Trying to do so will fail with "OakConstraint0001: /oak:index/.../:oak:mount-readOnlyV1-index-data[[]]: The primary type null does not exist"
> See OAK-7917: oak-lucene/src/test/java/org/apache/jackrabbit/oak/composite - CompositeNodeStoreLuceneIndexTest.java tryAddIndexInReadWriteWithIndexExistinginReadOnly line 112.
> It would be better to allow this use case, to reduce the possibility of problems.
> We should specially test with lucene indexes, but also with property indexes. (If that's more complicated, we can concentrate on the lucene case first.)
--
This message was sent by Atlassian Jira
(v8.3.2#803003)