svn commit: r1858544 - in /jackrabbit/oak/trunk: oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/ oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/

2019-05-02 Thread catholicon
Author: catholicon
Date: Thu May  2 13:57:43 2019
New Revision: 1858544

URL: http://svn.apache.org/viewvc?rev=1858544=rev
Log:
OAK-8166: Index definition with orderable property definitions with and without 
functions breaks index

Committing fix contributed by Nitin Gupta (@nitigup).

Modified:

jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/FunctionIndexTest.java

jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/Aggregate.java

jackrabbit/oak/trunk/oak-search/src/main/java/org/apache/jackrabbit/oak/plugins/index/search/IndexDefinition.java

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/FunctionIndexTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/FunctionIndexTest.java?rev=1858544=1858543=1858544=diff
==
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/FunctionIndexTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/FunctionIndexTest.java
 Thu May  2 13:57:43 2019
@@ -35,6 +35,7 @@ import java.util.Set;
 
 import javax.jcr.PropertyType;
 
+import ch.qos.logback.classic.Level;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
@@ -42,6 +43,7 @@ import org.apache.jackrabbit.oak.api.Res
 import org.apache.jackrabbit.oak.api.ResultRow;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.junit.LogCustomizer;
 import 
org.apache.jackrabbit.oak.plugins.index.lucene.util.IndexDefinitionBuilder;
 import org.apache.jackrabbit.oak.plugins.index.nodetype.NodeTypeIndexProvider;
 import 
org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexEditorProvider;
@@ -54,6 +56,7 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
 import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.junit.Assert;
 import org.junit.Test;
 
 import com.google.common.collect.Iterables;
@@ -339,6 +342,228 @@ public class FunctionIndexTest extends A
 "lucene:test1(/oak:index/test1)", asList("/b", "/c", "/a"));
 }
 
