svn commit: r1842089 - in /jackrabbit/oak/trunk/oak-store-document/src: main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java test/java/org/apache/jackrabbit/oak/plugins/docum

2018-09-27 Thread reschke
Author: reschke
Date: Thu Sep 27 12:25:22 2018
New Revision: 1842089

URL: http://svn.apache.org/viewvc?rev=1842089=rev
Log:
OAK-7748: DocumentStore: test (and optionally optimize) bulk update fallback 
logic

Modified:

jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java

jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BulkCreateOrUpdateClusterTest.java

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1842089=1842088=1842089=diff
==
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
 Thu Sep 27 12:25:22 2018
@@ -423,6 +423,12 @@ public class RDBDocumentStore implements
 for (UpdateOp updateOp : updateOps) {
 UpdateOp conflictedOp = operationsToCover.remove(updateOp.getId());
 if (conflictedOp != null) {
+if (collection == Collection.NODES) {
+LOG.debug("update conflict on {}, invalidating cache and 
retrying...", updateOp.getId());
+nodesCache.invalidate(updateOp.getId());
+} else {
+LOG.debug("update conflict on {}, retrying...", 
updateOp.getId());
+}
 results.put(conflictedOp, createOrUpdate(collection, 
updateOp));
 } else if (duplicates.contains(updateOp)) {
 results.put(updateOp, createOrUpdate(collection, updateOp));
@@ -1621,10 +1627,17 @@ public class RDBDocumentStore implements
 if (lastmodcount == newmodcount) {
 // cached copy did not change so it probably 
was
 // updated by a different instance, get a 
fresh one
+LOG.debug("suspect update from different 
instance (current modcount: {}), refetching: {}...",
+newmodcount, update.getId());
 if (collection == Collection.NODES) {
 nodesCache.invalidate(update.getId());
 }
 oldDoc = readDocumentUncached(collection, 
update.getId(), null);
+if (oldDoc == null) {
+LOG.debug("after refetch: {} is gone", 
update.getId());
+} else {
+LOG.debug("after refetch: modcount for {} 
is {}", update.getId(), modcountOf(oldDoc));
+}
 }
 }
 

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BulkCreateOrUpdateClusterTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BulkCreateOrUpdateClusterTest.java?rev=1842089=1842088=1842089=diff
==
--- 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BulkCreateOrUpdateClusterTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BulkCreateOrUpdateClusterTest.java
 Thu Sep 27 12:25:22 2018
@@ -31,12 +31,18 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.jackrabbit.oak.commons.junit.LogCustomizer;
+import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.Lists;
+
+import ch.qos.logback.classic.Level;
+
 public class BulkCreateOrUpdateClusterTest extends 
AbstractMultiDocumentStoreTest {
-
+
 final Logger logger = LoggerFactory.getLogger(getClass());
 
 public BulkCreateOrUpdateClusterTest(DocumentStoreFixture dsf) {
@@ -202,4 +208,64 @@ public class BulkCreateOrUpdateClusterTe
 }
 }
 
+@Test
+public void testSimpleConflictHandling() {
+LogCustomizer logCustomizer = 
LogCustomizer.forLogger(RDBDocumentStore.class.getName()).enable(Level.DEBUG)
+.contains("invalidating cache and retrying").create();
+logCustomizer.starting();
+
+try {
+String id1 = 

svn commit: r1842081 - in /jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene: LuceneIndex.java LuceneIndexEditorContext.java LuceneIndexProvider.java LuceneP

2018-09-27 Thread tommaso
Author: tommaso
Date: Thu Sep 27 10:21:40 2018
New Revision: 1842081

URL: http://svn.apache.org/viewvc?rev=1842081=rev
Log:
OAK-7411 - some javadoc fixes

Modified:

jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java

jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java

jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProvider.java

jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java

jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/CompoundWordTokenFilterBase.java

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java?rev=1842081=1842080=1842081=diff
==
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java
 Thu Sep 27 10:21:40 2018
@@ -52,6 +52,7 @@ import org.apache.jackrabbit.oak.spi.que
 import org.apache.jackrabbit.oak.spi.query.Filter.PropertyRestriction;
 import org.apache.jackrabbit.oak.spi.query.IndexRow;
 import org.apache.jackrabbit.oak.spi.query.QueryConstants;
+import org.apache.jackrabbit.oak.spi.query.QueryIndex;
 import 
org.apache.jackrabbit.oak.spi.query.QueryIndex.AdvanceFulltextQueryIndex;
 import org.apache.jackrabbit.oak.spi.query.QueryLimits;
 import org.apache.jackrabbit.oak.spi.query.fulltext.FullTextAnd;
@@ -137,11 +138,8 @@ import static org.apache.lucene.search.B
  * a blacklist of property names: what property to be excluded from the 
index via the excludePropertyNames property
  * the reindex flag which when set to true, 
triggers a full content re-index.
  * 
- * 
- * {@code
  * {@code
  * {
- * {
  * NodeBuilder index = root.child("oak:index");
  * index.child("lucene")
  * .setProperty("jcr:primaryType", "oak:QueryIndexDefinition", 
Type.NAME)
@@ -150,7 +148,6 @@ import static org.apache.lucene.search.B
  * .setProperty("reindex", "true");
  * }
  * }
- *
  * @see QueryIndex
  *
  */

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java?rev=1842081=1842080=1842081=diff
==
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
 Thu Sep 27 10:21:40 2018
@@ -76,7 +76,9 @@ public class LuceneIndexEditorContext ex
 return facetsConfig;
 }
 
-/** Only set for testing */
+/** Only set for testing
+ * @param c clock
+ * */
 public static void setClock(Clock c) {
 FulltextIndexEditorContext.setClock(c);
 }

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProvider.java?rev=1842081=1842080=1842081=diff
==
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProvider.java
 Thu Sep 27 10:21:40 2018
@@ -90,6 +90,8 @@ public class LuceneIndexProvider impleme
 
 /**
  * sets the default node aggregator that will be used at query time
+ *
+ * @param aggregator the node aggregator
  */
 public void setAggregator(QueryIndex.NodeAggregator aggregator) {
 this.aggregator = aggregator;

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java?rev=1842081=1842080=1842081=diff
==
--- 

svn commit: r1842080 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeDefinitionWriter.java test/java/org/apache/jackrabbit/oak/security/privile

2018-09-27 Thread stillalex
Author: stillalex
Date: Thu Sep 27 10:09:08 2018
New Revision: 1842080

URL: http://svn.apache.org/viewvc?rev=1842080=rev
Log:
OAK-7782 Clarify error on aggregate privilege registration with non existing 
privileges


Modified:

jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeDefinitionWriter.java

jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeManagerImplTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeDefinitionWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeDefinitionWriter.java?rev=1842080=1842079=1842080=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeDefinitionWriter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeDefinitionWriter.java
 Thu Sep 27 10:09:08 2018
@@ -140,6 +140,9 @@ class PrivilegeDefinitionWriter implemen
 bits = PrivilegeBits.BUILT_IN.get(name);
 } else if (isAggregate) {
 bits = bitsMgr.getBits(declAggrNames);
+if (bits.isEmpty()) {
+throw new RepositoryException("Illegal aggregation of 
non-exising privileges on '" + name + "'.");
+}
 } else {
 bits = next();
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeManagerImplTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeManagerImplTest.java?rev=1842080=1842079=1842080=diff
==
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeManagerImplTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeManagerImplTest.java
 Thu Sep 27 10:09:08 2018
@@ -53,6 +53,7 @@ public class PrivilegeManagerImplTest ex
 private PrivilegeManagerImpl privilegeManager;
 
 @Before
+@Override
 public void before() throws Exception {
 super.before();
 privilegeManager = create(root);
@@ -169,6 +170,16 @@ public class PrivilegeManagerImplTest ex
 privilegeManager.registerPrivilege("jcr:customPrivilege", true, new 
String[]{"jcr:read", "jcr:write"});
 }
 
+@Test
+public void testRegisterAggregated() throws Exception {
+privilegeManager.registerPrivilege("test:customPrivilege", false, new 
String[] { "jcr:read", "jcr:write" });
+}
+
+@Test(expected = RepositoryException.class)
+public void testRegisterAggregatedNonExisting() throws Exception {
+privilegeManager.registerPrivilege("test:customPrivilege", false, new 
String[] { "test:nan" });
+}
+
 @Test(expected = RepositoryException.class)
 public void testRegisterPrivilegeReservedRemappedNamespace() throws 
Exception {
 NamePathMapper mapper = new NamePathMapperImpl(new 
LocalNameMapper(root, ImmutableMap.of("prefix", 
NamespaceRegistry.NAMESPACE_JCR)));




svn commit: r1842078 - /jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java

2018-09-27 Thread mreutegg
Author: mreutegg
Date: Thu Sep 27 08:50:24 2018
New Revision: 1842078

URL: http://svn.apache.org/viewvc?rev=1842078=rev
Log:
OAK-7485: DocumentNodeStore doesn't work with shared Atlas MongoDB replica set

Modified:

jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java?rev=1842078=1842077=1842078=diff
==
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java
 Thu Sep 27 08:50:24 2018
@@ -22,6 +22,7 @@ import com.mongodb.BasicDBObject;
 import com.mongodb.ClientSessionOptions;
 import com.mongodb.MongoClient;
 import com.mongodb.MongoClientException;
+import com.mongodb.MongoCommandException;
 import com.mongodb.MongoQueryException;
 import com.mongodb.ReadConcern;
 import com.mongodb.client.MongoCollection;
@@ -236,8 +237,18 @@ public class MongoStatus implements Serv
 
 private BasicDBObject getServerStatus() {
 if (serverStatus == null) {
-serverStatus = client.getDatabase(dbName).runCommand(
-new BasicDBObject("serverStatus", 1), BasicDBObject.class);
+try {
+serverStatus = client.getDatabase(dbName).runCommand(
+new BasicDBObject("serverStatus", 1), 
BasicDBObject.class);
+} catch (MongoCommandException e) {
+if (e.getErrorCode() == -1) {
+// OAK-7485: workaround when running on
+// MongoDB Atlas shared instances
+serverStatus = new BasicDBObject();
+} else {
+throw e;
+}
+}
 }
 return serverStatus;
 }