svn commit: r1844835 - in /jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission: PermissionEntryCache.java PrincipalPermissionEntries.java
Author: stillalex Date: Thu Oct 25 14:56:10 2018 New Revision: 1844835 URL: http://svn.apache.org/viewvc?rev=1844835=rev Log: OAK-7862 Make PermissionEntryCache more resilient against OOME (1.8) Modified: jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionEntryCache.java jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PrincipalPermissionEntries.java Modified: jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionEntryCache.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionEntryCache.java?rev=1844835=1844834=1844835=diff == --- jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionEntryCache.java (original) +++ jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionEntryCache.java Thu Oct 25 14:56:10 2018 @@ -17,7 +17,6 @@ package org.apache.jackrabbit.oak.security.authorization.permission; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -81,15 +80,15 @@ class PermissionEntryCache { ppe = new PrincipalPermissionEntries(); entries.put(principalName, ppe); } -Collection pes = ppe.getEntries().get(path); +Collection pes = ppe.getEntriesByPath(path); if (pes == null) { pes = store.load(null, principalName, path); if (pes == null) { -pes = Collections.emptySet(); +ppe.rememberNotAccessControlled(path); } else { +ppe.putEntriesByPath(path, pes); ret.addAll(pes); } -ppe.getEntries().put(path, pes); } else { ret.addAll(pes); } Modified: jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PrincipalPermissionEntries.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PrincipalPermissionEntries.java?rev=1844835=1844834=1844835=diff == --- jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PrincipalPermissionEntries.java (original) +++ jackrabbit/oak/branches/1.8/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PrincipalPermissionEntries.java Thu Oct 25 14:56:10 2018 @@ -16,10 +16,15 @@ */ package org.apache.jackrabbit.oak.security.authorization.permission; +import static java.util.Collections.emptySet; + import java.util.Collection; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; + import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** * {@code PermissionEntries} holds the permission entries of one principal @@ -27,6 +32,11 @@ import javax.annotation.Nonnull; class PrincipalPermissionEntries { /** + * max size of the emptyPaths cache. + */ +private static int MAX_SIZE = Integer.getInteger("oak.PrincipalPermissionEntries.maxSize", 1000); + +/** * indicating if all entries were loaded. */ private boolean fullyLoaded; @@ -34,13 +44,20 @@ class PrincipalPermissionEntries { /** * map of permission entries, accessed by path */ -private Map> entries = new HashMap>(); +private Map> entries = new HashMap<>(); +private final Map emptyPaths; PrincipalPermissionEntries() { +this.emptyPaths = new LinkedHashMap() { +@Override +protected boolean removeEldestEntry(Map.Entry eldest) { +return size() > MAX_SIZE; +} +}; } long getSize() { -return entries.size(); +return entries.size() + emptyPaths.size(); } boolean isFullyLoaded() { @@ -55,4 +72,17 @@ class PrincipalPermissionEntries { Map> getEntries() { return entries; } + +@Nullable +Collection getEntriesByPath(@Nonnull String path) { +return (emptyPaths.containsKey(path)) ? emptySet() : entries.get(path); +} + +void putEntriesByPath(@Nonnull String path, @Nonnull Collection pathEntries) { +entries.put(path, pathEntries); +} + +void rememberNotAccessControlled(@Nonnull String path) { +emptyPaths.put(path, null); +} } \ No newline at end of file
svn commit: r1844824 - in /jackrabbit/oak/trunk: oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/ oak-c
Author: stillalex Date: Thu Oct 25 12:09:32 2018 New Revision: 1844824 URL: http://svn.apache.org/viewvc?rev=1844824=rev Log: OAK-7860 Make PermissionEntryCache more resilient against OOME Added: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/CanReadNonExisting.java (with props) Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PrincipalPermissionEntries.java Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java?rev=1844824=1844823=1844824=diff == --- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java (original) +++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java Thu Oct 25 12:09:32 2018 @@ -48,6 +48,7 @@ import org.apache.jackrabbit.oak.benchma import org.apache.jackrabbit.oak.benchmark.authentication.external.SyncAllUsersTest; import org.apache.jackrabbit.oak.benchmark.authentication.external.SyncExternalUsersTest; import org.apache.jackrabbit.oak.benchmark.authorization.AceCreationTest; +import org.apache.jackrabbit.oak.benchmark.authorization.CanReadNonExisting; import org.apache.jackrabbit.oak.benchmark.wikipedia.WikipediaImport; import org.apache.jackrabbit.oak.fixture.JackrabbitRepositoryFixture; import org.apache.jackrabbit.oak.fixture.OakFixture; @@ -492,7 +493,8 @@ public class BenchmarkRunner { new BundlingNodeTest(), new PersistentCacheTest(statsProvider), new StringWriteTest(), -new BasicWriteTest() +new BasicWriteTest(), +new CanReadNonExisting() }; Set argset = Sets.newHashSet(nonOption.values(options)); Added: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/CanReadNonExisting.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/CanReadNonExisting.java?rev=1844824=auto == --- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/CanReadNonExisting.java (added) +++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/CanReadNonExisting.java Thu Oct 25 12:09:32 2018 @@ -0,0 +1,113 @@ +/* + * 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.benchmark.authorization; + +import static javax.jcr.security.Privilege.JCR_READ; +import static org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils.addAccessControlEntry; +import static org.junit.Assert.assertFalse; + +import javax.jcr.Node; +import javax.jcr.Session; +import javax.jcr.SimpleCredentials; +import javax.jcr.security.Privilege; + +import org.apache.jackrabbit.api.JackrabbitSession; +import org.apache.jackrabbit.api.security.user.Group; +import org.apache.jackrabbit.api.security.user.User; +import org.apache.jackrabbit.api.security.user.UserManager; +import org.apache.jackrabbit.oak.benchmark.AbstractTest; +import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal; +import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl; + +/** + * Tests the behavior of the permission cache when faced with lots of paths that + * have no relevant policies for the current session (but may have other + * policies). For more info see OAK-7860. + */ +public class CanReadNonExisting extends AbstractTest { + +static final String uid = "u0"; + +static final int contentNodes = 1; + +@Override +public void beforeSuite() throws Exception { +super.beforeSuite();
svn commit: r1844810 - /jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetDefaultWriteConcernIT.java
Author: mreutegg Date: Thu Oct 25 06:46:33 2018 New Revision: 1844810 URL: http://svn.apache.org/viewvc?rev=1844810=rev Log: OAK-7821: Revisit the need to download Mongo for running IT tests Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetDefaultWriteConcernIT.java Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetDefaultWriteConcernIT.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetDefaultWriteConcernIT.java?rev=1844810=1844809=1844810=diff == --- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetDefaultWriteConcernIT.java (original) +++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetDefaultWriteConcernIT.java Thu Oct 25 06:46:33 2018 @@ -36,6 +36,7 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeNoException; public class ReplicaSetDefaultWriteConcernIT { @@ -48,8 +49,12 @@ public class ReplicaSetDefaultWriteConce private Map executables = new HashMap<>(); @Before -public void before() throws IOException { -executables.putAll(mongodProcessFactory.startReplicaSet("rs", 3)); +public void before() { +try { +executables.putAll(mongodProcessFactory.startReplicaSet("rs", 3)); +} catch (Exception e) { +assumeNoException(e); +} } @Test
svn commit: r1844809 - /jackrabbit/oak/trunk/oak-doc/src/site/markdown/clustering.md
Author: reschke Date: Thu Oct 25 06:11:32 2018 New Revision: 1844809 URL: http://svn.apache.org/viewvc?rev=1844809=rev Log: OAK-7861: update clustering documentation wrt rdbmk Modified: jackrabbit/oak/trunk/oak-doc/src/site/markdown/clustering.md Modified: jackrabbit/oak/trunk/oak-doc/src/site/markdown/clustering.md URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-doc/src/site/markdown/clustering.md?rev=1844809=1844808=1844809=diff == --- jackrabbit/oak/trunk/oak-doc/src/site/markdown/clustering.md (original) +++ jackrabbit/oak/trunk/oak-doc/src/site/markdown/clustering.md Thu Oct 25 06:11:32 2018 @@ -21,8 +21,6 @@ Clustering is currently supported for th To use clustering, simply connect multiple Oak instances with the same backend storage. -Please note the RDBMS storage is work in progress, -and will soon be fully tested and supported as well. Both the MongoDB and the RDBMs storage subsystems internally use the same cluster mechanism.