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/
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
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
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/
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