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

2018-10-25 Thread stillalex
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

2018-10-25 Thread stillalex
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

2018-10-25 Thread mreutegg
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

2018-10-25 Thread reschke
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.