Author: catholicon
Date: Thu Mar 1 04:17:20 2018
New Revision: 1825620
URL: http://svn.apache.org/viewvc?rev=1825620&view=rev
Log:
OAK-7290: Reindexing using --doc-traversal-mode should have configurable upper
bound for mem usage
Implement mem bound in linked list
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileBufferLinkedList.java
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileBufferLinkedListTest.java
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileBufferLinkedList.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileBufferLinkedList.java?rev=1825620&r1=1825619&r2=1825620&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileBufferLinkedList.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileBufferLinkedList.java
Thu Mar 1 04:17:20 2018
@@ -39,16 +39,31 @@ public class FlatFileBufferLinkedList {
private int size = 0;
private long memUsage = 0;
+ private final long memLimit;
+
+ FlatFileBufferLinkedList() {
+ this(Long.MAX_VALUE);
+ }
+
+ FlatFileBufferLinkedList(long memLimit) {
+ this.memLimit = memLimit;
+ }
/**
* Add {@code item} at the tail of the list
*/
public void add(@Nonnull NodeStateEntry item) {
Preconditions.checkArgument(item != null, "Can't add null to the
list");
+ long incomingSize = item.estimatedMemUsage();
+ long memUsage = estimatedMemoryUsage();
+ Preconditions.checkState(memUsage + incomingSize <= memLimit,
+ String.format(
+ "Adding item (%s) estimated with %s bytes would increase mem
usage beyond upper limit (%s)." +
+ " Current estimated mem usage is %s bytes",
item.getPath(), incomingSize, memLimit, memUsage));
tail.next = new ListNode(item);
tail = tail.next;
size++;
- memUsage += item.estimatedMemUsage();
+ this.memUsage += incomingSize;
}
/**
Modified:
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileBufferLinkedListTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileBufferLinkedListTest.java?rev=1825620&r1=1825619&r2=1825620&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileBufferLinkedListTest.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileBufferLinkedListTest.java
Thu Mar 1 04:17:20 2018
@@ -150,6 +150,26 @@ public class FlatFileBufferLinkedListTes
}
@Test
+ public void memLimit() {
+ list = new FlatFileBufferLinkedList(10);
+ NodeStateEntry e10Bytes = new NodeStateEntry(EMPTY_NODE, "/", 10);
+ NodeStateEntry e1Byte = new NodeStateEntry(EMPTY_NODE, "/", 1);
+
+ list.add(e10Bytes); //this should succeed
+
+ list.remove();
+ list.add(e1Byte);
+ try {
+ list.add(e10Bytes);
+ } catch (IllegalStateException ise) {
+ //ignore
+ }
+
+ assertEquals("Addition beyond mem limit shouldn't get added", 1,
list.size());
+ assertEquals("Addition beyond mem limit shouldn't show up in usage",
1, list.estimatedMemoryUsage());
+ }
+
+ @Test
public void basics() {
list.add(TEST_NODE_STATE_ENTRY);
assertEquals("Adding an item should change size", 1, list.size());