>From Wail Alkowaileet <[email protected]>: Wail Alkowaileet has submitted this change. ( 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 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18284 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Ritik Raj <[email protected]> Reviewed-by: Wail Alkowaileet <[email protected]> --- M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/SizeBoundedConcurrentMergePolicy.java 1 file changed, 55 insertions(+), 18 deletions(-) Approvals: Wail Alkowaileet: Looks good to me, approved Ritik Raj: Looks good to me, but someone else must approve Jenkins: Verified; Verified Objections: Anon. E. Moose #1000171: Violations found 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: 2 Gerrit-Owner: Ritik Raj <[email protected]> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Ritik Raj <[email protected]> Gerrit-Reviewer: Wail Alkowaileet Gerrit-Reviewer: Wail Alkowaileet <[email protected]> Gerrit-MessageType: merged