+/*
+
+Given an index def with 2 orderable property definitions(Relative) for 
same property - one with function and one without
+Indexer should not fail to index the nodes covered by this index
+ */
+@Test
+public void sameOrderableRelativePropertyWithAndWithoutFunction() throws 
Exception {
+
+LogCustomizer customLogs = 
LogCustomizer.forLogger(LuceneIndexEditor.class.getName()).enable(Level.WARN).create();
+// Create nodes that will be served by the index definition that 
follows
+Tree test = root.getTree("/").addChild("test");
+test.setProperty("jcr:primaryType", "nt:unstructured", Type.NAME);
+
+Tree a = test.addChild("jcr:content");
+a.setProperty("jcr:primaryType", "nt:unstructured", Type.NAME);
+
+Tree b = a.addChild("n");
+
+b.setProperty("jcr:primaryType", "nt:unstructured", Type.NAME);
+b.setProperty("foo", "bar");
+
+root.commit();
+
+// Index def with same property - ordered - one with function and one 
without
+Tree luceneIndex = createIndex("upper", 
Collections.emptySet());
+Tree nonFunc = luceneIndex.addChild(FulltextIndexConstants.INDEX_RULES)
+.addChild("nt:unstructured")
+.addChild(FulltextIndexConstants.PROP_NODE)
+.addChild("foo");
+nonFunc.setProperty(FulltextIndexConstants.PROP_ORDERED,true);
+nonFunc.setProperty("name", "jcr:content/n/foo");
+
+Tree func = luceneIndex.getChild(FulltextIndexConstants.INDEX_RULES)
+.getChild("nt:unstructured")
+.getChild(FulltextIndexConstants.PROP_NODE)
+.addChild("testOak");
+func.setProperty(FulltextIndexConstants.PROP_ORDERED,true);
+func.setProperty(FulltextIndexConstants.PROP_FUNCTION, 
"fn:upper-case(jcr:content/n/@foo)");
+
+// Now do some change in the node that are covered by above index 
definition
+try {
+customLogs.starting();
+
root.getTree("/").getChild("test").getChild("jcr:content").getChild("n").setProperty("foo","bar2");
+root.commit();
+Assert.assertFalse(customLogs.getLogs().contains("Failed to index 
the node [/test]"));
+Assert.assertTrue(customLogs.getLogs().size() == 0);
+} finally {
+customLogs.finished();
+}
+
+}
+/*
+  

svn commit: r1858538 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/security/authorization/permission/ test/java/org/apache/jackrabbit/oak/security/authorization/permissi

2019-05-02 Thread angela
Author: angela
Date: Thu May  2 13:10:43 2019
New Revision: 1858538

URL: http://svn.apache.org/viewvc?rev=1858538=rev
Log:
OAK-8262 : CompiledPermissionImpl returns wrong type of TreePermission for 
child of permission store 

Added:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java
   (with props)

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermissonTest.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImplTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java?rev=1858538=1858537=1858538=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
 Thu May  2 13:10:43 2019
@@ -211,7 +211,7 @@ final class CompiledPermissionImpl imple
  return new TreePermissionImpl(tree, type, 
parentPermission);
 }
 case INTERNAL:
-return EMPTY;
+return InternalTreePermission.INSTANCE;
 default:
 return new TreePermissionImpl(tree, type, parentPermission);
 }
@@ -229,7 +229,7 @@ final class CompiledPermissionImpl imple
 TreeType type = typeProvider.getType(versionableTree);
 switch (type) {
 case HIDDEN : return ALL;
-case INTERNAL : return EMPTY;
+case INTERNAL : return InternalTreePermission.INSTANCE;
 // case VERSION is never expected here
 default:
 return new TreePermissionImpl(versionableTree, type, 
buildParentPermission(versionableTree));
@@ -460,6 +460,8 @@ final class CompiledPermissionImpl imple
 return ((TreePermissionImpl) parentPermission).type;
 } else if (parentPermission == TreePermission.EMPTY) {
 return TreeType.DEFAULT;
+} else if (parentPermission == InternalTreePermission.INSTANCE) {
+return TreeType.INTERNAL;
 } else if (parentPermission instanceof VersionTreePermission) {
 return TreeType.VERSION;
 } else if (parentPermission instanceof RepoPolicyTreePermission) {

Added: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java?rev=1858538=auto
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java
 Thu May  2 13:10:43 2019
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.security.authorization.permission;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;

svn commit: r1858534 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/security/principal/ test/java/org/apache/jackrabbit/oak/security/principal/ test/java/org/apache/jackr

2019-05-02 Thread angela
Author: angela
Date: Thu May  2 12:34:12 2019
New Revision: 1858534

URL: http://svn.apache.org/viewvc?rev=1858534=rev
Log:
OAK-8293 : PrincipalProviderImpl.findPrincipals my return null values in result 
iterator

Added:

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplErrorTest.java
   (with props)
Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImplTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderWithCacheTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java?rev=1858534=1858533=1858534=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java
 Thu May  2 12:34:12 2019
@@ -18,7 +18,6 @@ package org.apache.jackrabbit.oak.securi
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
 import com.google.common.collect.Iterators;
 import org.apache.jackrabbit.api.security.principal.ItemBasedPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
@@ -46,6 +45,7 @@ import java.security.Principal;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -146,9 +146,7 @@ class PrincipalProviderImpl implements P
 }
 try {
 Iterator authorizables = findAuthorizables(nameHint, 
searchType, offset, limit);
-Iterator principals = Iterators.transform(
-Iterators.filter(authorizables, Predicates.notNull()),
-new AuthorizableToPrincipal());
+Iterator principals = 
Iterators.filter(Iterators.transform(authorizables, new 
AuthorizableToPrincipal()), Objects::nonNull);
 
 // everyone is injected only in complete set, not on pages
 boolean noRange = offset == 0 && limit == Long.MAX_VALUE;
@@ -255,9 +253,9 @@ class PrincipalProviderImpl implements P
 private static final class EveryonePredicate implements 
Predicate {
 private boolean servedEveryone = false;
 @Override
-public boolean apply(@Nullable Principal principal) {
-String pName = (principal == null) ? null : principal.getName();
-if (EveryonePrincipal.NAME.equals(pName)) {
+public boolean apply(Principal principal) {
+// principal must never be null as the result was already filtered 
for null.
+if (EveryonePrincipal.NAME.equals(principal.getName())) {
 if (servedEveryone) {
 return false;
 } else {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java?rev=1858534=1858533=1858534=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/principal/AbstractPrincipalProviderTest.java
 Thu May  2 12:34:12 2019
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
+import com.google.common.collect.Iterators;
 import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.ItemBasedPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
@@ -42,6 +43,7 @@ import org.apache.jackrabbit.oak.spi.sec
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
 import org.apache.jackrabbit.oak.spi.security.principal.SystemUserPrincipal;
 import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
+import org.jetbrains.annotations.NotNull;
 import 

svn commit: r1858530 - in /jackrabbit/oak/trunk: oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ oak-jcr/src/main/

2019-05-02 Thread stillalex
Author: stillalex
Date: Thu May  2 11:48:10 2019
New Revision: 1858530

URL: http://svn.apache.org/viewvc?rev=1858530=rev
Log:
OAK-8249 NodeImpl#isNodeType could load mixin info lazily


Modified:

jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/EffectiveNodeTypeProvider.java

jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/package-info.java

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/AccessManager.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java

jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java

Modified: 
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/EffectiveNodeTypeProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/EffectiveNodeTypeProvider.java?rev=1858530=1858529=1858530=diff
==
--- 
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/EffectiveNodeTypeProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/EffectiveNodeTypeProvider.java
 Thu May  2 11:48:10 2019
@@ -16,7 +16,10 @@
  */
 package org.apache.jackrabbit.oak.spi.nodetype;
 
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
+
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
@@ -36,6 +39,11 @@ public interface EffectiveNodeTypeProvid
  * type or mixin type, or a subtype thereof respecting the effective node
  * type of the {@code tree}. Returns {@code false} otherwise.
  *
+ * Note: caution must be taken while calling this api because it doesn't
+ * offer the same strict guarantees as the {@code Node#isNodeType(String)}
+ * method in the case where the session doesn't have access to the
+ * {@code jcr:mixinTypes} property.
+ *
  * @param tree The tree to be tested.
  * @param nodeTypeName The internal oak name of the node type to be tested.
  * @return true if the specified node is of the given node type.
@@ -54,8 +62,29 @@ public interface EffectiveNodeTypeProvid
  * refer to an existing node type.
  * @throws RepositoryException If the given node type name is invalid or if
  * some other error occurs.
+ * @deprecated use {@link #isNodeType(String, Iterable, String)} instead
+ */
+@Deprecated
+default boolean isNodeType(@NotNull String primaryTypeName, @NotNull 
Iterator mixinTypes, @NotNull String nodeTypeName) throws 
NoSuchNodeTypeException, RepositoryException {
+List mixins = new ArrayList<>();
+mixinTypes.forEachRemaining(mixins::add);
+return isNodeType(primaryTypeName, mixins, nodeTypeName);
+}
+
+/**
+ * Returns {@code true} if {@code typeName} is of the specified primary 
node
+ * type or mixin type, or a subtype thereof. Returns {@code false} 
otherwise.
+ *
+ * @param primaryTypeName  the internal oak name of the node to test
+ * @param mixinTypes the internal oak names of the node to test.
+ * @param nodeTypeName The internal oak name of the node type to be tested.
+ * @return {@code true} if the specified node type is of the given node 
type.
+ * @throws NoSuchNodeTypeException If the specified node type name doesn't
+ * refer to an existing node type.
+ * @throws RepositoryException If the given node type name is invalid or if
+ * some other error occurs.
  */
-boolean isNodeType(@NotNull String primaryTypeName, @NotNull 
Iterator mixinTypes, @NotNull String nodeTypeName) throws 
NoSuchNodeTypeException, RepositoryException;
+boolean isNodeType(@NotNull String primaryTypeName, @NotNull 
Iterable mixinTypes, @NotNull String nodeTypeName) throws 
NoSuchNodeTypeException, RepositoryException;
 
 /**
  * Returns {@code true} if {@code typeName} is of the specified primary 
node

Modified: 
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/package-info.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/package-info.java?rev=1858530=1858529=1858530=diff
==
--- 
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/package-info.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/nodetype/package-info.java
 Thu May  2 11:48:10 2019
@@ -14,7 +14,7 @@
  * See