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
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
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
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
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; }