Author: mreutegg
Date: Tue Nov 7 13:28:48 2017
New Revision: 1814499
URL: http://svn.apache.org/viewvc?rev=1814499&view=rev
Log:
OAK-5028: Remove DocumentStore.update()
Removed:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CacheConsistencyIT.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBCacheConsistencyIT.java
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStats.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsCollector.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
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/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CacheConsistencyTestBase.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentQueryAndInvalidateIT.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentQueryAndUpdateIT.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStorePerformanceTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsIT.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/FailingDocumentStore.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/MultiDocumentStoreTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCWithSplitTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDBExceptionTest.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/ReadOnlyDocumentStoreWrapperTest.java
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
Tue Nov 7 13:28:48 2017
@@ -258,31 +258,6 @@ public interface DocumentStore {
throws IllegalArgumentException, DocumentStoreException;
/**
- * Update documents with the given keys. Only existing documents are
- * updated and keys for documents that do not exist are simply ignored.
- * There is no guarantee in which sequence the updates are performed.
- * <p>
- * If this method fails with a {@code DocumentStoreException}, then only
some
- * of the documents identified by {@code keys} may have been updated. The
- * implementation however ensures that the result of the operation is
- * properly reflected in the document cache. That is, an implementation
- * could simply evict documents with the given keys from the cache.
- *
- * @param <T> the document type.
- * @param collection the collection.
- * @param keys the keys of the documents to update.
- * @param updateOp the update operation to apply to each of the documents
- * (where {@link Condition}s are not allowed)
- * @throws IllegalArgumentException when the {@linkplain UpdateOp} is
conditional
- * @throws DocumentStoreException if the operation failed. E.g. because of
- * an I/O error.
- */
- <T extends Document> void update(Collection<T> collection,
- List<String> keys,
- UpdateOp updateOp)
- throws IllegalArgumentException, DocumentStoreException;
-
- /**
* Atomically checks if the document exists and updates it, otherwise the
* document is created (aka upsert). The returned document is immutable.
* <p>
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStats.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStats.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStats.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStats.java
Tue Nov 7 13:28:48 2017
@@ -247,12 +247,6 @@ public class DocumentStoreStats implemen
}
@Override
- public void doneUpdate(long timeTakenNanos, Collection<? extends Document>
collection, int updateCount) {
- //NODES - Update is called for lastRev update
- perfLog(timeTakenNanos, "update");
- }
-
- @Override
public void doneFindAndModify(long timeTakenNanos, Collection<? extends
Document> collection, String key, boolean newEntry,
boolean success, int retryCount) {
if (collection == Collection.NODES){
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsCollector.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsCollector.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsCollector.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsCollector.java
Tue Nov 7 13:28:48 2017
@@ -73,14 +73,6 @@ public interface DocumentStoreStatsColle
void doneCreateOrUpdate(long timeTakenNanos, Collection<? extends
Document> collection, List<String> ids);
/**
- * Called when a given updated has modified multiple documents
- * @param timeTakenNanos time taken
- * @param collection the collection
- * @param updateCount number of updates performed
- */
- void doneUpdate(long timeTakenNanos, Collection<? extends Document>
collection, int updateCount);
-
- /**
* Called when a update operation was completed which affected single
* document.
* @param timeTakenNanos time taken
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
Tue Nov 7 13:28:48 2017
@@ -371,26 +371,6 @@ public class MemoryDocumentStore impleme
}
@Override
- public <T extends Document> void update(Collection<T> collection,
- List<String> keys,
- UpdateOp updateOp) {
- assertUnconditional(updateOp);
- Lock lock = rwLock.writeLock();
- lock.lock();
- try {
- ConcurrentSkipListMap<String, T> map = getMap(collection);
- for (String key : keys) {
- if (!map.containsKey(key)) {
- continue;
- }
- internalCreateOrUpdate(collection, updateOp.shallowCopy(key),
true);
- }
- } finally {
- lock.unlock();
- }
- }
-
- @Override
public String toString() {
StringBuilder buff = new StringBuilder();
buff.append("Nodes:\n");
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
Tue Nov 7 13:28:48 2017
@@ -103,10 +103,8 @@ import com.mongodb.WriteResult;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Predicates.in;
import static com.google.common.base.Predicates.not;
-import static com.google.common.base.Predicates.notNull;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Maps.filterKeys;
-import static com.google.common.collect.Maps.filterValues;
import static com.google.common.collect.Sets.difference;
import static
org.apache.jackrabbit.oak.plugins.document.NodeDocument.DELETED_ONCE;
import static
org.apache.jackrabbit.oak.plugins.document.NodeDocument.MODIFIED_IN_SECS;
@@ -1233,63 +1231,6 @@ public class MongoDocumentStore implemen
}
}
- @Override
- public <T extends Document> void update(Collection<T> collection,
- List<String> keys,
- UpdateOp updateOp) {
- log("update", keys, updateOp);
- UpdateUtils.assertUnconditional(updateOp);
- DBCollection dbCollection = getDBCollection(collection);
- QueryBuilder query = QueryBuilder.start(Document.ID).in(keys);
- // make sure we don't modify the original updateOp
- updateOp = updateOp.copy();
- DBObject update = createUpdate(updateOp, false);
- final Stopwatch watch = startWatch();
- try {
- Map<String, NodeDocument> cachedDocs = Collections.emptyMap();
- if (collection == Collection.NODES) {
- cachedDocs = Maps.newHashMap();
- for (String key : keys) {
- cachedDocs.put(key, nodesCache.getIfPresent(key));
- }
- }
- try {
- dbCollection.update(query.get(), update, false, true);
- if (collection == Collection.NODES) {
- Map<String, ModificationStamp> modCounts =
getModStamps(filterValues(cachedDocs, notNull()).keySet());
- // update cache
- for (Entry<String, NodeDocument> entry :
cachedDocs.entrySet()) {
- // the cachedDocs is not empty, so the collection =
NODES
- Lock lock = nodeLocks.acquire(entry.getKey());
- try {
- ModificationStamp postUpdateModStamp =
modCounts.get(entry.getKey());
- if (postUpdateModStamp != null
- && entry.getValue() != null
- && entry.getValue() != NodeDocument.NULL
- &&
Long.valueOf(postUpdateModStamp.modCount -
1).equals(entry.getValue().getModCount())) {
- // post update modCount is one higher than
- // what we currently see in the cache. we can
- // replace the cached document
- NodeDocument newDoc =
applyChanges(Collection.NODES, entry.getValue(),
updateOp.shallowCopy(entry.getKey()));
-
nodesCache.replaceCachedDocument(entry.getValue(), newDoc);
- } else {
- // make sure concurrently loaded document is
- // invalidated
- nodesCache.invalidate(entry.getKey());
- }
- } finally {
- lock.unlock();
- }
- }
- }
- } catch (MongoException e) {
- throw handleException(e, collection, keys);
- }
- } finally {
- stats.doneUpdate(watch.elapsed(TimeUnit.NANOSECONDS), collection,
keys.size());
- }
- }
-
/**
* Returns the {@link Document#MOD_COUNT} and
* {@link NodeDocument#MODIFIED_IN_SECS} values of the documents with the
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=1814499&r1=1814498&r2=1814499&view=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
Tue Nov 7 13:28:48 2017
@@ -343,12 +343,6 @@ public class RDBDocumentStore implements
}
@Override
- public <T extends Document> void update(Collection<T> collection,
List<String> keys, UpdateOp updateOp) {
- UpdateUtils.assertUnconditional(updateOp);
- internalUpdate(collection, keys, updateOp);
- }
-
- @Override
public <T extends Document> T createOrUpdate(Collection<T> collection,
UpdateOp update) {
UpdateUtils.assertUnconditional(update);
return internalCreateOrUpdate(collection, update, true, false);
@@ -1448,65 +1442,6 @@ public class RDBDocumentStore implements
update.increment(MODCOUNT, 1);
}
- @CheckForNull
- private <T extends Document> void internalUpdate(Collection<T> collection,
List<String> ids, UpdateOp update) {
-
- if (isAppendableUpdate(update, true) &&
!requiresPreviousState(update)) {
- Operation modOperation = update.getChanges().get(MODIFIEDKEY);
- long modified = getModifiedFromOperation(modOperation);
- boolean modifiedIsConditional = modOperation == null ||
modOperation.type != UpdateOp.Operation.Type.SET;
- String appendData = ser.asString(update);
-
- for (List<String> chunkedIds : Lists.partition(ids, CHUNKSIZE)) {
-
- if (collection == Collection.NODES) {
- for (String key : chunkedIds) {
- nodesCache.invalidate(key);
- }
- }
-
- Connection connection = null;
- RDBTableMetaData tmd = getTable(collection);
- boolean success = false;
- try {
- Stopwatch watch = startWatch();
- connection = this.ch.getRWConnection();
- success = db.batchedAppendingUpdate(connection, tmd,
chunkedIds, modified, modifiedIsConditional, appendData);
- connection.commit();
- //Internally 'db' would make multiple calls and number of
those
- //remote calls would not be captured
- stats.doneUpdate(watch.elapsed(TimeUnit.NANOSECONDS),
collection, chunkedIds.size());
- } catch (SQLException ex) {
- success = false;
- this.ch.rollbackConnection(connection);
- } finally {
- this.ch.closeConnection(connection);
- }
- if (success) {
- if (collection == Collection.NODES) {
- for (String id : chunkedIds) {
- nodesCache.invalidate(id);
- }
- }
- } else {
- for (String id : chunkedIds) {
- UpdateOp up = update.copy();
- up = up.shallowCopy(id);
- internalCreateOrUpdate(collection, up, false, true);
- }
- }
- }
- } else {
- Stopwatch watch = startWatch();
- for (String id : ids) {
- UpdateOp up = update.copy();
- up = up.shallowCopy(id);
- internalCreateOrUpdate(collection, up, false, true);
- }
- stats.doneUpdate(watch.elapsed(TimeUnit.NANOSECONDS), collection,
ids.size());
- }
- }
-
private <T extends Document> List<T> internalQuery(Collection<T>
collection, String fromKey, String toKey,
List<String> excludeKeyPatterns, List<QueryCondition> conditions,
int limit) {
Connection connection = null;
@@ -1910,14 +1845,6 @@ public class RDBDocumentStore implements
return true;
}
- /*
- * check whether this update operation requires knowledge about the
previous
- * state
- */
- private static boolean requiresPreviousState(UpdateOp update) {
- return !update.getConditions().isEmpty();
- }
-
private static long getModifiedFromOperation(Operation op) {
return op == null ? 0L : Long.parseLong(op.value.toString());
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java
Tue Nov 7 13:28:48 2017
@@ -122,13 +122,6 @@ public final class LeaseCheckDocumentSto
}
@Override
- public final <T extends Document> void update(Collection<T> collection,
- List<String> keys, UpdateOp updateOp) {
- performLeaseCheck();
- delegate.update(collection, keys, updateOp);
- }
-
- @Override
public final <T extends Document> T createOrUpdate(Collection<T>
collection,
UpdateOp update) {
performLeaseCheck();
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
Tue Nov 7 13:28:48 2017
@@ -207,25 +207,6 @@ public class LoggingDocumentStoreWrapper
}
}
- @Override
- public <T extends Document> void update(final Collection<T> collection,
- final List<String> keys,
- final UpdateOp updateOp) {
- try {
- logMethod("update", collection, keys, updateOp);
- logResult(new Callable<Void>() {
- @Override
- public Void call() throws Exception {
- store.update(collection, keys, updateOp);
- return null;
- }
- });
- } catch (Exception e) {
- logException(e);
- throw convert(e);
- }
- }
-
@Nonnull
@Override
public <T extends Document> T createOrUpdate(final Collection<T>
collection,
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
Tue Nov 7 13:28:48 2017
@@ -96,12 +96,6 @@ public class SynchronizingDocumentStoreW
}
@Override
- public synchronized <T extends Document> void update(final Collection<T>
collection, final List<String> keys,
- final UpdateOp updateOp) {
- store.update(collection, keys, updateOp);
- }
-
- @Override
public synchronized <T extends Document> T createOrUpdate(final
Collection<T> collection, final UpdateOp update) {
return store.createOrUpdate(collection, update);
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
Tue Nov 7 13:28:48 2017
@@ -246,22 +246,6 @@ public class TimingDocumentStoreWrapper
}
@Override
- public <T extends Document> void update(Collection<T> collection,
- List<String> keys,
- UpdateOp updateOp) {
- try {
- long start = now();
- base.update(collection, keys, updateOp);
- updateAndLogTimes("update", start, 0, 0);
- if (logCommonCall()) {
- logCommonCall(start, "update " + collection);
- }
- } catch (Exception e) {
- throw convert(e);
- }
- }
-
- @Override
@CheckForNull
public <T extends Document> T createOrUpdate(Collection<T> collection,
UpdateOp update) {
try {
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
Tue Nov 7 13:28:48 2017
@@ -354,16 +354,6 @@ public class BasicDocumentStoreTest exte
catch (IllegalArgumentException expected) {
// reported by DocumentStore
}
-
- try {
- UpdateOp up = new UpdateOp(id, false);
- up.equals("foo", "bar");
- super.ds.update(Collection.NODES, Collections.singletonList(id),
up);
- fail("conditional update should fail");
- }
- catch (IllegalArgumentException expected) {
- // reported by DocumentStore
- }
}
@Test
@@ -540,33 +530,6 @@ public class BasicDocumentStoreTest exte
}
@Test
- public void testRepeatingUpdatesOnSQLServer() {
- // simulates two updates to trigger the off-by-one bug documented in
OAK-3670
- String id = this.getClass().getName() +
".testRepeatingUpdatesOnSQLServer";
-
- // remove if present
- NodeDocument nd = super.ds.find(Collection.NODES, id);
- if (nd != null) {
- super.ds.remove(Collection.NODES, id);
- }
-
- UpdateOp up = new UpdateOp(id, true);
- assertTrue(super.ds.create(Collection.NODES,
Collections.singletonList(up)));
- removeMe.add(id);
-
- up = new UpdateOp(id, false);
- up.set("f0", generateConstantString(3000));
- super.ds.update(Collection.NODES, Collections.singletonList(id), up);
-
- up = new UpdateOp(id, false);
- up.set("f1", generateConstantString(967));
- super.ds.update(Collection.NODES, Collections.singletonList(id), up);
-
- NodeDocument doc = super.ds.find(Collection.NODES, id, 0);
- assertNotNull(doc);
- }
-
- @Test
public void testModifiedMaxUpdateQuery() {
String id = this.getClass().getName() + ".testModifiedMaxUpdate";
// create a test node
@@ -613,32 +576,6 @@ public class BasicDocumentStoreTest exte
}
@Test
- public void testModifyModified() {
- // https://issues.apache.org/jira/browse/OAK-2940
- String id = this.getClass().getName() + ".testModifyModified";
- // create a test node
- UpdateOp up = new UpdateOp(id, true);
- up.set("_modified", 1000L);
- boolean success = super.ds.create(Collection.NODES,
Collections.singletonList(up));
- assertTrue(success);
- removeMe.add(id);
-
- // update with "max" operation
- up = new UpdateOp(id, false);
- up.max("_modified", 2000L);
- super.ds.update(Collection.NODES, Collections.singletonList(id), up);
- NodeDocument nd = super.ds.find(Collection.NODES, id, 0);
- assertEquals(((Number)nd.get("_modified")).longValue(), 2000L);
-
- // update with "set" operation
- up = new UpdateOp(id, false);
- up.set("_modified", 1500L);
- super.ds.update(Collection.NODES, Collections.singletonList(id), up);
- nd = super.ds.find(Collection.NODES, id, 0);
- assertEquals(((Number)nd.get("_modified")).longValue(), 1500L);
- }
-
- @Test
public void testModifyDeletedOnce() {
// https://issues.apache.org/jira/browse/OAK-3852
String id = this.getClass().getName() + ".testModifyDeletedOnce";
@@ -655,15 +592,6 @@ public class BasicDocumentStoreTest exte
// RDB persistence does not distinguish null and false
assertEquals(dovalue.booleanValue(), Boolean.FALSE);
}
-
- // update
- up = new UpdateOp(id, false);
- up.set(NodeDocument.DELETED_ONCE, Boolean.TRUE);
- super.ds.update(Collection.NODES, Collections.singletonList(id), up);
- nd = super.ds.find(Collection.NODES, id, 0);
- assertNotNull(nd);
- assertNotNull(nd.get(NodeDocument.DELETED_ONCE));
-
assertEquals(((Boolean)nd.get(NodeDocument.DELETED_ONCE)).booleanValue(),
Boolean.TRUE);
}
@Test
@@ -790,33 +718,6 @@ public class BasicDocumentStoreTest exte
}
@Test
- public void testUpdateMultiple() {
- String id = this.getClass().getName() + ".testUpdateMultiple";
- // create a test node
- super.ds.remove(Collection.NODES, id);
- UpdateOp up = new UpdateOp(id, true);
- boolean success = super.ds.create(Collection.NODES,
Collections.singletonList(up));
- assertTrue(success);
- removeMe.add(id);
-
- // update a non-existing one and this one
- List<String> toupdate = new ArrayList<String>();
- toupdate.add(id + "-" + UUID.randomUUID());
- toupdate.add(id);
-
- UpdateOp up2 = new UpdateOp(id, false);
- up2.set("foo", "bar");
- ds.update(Collection.NODES, toupdate, up2);
-
- // id should be updated
- ds.invalidateCache();
- Document d = ds.find(Collection.NODES, id);
- assertNotNull(d);
- assertEquals(id, d.getId());
- assertEquals("bar", d.get("foo").toString());
- }
-
- @Test
public void testUpdateModified() {
String id = this.getClass().getName() + ".testUpdateModified";
// create a test node
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CacheConsistencyTestBase.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CacheConsistencyTestBase.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CacheConsistencyTestBase.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CacheConsistencyTestBase.java
Tue Nov 7 13:28:48 2017
@@ -108,29 +108,6 @@ public abstract class CacheConsistencyTe
setTemporaryUpdateException(null);
}
- // update
- try {
- // make sure cache is populated
- olddoc = ds.find(Collection.NODES, id1);
-
- String random = UUID.randomUUID().toString();
- setTemporaryUpdateException(random);
- try {
- up1 = new UpdateOp(id1, false);
- up1.set("_test", random);
- ds.update(Collection.NODES, Collections.singletonList(id1),
up1);
- fail("should have failed with DocumentStoreException");
- } catch (DocumentStoreException ex) {
- assertEquals("should fail with enforced exception",
ex.getCause().getMessage(), random);
- // make sure cache was invalidated
- NodeDocument newdoc = ds.find(Collection.NODES, id1, 1000);
- assertNotNull(newdoc);
- assertEquals(random, newdoc.get("_test"));
- }
- } finally {
- setTemporaryUpdateException(null);
- }
-
// createOrUpdate
try {
// make sure cache is populated
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentQueryAndInvalidateIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentQueryAndInvalidateIT.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentQueryAndInvalidateIT.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentQueryAndInvalidateIT.java
Tue Nov 7 13:28:48 2017
@@ -126,13 +126,16 @@ public class ConcurrentQueryAndInvalidat
}
private Iterable<String> updateDocuments() {
+ UpdateOp op = new UpdateOp("foo", false);
+ NodeDocument.setLastRev(op, newRevision());
+ List<UpdateOp> ops = Lists.newArrayList();
List<String> ids = Lists.newArrayList();
for (int i = 0; i < NUM_NODES; i++) {
- ids.add(getIdFromPath("/node-" + i));
+ String id = getIdFromPath("/node-" + i);
+ ids.add(id);
+ ops.add(op.shallowCopy(id));
}
- UpdateOp op = new UpdateOp("foo", false);
- NodeDocument.setLastRev(op, newRevision());
- ds2.update(NODES, ids, op);
+ ds2.createOrUpdate(NODES, ops);
return ids;
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentQueryAndUpdateIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentQueryAndUpdateIT.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentQueryAndUpdateIT.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/ConcurrentQueryAndUpdateIT.java
Tue Nov 7 13:28:48 2017
@@ -91,13 +91,13 @@ public class ConcurrentQueryAndUpdateIT
}
private void updateDocuments() {
- List<String> ids = Lists.newArrayList();
- for (int i = 0; i < NUM_NODES; i++) {
- ids.add(getIdFromPath("/node-" + i));
- }
UpdateOp op = new UpdateOp("foo", false);
NodeDocument.setLastRev(op, newRevision());
- ds.update(NODES, ids, op);
+ List<UpdateOp> ops = Lists.newArrayList();
+ for (int i = 0; i < NUM_NODES; i++) {
+ ops.add(op.shallowCopy(getIdFromPath("/node-" + i)));
+ }
+ ds.createOrUpdate(NODES, ops);
}
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java
Tue Nov 7 13:28:48 2017
@@ -162,14 +162,6 @@ public class CountingDocumentStore imple
}
@Override
- public <T extends Document> void update(Collection<T> collection,
- List<String> keys,
- UpdateOp updateOp) {
- getStats(collection).numCreateOrUpdateCalls++;
- delegate.update(collection, keys, updateOp);
- }
-
- @Override
public <T extends Document> T createOrUpdate(Collection<T> collection,
UpdateOp update) {
getStats(collection).numCreateOrUpdateCalls++;
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java
Tue Nov 7 13:28:48 2017
@@ -16,11 +16,8 @@
*/
package org.apache.jackrabbit.oak.plugins.document;
-import java.util.Collections;
-
import org.apache.jackrabbit.oak.json.JsopDiff;
import
org.apache.jackrabbit.oak.plugins.document.util.TimingDocumentStoreWrapper;
-import org.apache.jackrabbit.oak.plugins.document.util.Utils;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -29,7 +26,6 @@ import org.junit.After;
import org.junit.Test;
import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
import static
org.apache.jackrabbit.oak.plugins.document.NodeDocument.MODIFIED_IN_SECS_RESOLUTION;
import static
org.apache.jackrabbit.oak.plugins.document.util.Utils.getIdFromPath;
import static org.junit.Assert.assertEquals;
@@ -119,17 +115,4 @@ public class DocumentNodeStoreIT extends
ns1.dispose();
ns2.dispose();
}
-
- // OAK-2297
- @Test
- public void updateAbsentDocument() throws Exception {
- String id = Utils.getIdFromPath("/test");
- // trigger cache entry for /test
- ds.find(NODES, id);
-
- UpdateOp updateOp = new UpdateOp(id, false);
- updateOp.setMapEntry("foo", Revision.newRevision(1), "bar");
-
- ds.update(NODES, Collections.singletonList(id), updateOp);
- }
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStorePerformanceTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStorePerformanceTest.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStorePerformanceTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStorePerformanceTest.java
Tue Nov 7 13:28:48 2017
@@ -29,7 +29,6 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Test;
import org.slf4j.Logger;
@@ -199,7 +198,11 @@ public class DocumentStorePerformanceTes
UpdateOp up = new UpdateOp(bid, true);
up.setMapEntry("_lastRev", cr, "iteration-" + cnt);
up.max("_modified",
NodeDocument.getModifiedInSecs(System.currentTimeMillis()));
- super.ds.update(Collection.NODES, ids, up);
+ List<UpdateOp> ops = new ArrayList<UpdateOp>();
+ for (String id : ids) {
+ ops.add(up.shallowCopy(id));
+ }
+ super.ds.createOrUpdate(Collection.NODES, ops);
cnt += 1;
}
@@ -308,107 +311,4 @@ public class DocumentStorePerformanceTes
LOG.info("document updates with property of size " + size + (growing ?
" (growing)" : "") + " for " + super.dsname + " was " + cnt + " in " + duration
+ "ms (" + (cnt / (duration / 1000f)) + "/s)");
}
-
- @Test
- public void testConcurrentUpdatePerf1DS() throws InterruptedException {
- String id = this.getClass().getName() + ".testConcurrentUpdatePerf1DS";
- concurrentUpdatePerf(id, 1);
- }
-
- @Test
- public void testConcurrentUpdatePerf2DS() throws InterruptedException {
- String id = this.getClass().getName() + ".testConcurrentUpdatePerf1DS";
- concurrentUpdatePerf(id, 2);
- }
-
- private void concurrentUpdatePerf(String testName, int stores) throws
InterruptedException {
- final String id = testName;
- final long duration = 1000;
-
- ds1.remove(Collection.NODES, id);
- UpdateOp up = new UpdateOp(id, true);
- up.set(Document.MOD_COUNT, 1L);
- up.set("c", 0L);
- up.set("u", 0L);
- super.ds1.create(Collection.NODES, Collections.singletonList(up));
- removeMe.add(id);
-
- final DocumentStore ts1 = ds1;
- final DocumentStore ts2 = stores == 2 ? ds2 : ds1;
-
- final AtomicBoolean threadTwoIsActive = new AtomicBoolean(false);
- final AtomicBoolean threadOneIsDone = new AtomicBoolean(false);
-
- Thread one = new Thread(new Runnable() {
- @Override
- public void run() {
- int failures = 0;
- while (!threadTwoIsActive.get()) {
- }
- // operation that requires fetching the previous state
- UpdateOp up = new UpdateOp(id, false);
- up.increment("c", 1);
- up.notEquals("qux", "qux");
- long end = System.currentTimeMillis() + duration;
- while (System.currentTimeMillis() < end) {
- try {
- ts1.update(Collection.NODES,
Collections.singletonList(id), up);
- } catch (RuntimeException ex) {
- failures += 1;
- }
- }
- try {
- UpdateOp up2 = new UpdateOp(id, false);
- up2.set("cfailures", failures);
- ts1.update(Collection.NODES,
Collections.singletonList(id), up2);
- } catch (RuntimeException ex) {
- }
- threadOneIsDone.set(true);
- }
- }, "cond");
-
- Thread two = new Thread(new Runnable() {
- @Override
- public void run() {
- int failures = 0;
- // operation that does not require fetching the previous state
- UpdateOp up = new UpdateOp(id, false);
- up.increment("u", 1);
- while (!threadOneIsDone.get()) {
- try {
- ts2.update(Collection.NODES,
Collections.singletonList(id), up);
- threadTwoIsActive.set(true);
- } catch (RuntimeException ex) {
- failures += 1;
- }
- }
- threadTwoIsActive.set(true);
- try {
- UpdateOp up2 = new UpdateOp(id, false);
- up2.set("ufailures", failures);
- ts1.update(Collection.NODES,
Collections.singletonList(id), up2);
- } catch (RuntimeException ex) {
- }
- }
- }, "uncond");
-
- two.start();
- one.start();
-
- two.join();
- one.join();
-
- // reading uncached because for some reason MongoDS doesn't see the
- // changes made in ds2
- NodeDocument nd = ds1.find(Collection.NODES, id, 0);
- assertNotNull(nd);
- int cc = nd.get("c") == null ? 0 :
Integer.valueOf(nd.get("c").toString());
- int uc = nd.get("u") == null ? 0 :
Integer.valueOf(nd.get("u").toString());
- long mc = nd.getModCount();
- String msg = String.format(
- "Concurrent updates %s on %s cond. updates: %d (failures: %s),
uncond. updates: %d (failures: %s), _modCount: %d, ops/sec: %d, %% of cond.
updates: %d",
- stores == 1 ? "(one ds)" : "(two ds)", super.dsname, cc,
nd.get("cfailures"), uc, nd.get("ufailures"), mc,
- mc * 1000 / duration, cc * 100 / mc);
- LOG.info(msg);
- }
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsIT.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsIT.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsIT.java
Tue Nov 7 13:28:48 2017
@@ -19,11 +19,9 @@
package org.apache.jackrabbit.oak.plugins.document;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.UUID;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -112,25 +110,6 @@ public class DocumentStoreStatsIT extend
}
@Test
- public void update() throws Exception{
- String id = testName.getMethodName();
-
- UpdateOp up = new UpdateOp(id, true);
- ds.create(Collection.NODES, singletonList(up));
- removeMe.add(id);
-
- List<String> toupdate = new ArrayList<String>();
- toupdate.add(id + "-" + UUID.randomUUID());
- toupdate.add(id);
-
- UpdateOp up2 = new UpdateOp(id, false);
- up2.set("foo", "bar");
- ds.update(Collection.NODES, toupdate, up2);
-
- verify(stats).doneUpdate(anyLong(), eq(Collection.NODES), eq(2));
- }
-
- @Test
public void findAndModify() throws Exception{
String id = testName.getMethodName();
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java
Tue Nov 7 13:28:48 2017
@@ -101,13 +101,6 @@ public class DocumentStoreWrapper implem
}
@Override
- public <T extends Document> void update(Collection<T> collection,
- List<String> keys,
- UpdateOp updateOp) {
- store.update(collection, keys, updateOp);
- }
-
- @Override
public <T extends Document> T createOrUpdate(Collection<T> collection,
UpdateOp update) {
return store.createOrUpdate(collection, update);
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/FailingDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/FailingDocumentStore.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/FailingDocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/FailingDocumentStore.java
Tue Nov 7 13:28:48 2017
@@ -140,17 +140,6 @@ class FailingDocumentStore extends Docum
}
@Override
- public <T extends Document> void update(Collection<T> collection,
- List<String> keys,
- UpdateOp updateOp) {
- // update individually
- for (String k : keys) {
- maybeFail();
- super.update(collection, singletonList(k), updateOp);
- }
- }
-
- @Override
public <T extends Document> T createOrUpdate(Collection<T> collection,
UpdateOp update) {
maybeFail();
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/MultiDocumentStoreTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/MultiDocumentStoreTest.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/MultiDocumentStoreTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/MultiDocumentStoreTest.java
Tue Nov 7 13:28:48 2017
@@ -20,132 +20,27 @@ import static java.util.Collections.sync
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.Random;
import java.util.concurrent.CountDownLatch;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore;
import org.apache.jackrabbit.oak.plugins.document.util.Utils;
import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class MultiDocumentStoreTest extends AbstractMultiDocumentStoreTest {
- private static final Logger LOG =
LoggerFactory.getLogger(MultiDocumentStoreTest.class);
-
public MultiDocumentStoreTest(DocumentStoreFixture dsf) {
super(dsf);
}
@Test
- public void testInterleavedUpdate() {
- String id = this.getClass().getName() + ".testInterleavedUpdate";
-
- // remove if present
- NodeDocument nd = super.ds1.find(Collection.NODES, id);
- if (nd != null) {
- super.ds1.remove(Collection.NODES, id);
- }
-
- UpdateOp up = new UpdateOp(id, true);
- up.set("_foo", 0);
- assertTrue(super.ds1.create(Collection.NODES,
Collections.singletonList(up)));
- removeMe.add(id);
-
- long increments = 10;
-
- for (int i = 0; i < increments; i++) {
- up = new UpdateOp(id, true);
- up.increment("_foo", 1);
- if (i % 2 == 0) {
- super.ds1.update(Collection.NODES,
Collections.singletonList(id), up);
- }
- else {
- super.ds2.update(Collection.NODES,
Collections.singletonList(id), up);
- }
- }
-
- // read uncached
- nd = super.ds1.find(Collection.NODES, id, 0);
- assertEquals("_foo should have been incremented 10 times", increments,
nd.get("_foo"));
- }
-
- @Test
- public void testInvalidateCache() {
- // use a "proper" ID because otherwise Mongo's cache invalidation will
fail
- // see OAK-2588
- String id = "1:/" + this.getClass().getName() + ".testInvalidateCache";
-
- // remove if present
- NodeDocument nd = super.ds1.find(Collection.NODES, id);
- if (nd != null) {
- super.ds1.remove(Collection.NODES, id);
- }
-
- UpdateOp up = new UpdateOp(id, true);
- up.set("_foo", "bar");
- assertTrue(super.ds1.create(Collection.NODES,
Collections.singletonList(up)));
- removeMe.add(id);
-
- // fill both caches
- NodeDocument nd1 = super.ds1.find(Collection.NODES, id);
- NodeDocument nd2 = super.ds2.find(Collection.NODES, id);
- assertNotNull(nd1);
- assertNotNull(nd2);
- long firstVersion = nd1.getModCount();
- assertEquals(firstVersion, nd2.getModCount().longValue());
-
- // letTimeElapse();
-
- // update through ds1
- UpdateOp upds1 = new UpdateOp(id, true);
- upds1.set("foo", "qux");
- super.ds1.update(Collection.NODES, Collections.singletonList(id),
upds1);
- nd1 = super.ds1.find(Collection.NODES, id);
- assertEquals("modcount should have changed in ds1", firstVersion + 1,
nd1.getModCount().longValue());
-
- // check cached version in ds2
- nd2 = super.ds2.find(Collection.NODES, id);
- assertEquals("ds2 should still be on first version", firstVersion,
nd2.getModCount().longValue());
-
- // check uncached version in ds2
- nd2 = super.ds2.find(Collection.NODES, id, 0);
- assertEquals("ds2 should now see the second version", firstVersion +
1, nd2.getModCount().longValue());
-
- // check cached version in ds2 (was the cache refreshed?)
- NodeDocument nd2b = super.ds2.find(Collection.NODES, id);
- assertEquals("ds2 should now see the second version", firstVersion +
1, nd2b.getModCount().longValue());
-
- // update through ds2
- UpdateOp upds2 = new UpdateOp(id, true);
- upds2.set("foo", "blub");
- super.ds2.update(Collection.NODES, Collections.singletonList(id),
upds1);
- nd2 = super.ds2.find(Collection.NODES, id);
- assertEquals("modcount should have incremented again", firstVersion +
2, nd2.getModCount().longValue());
-
- long ds1checktime = nd1.getLastCheckTime();
- letTimeElapse();
-
- // try the invalidation
- ds1.invalidateCache();
-
- // ds1 should see the same version even when doing a cached read
- nd1 = super.ds1.find(Collection.NODES, id);
- assertEquals("modcount should have incremented again", firstVersion +
2, nd1.getModCount().longValue());
- assertTrue(nd1.getLastCheckTime() > ds1checktime);
- }
-
- @Test
public void testInterleavedBatchUpdate() {
int amount = 10;
int halfAmount = amount / 2;
@@ -331,158 +226,6 @@ public class MultiDocumentStoreTest exte
assertEquals(1L, foo.get("_ds2"));
}
- @Test
- public void testChangeVisibility() {
- String id = this.getClass().getName() + ".testChangeVisibility";
-
- super.ds1.remove(Collection.NODES, id);
-
- UpdateOp up = new UpdateOp(id, true);
- up.set("_foo", 0);
- up.set("_bar", 0);
- assertTrue(super.ds1.create(Collection.NODES,
Collections.singletonList(up)));
- removeMe.add(id);
- NodeDocument orig = super.ds1.find(Collection.NODES, id);
-
- // only run test if DS supports modcount
- if (orig.getModCount() != null) {
- long origMc = orig.getModCount();
-
- UpdateOp up2 = new UpdateOp(id, false);
- up2.increment("_foo", 1L);
- super.ds2.update(Collection.NODES, Collections.singletonList(id),
up2);
- NodeDocument ds2doc = super.ds2.find(Collection.NODES, id);
- long ds2Mc = ds2doc.getModCount();
- assertTrue("_modCount needs to be > " + origMc + " but was " +
ds2Mc, ds2Mc > origMc);
-
- UpdateOp up1 = new UpdateOp(id, false);
- up1.increment("_bar", 1L);
- super.ds1.update(Collection.NODES, Collections.singletonList(id),
up1);
-
- NodeDocument ds1doc = super.ds1.find(Collection.NODES, id);
- long ds1Mc = ds1doc.getModCount();
- assertTrue("_modCount needs to be > " + ds2Mc + " but was " +
ds1Mc, ds1Mc > ds2Mc);
- }
- }
-
- @Test
- public void concurrentUpdate() throws Exception {
- String id = Utils.getIdFromPath("/foo");
- ds1.remove(Collection.NODES, id);
- ds2.invalidateCache();
- removeMe.add(id);
- UpdateOp op = new UpdateOp(id, true);
- ds1.create(Collection.NODES, Collections.singletonList(op));
-
- List<Exception> exceptions = Collections.synchronizedList(new
ArrayList<Exception>());
- List<Thread> threads = Lists.newArrayList();
- threads.add(new Thread(new Updater(ds1, id, exceptions)));
- threads.add(new Thread(new Updater(ds2, id, exceptions)));
- Reader r = new Reader(id, exceptions, ds1, ds2);
- Thread reader = new Thread(r);
- for (Thread t : threads) {
- t.start();
- }
- reader.start();
- for (Thread t : threads) {
- t.join();
- }
- r.terminate();
- reader.join();
- for (Exception e : exceptions) {
- throw e;
- }
- }
-
- private static final class Reader implements Runnable {
-
- private final String id;
- private final List<Exception> exceptions;
- private final List<DocumentStore> stores;
- private volatile boolean terminate = false;
- private final Map<Long, NodeDocument> docs = Maps.newHashMap();
-
- public Reader(String id, List<Exception> exceptions, DocumentStore...
stores) {
- this.id = id;
- this.exceptions = exceptions;
- this.stores = Lists.newArrayList(stores);
- }
-
- void terminate() {
- terminate = true;
- }
-
- @Override
- public void run() {
- Random random = new Random();
- while (!terminate) {
- try {
- DocumentStore ds =
stores.get(random.nextInt(stores.size()));
- NodeDocument d = ds.find(Collection.NODES, id);
- long modCount = d.getModCount();
- NodeDocument seen = docs.get(modCount);
- if (seen == null) {
- docs.put(modCount, d);
- } else {
- Map<String, Object> expected = getPropertyValues(seen);
- Map<String, Object> actual = getPropertyValues(d);
- assertEquals(expected, actual);
- }
- Thread.sleep(random.nextInt(1));
- } catch (AssertionError e) {
- exceptions.add(new Exception(e.getMessage()));
- break;
- } catch (Exception e) {
- exceptions.add(e);
- break;
- }
- }
- }
-
- static Map<String, Object> getPropertyValues(NodeDocument doc) {
- Map<String, Object> props = Maps.newHashMap();
- for (String k : doc.keySet()) {
- if (Utils.isPropertyName(k)) {
- props.put(k, doc.get(k));
- }
- }
- return props;
- }
- }
-
- private static final class Updater implements Runnable {
-
- private final DocumentStore ds;
- private final String id;
- private final List<Exception> exceptions;
- private long counter = 0;
-
- public Updater(DocumentStore ds, String id, List<Exception>
exceptions) {
- this.ds = ds;
- this.id = id;
- this.exceptions = exceptions;
- }
-
- @Override
- public void run() {
- String p = Thread.currentThread().getName();
- for (int i = 0; i < 1000; i++) {
- UpdateOp op = new UpdateOp(id, false);
- op.set(p, counter++);
- try {
- ds.update(Collection.NODES, Collections.singletonList(id),
op);
- } catch (Exception e) {
- if (ds instanceof RDBDocumentStore
- && e.getMessage().contains("race?")) {
- LOG.warn(e.toString());
- } else {
- exceptions.add(e);
- }
- }
- }
- }
- }
-
private static long letTimeElapse() {
long ts = System.currentTimeMillis();
while (System.currentTimeMillis() == ts) {
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCWithSplitTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCWithSplitTest.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCWithSplitTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCWithSplitTest.java
Tue Nov 7 13:28:48 2017
@@ -208,17 +208,6 @@ public class VersionGCWithSplitTest {
this.docStore = base;
}
- @Override
- public <T extends Document> void update(final Collection<T> collection,
- final List<String> keys,
- final UpdateOp updateOp) {
- runLocked(new Runnable() {
- public void run() {
- docStore.update(collection, keys, updateOp);
- }
- });
- }
-
@Nonnull
@Override
public <T extends Document> T createOrUpdate(final Collection<T>
collection,
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDBExceptionTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDBExceptionTest.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDBExceptionTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDBExceptionTest.java
Tue Nov 7 13:28:48 2017
@@ -124,15 +124,5 @@ public class MongoDBExceptionTest {
assertTrue("Exception message does not contain id: '" +
e.getMessage() + "'",
e.getMessage().contains(id));
}
-
- exceptionMsg = "update failed";
- try {
- store.update(Collection.NODES, singletonList(id), op);
- fail("DocumentStoreException expected");
- } catch (DocumentStoreException e) {
- assertTrue(e.getMessage().contains(exceptionMsg));
- assertTrue("Exception message does not contain id: '" +
e.getMessage() + "'",
- e.getMessage().contains(id));
- }
}
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/ReadOnlyDocumentStoreWrapperTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/ReadOnlyDocumentStoreWrapperTest.java?rev=1814499&r1=1814498&r2=1814499&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/ReadOnlyDocumentStoreWrapperTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/util/ReadOnlyDocumentStoreWrapperTest.java
Tue Nov 7 13:28:48 2017
@@ -120,15 +120,6 @@ public class ReadOnlyDocumentStoreWrappe
uoeThrown = false;
try {
- readOnlyStore.update(collection, null, null);
- } catch (UnsupportedOperationException uoe) {
- //catch uoe thrown by read only wrapper
- uoeThrown = true;
- }
- assertTrue("update must throw UnsupportedOperationException",
uoeThrown);
- uoeThrown = false;
-
- try {
readOnlyStore.createOrUpdate(collection, (UpdateOp) null);
} catch (UnsupportedOperationException uoe) {
//catch uoe thrown by read only wrapper