PHOENIX-2412 Fix test failures due to use of priority queue for merge sort 
(Ankit Singhal/Samarth Jain)


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/6a48b98c
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/6a48b98c
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/6a48b98c

Branch: refs/heads/txn
Commit: 6a48b98cc9b2f5c6c45a4fb21c91d08ebabf1a8d
Parents: 9343743
Author: Samarth <[email protected]>
Authored: Fri Nov 13 10:15:51 2015 -0800
Committer: Samarth <[email protected]>
Committed: Fri Nov 13 10:15:51 2015 -0800

----------------------------------------------------------------------
 .../iterate/MergeSortResultIterator.java        | 80 +++++++++-----------
 1 file changed, 34 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/6a48b98c/phoenix-core/src/main/java/org/apache/phoenix/iterate/MergeSortResultIterator.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/MergeSortResultIterator.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/MergeSortResultIterator.java
index 75843eb..e076a40 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/MergeSortResultIterator.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/MergeSortResultIterator.java
@@ -34,7 +34,6 @@ import org.apache.phoenix.util.ServerUtil;
 public abstract class MergeSortResultIterator implements PeekingResultIterator 
{
     protected final ResultIterators resultIterators;
     protected final ImmutableBytesWritable tempPtr = new 
ImmutableBytesWritable();
-    private List<PeekingResultIterator> iterators;
     private PriorityQueue<MaterializedComparableResultIterator> minHeap;
     private final IteratorComparator itrComparator = new IteratorComparator();
 
@@ -42,34 +41,6 @@ public abstract class MergeSortResultIterator implements 
PeekingResultIterator {
         this.resultIterators = iterators;
     }
 
-    private List<PeekingResultIterator> getIterators() throws SQLException {
-        if (iterators == null) {
-            iterators = resultIterators.getIterators();
-        }
-        return iterators;
-    }
-
-    private PriorityQueue<MaterializedComparableResultIterator> getMinHeap() 
throws SQLException {
-        if (minHeap == null) {
-            List<PeekingResultIterator> iterators = getIterators();
-            minHeap = new 
PriorityQueue<MaterializedComparableResultIterator>(iterators.size());
-            for (PeekingResultIterator itr : iterators) {
-                if (itr.peek() == null) {
-                    itr.close();
-                    continue;
-                }
-                minHeap.add(new MaterializedComparableResultIterator(itr, 
itrComparator));
-            }
-        }
-        return minHeap;
-    }
-
-    private class IteratorComparator implements Comparator<Tuple> {
-        public int compare(Tuple c1, Tuple c2) {
-            return MergeSortResultIterator.this.compare(c1, c2);
-        }
-    }
-
     @Override
     public void close() throws SQLException {
         SQLException toThrow = null;
@@ -81,8 +52,8 @@ public abstract class MergeSortResultIterator implements 
PeekingResultIterator {
             toThrow = ServerUtil.parseServerException(e);
         } finally {
             try {
-                if (iterators != null) {
-                    SQLCloseables.closeAll(iterators);
+                if (minHeap != null) {
+                    SQLCloseables.closeAllQuietly(minHeap);
                 }
             } catch (Exception e) {
                 if (toThrow == null) {
@@ -91,36 +62,24 @@ public abstract class MergeSortResultIterator implements 
PeekingResultIterator {
                     
toThrow.setNextException(ServerUtil.parseServerException(e));
                 }
             } finally {
-                if (toThrow != null) {
-                    throw toThrow;
-                }
+                if (toThrow != null) { throw toThrow; }
             }
         }
     }
 
     abstract protected int compare(Tuple t1, Tuple t2);
 
-    private MaterializedComparableResultIterator minIterator() throws 
SQLException {
-        PriorityQueue<MaterializedComparableResultIterator> minHeap = 
getMinHeap();
-        MaterializedComparableResultIterator minIterator = minHeap.peek();
-        return minIterator;
-    }
-
     @Override
     public Tuple peek() throws SQLException {
         MaterializedComparableResultIterator iterator = minIterator();
-        if (iterator == null) {
-            return null;
-        }
+        if (iterator == null) { return null; }
         return iterator.peek();
     }
 
     @Override
     public Tuple next() throws SQLException {
         MaterializedComparableResultIterator iterator = minIterator();
-        if (iterator == null) {
-            return null;
-        }
+        if (iterator == null) { return null; }
         Tuple next = iterator.next();
         minHeap.poll();
         if (iterator.peek() != null) {
@@ -130,4 +89,33 @@ public abstract class MergeSortResultIterator implements 
PeekingResultIterator {
         }
         return next;
     }
+
+    private PriorityQueue<MaterializedComparableResultIterator> getMinHeap() 
throws SQLException {
+        if (minHeap == null) {
+            List<PeekingResultIterator> iterators = 
resultIterators.getIterators();
+            minHeap = new 
PriorityQueue<MaterializedComparableResultIterator>(iterators.size());
+            for (PeekingResultIterator itr : iterators) {
+                if (itr.peek() == null) {
+                    itr.close();
+                    continue;
+                }
+                minHeap.add(new MaterializedComparableResultIterator(itr, 
itrComparator));
+            }
+        }
+        return minHeap;
+    }
+
+    private class IteratorComparator implements Comparator<Tuple> {
+        @Override
+        public int compare(Tuple c1, Tuple c2) {
+            return MergeSortResultIterator.this.compare(c1, c2);
+        }
+    }
+
+    private MaterializedComparableResultIterator minIterator() throws 
SQLException {
+        PriorityQueue<MaterializedComparableResultIterator> minHeap = 
getMinHeap();
+        MaterializedComparableResultIterator minIterator = minHeap.peek();
+        return minIterator;
+    }
+
 }

Reply via email to