>From Ritik Raj <[email protected]>:
Ritik Raj has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18284 )
Change subject: [ASTERIXDB-3394][STO] Follow up patch for addressing comments
......................................................................
[ASTERIXDB-3394][STO] Follow up patch for addressing comments
Change-Id: I7beaa28e76e9a4c649dbcd331665479b1a582684
---
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/SizeBoundedConcurrentMergePolicy.java
1 file changed, 50 insertions(+), 18 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/84/18284/1
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/SizeBoundedConcurrentMergePolicy.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/SizeBoundedConcurrentMergePolicy.java
index 1384f39..78fbf99 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/SizeBoundedConcurrentMergePolicy.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/SizeBoundedConcurrentMergePolicy.java
@@ -115,15 +115,32 @@
}
}
- // getMergableIndexesRange gives the [startComponentIndex,
endComponentIndex] which can be merged based on the provided condition
- // 1. localMinMergeComponentCount <= range(startComponentIndex,
endComponentIndex) <= maxMergeComponentCount
- // 2. sumOfComponents(startComponentIndex, endComponentIndex) <
maxComponentSize
- // In order to satisfy range(startComponentIndex, endComponentIndex) <=
maxMergeComponentCount, the search range is bounded by leftBoundary, and if we
reach the maxComponentSize before
- // reaching the leftBoundary, we get our boundary where startIndex >
leftBoundary.
- // but in case the components in the range does not contribute enough to
exceed maxComponentSize then the candidate range
- // will be [leftBoundary, endComponentIndex] which satisfies both 1 & 2.
+ /**
+ * <p>
+ * getMergableIndexesRange gives the [startComponentIndex,
endComponentIndex] which can be merged based on the
+ * provided condition.
+ * </p>
+ * <ol>
+ * <li>localMinMergeComponentCount <= range(startComponentIndex,
endComponentIndex) <= maxMergeComponentCount</li>
+ * <li>sumOfComponents(startComponentIndex, endComponentIndex) <
maxComponentSize</li>
+ * </ol>
+ *
+ *<p>
+ * In order to satisfy range(startComponentIndex, endComponentIndex) <=
maxMergeComponentCount,
+ * search range is bounded by leftBoundary, and if we reach the
maxComponentSize before reaching the leftBoundary,
+ * we get our boundary where startIndex > leftBoundary.
+ *</p>
+ * <p>
+ * but in case the components in the range does not contribute enough to
exceed maxComponentSize then the candidate
+ * range will be [leftBoundary, endComponentIndex] which satisfies both 1
& 2.
+ *</p>
+ * @param diskComponents The disk components within an Index
+ * @param localMinMergeComponentCount The min count of contiguous
components required to call a mergable range.
+ * @param countFlag if enabled, will count all the components that can be
merged, else will return on first found range
+ * @return MergableSolution
+ */
private MergableSolution getMergableIndexesRange(List<ILSMDiskComponent>
diskComponents,
- int localMinMergeComponentCount, boolean
getMergableComponentsCount) {
+ int localMinMergeComponentCount, boolean countFlag) {
int numComponents = diskComponents.size();
int candidateComponentsCount = 0;
for (; candidateComponentsCount < numComponents;
candidateComponentsCount++) {
@@ -134,7 +151,7 @@
}
if (candidateComponentsCount < localMinMergeComponentCount) {
- return new MergableSolution(null, 0);
+ return MergableSolution.NO_SOLUTION;
}
// count the total number of non-overlapping components that can be
merged.
@@ -165,13 +182,13 @@
(resultantComponentSize - currentComponentSize -
lastComponentSize), sizeRatio,
lastComponentSize)) {
int mergableRangeCount = endComponentIndex -
probableStartIndex;
- if (!getMergableComponentsCount) {
- return new MergableSolution(new
Range(probableStartIndex + 1, endComponentIndex),
- mergableRangeCount);
- } else {
+ if (countFlag) {
aRangeFound = true;
endComponentIndex = probableStartIndex;
totalMergableComponentsCount += mergableRangeCount;
+ } else {
+ return new MergableSolution(new
Range(probableStartIndex + 1, endComponentIndex),
+ mergableRangeCount);
}
}
// break as we already exceeded the maxComponentSize, and
still haven't found the suitable range,
@@ -185,13 +202,13 @@
if (isRangeMergable(leftBoundaryIndex, endComponentIndex,
localMinMergeComponentCount,
(resultantComponentSize - lastComponentSize),
sizeRatio, lastComponentSize)) {
int mergableRangeCount = endComponentIndex -
leftBoundaryIndex + 1;
- if (!getMergableComponentsCount) {
- return new MergableSolution(new
Range(leftBoundaryIndex, endComponentIndex),
- mergableRangeCount);
- } else {
+ if (countFlag) {
aRangeFound = true;
endComponentIndex = probableStartIndex;
totalMergableComponentsCount += mergableRangeCount;
+ } else {
+ return new MergableSolution(new
Range(leftBoundaryIndex, endComponentIndex),
+ mergableRangeCount);
}
}
}
@@ -201,7 +218,7 @@
}
}
- return new MergableSolution(null, totalMergableComponentsCount);
+ return new MergableSolution(totalMergableComponentsCount);
}
private void triggerScheduleMerge(ILSMIndex index, List<ILSMDiskComponent>
diskComponents, int startIndex,
@@ -211,9 +228,15 @@
}
static class MergableSolution {
+ public static final MergableSolution NO_SOLUTION = new
MergableSolution(null, 0);
private final Range range;
private final int componentsCount;
+ MergableSolution(int componentsCount) {
+ range = null;
+ this.componentsCount = componentsCount;
+ }
+
MergableSolution(Range range, int componentsCount) {
this.range = range;
this.componentsCount = componentsCount;
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18284
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I7beaa28e76e9a4c649dbcd331665479b1a582684
Gerrit-Change-Number: 18284
Gerrit-PatchSet: 1
Gerrit-Owner: Ritik Raj <[email protected]>
Gerrit-MessageType: newchange