You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2014/01/29 17:20:39 UTC
[5/9] git commit: Fixes advance logic and page count in merge
iterator. Fixes reset in Union iterator
Fixes advance logic and page count in merge iterator. Fixes reset in Union iterator
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/2303624a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/2303624a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/2303624a
Branch: refs/heads/master
Commit: 2303624a1e428201072f5fce1464dd2a45b07d36
Parents: 16455b8
Author: Todd Nine <tn...@apigee.com>
Authored: Fri Jan 24 13:01:33 2014 -0800
Committer: Todd Nine <tn...@apigee.com>
Committed: Tue Jan 28 18:36:11 2014 -0700
----------------------------------------------------------------------
.../query/ir/result/MergeIterator.java | 19 +++--
.../query/ir/result/UnionIterator.java | 15 ++++
.../query/ir/result/UnionIteratorTest.java | 88 ++++++++++++++++++++
3 files changed, 114 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2303624a/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/MergeIterator.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/MergeIterator.java b/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/MergeIterator.java
index 46807e1..e09cff5 100644
--- a/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/MergeIterator.java
+++ b/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/MergeIterator.java
@@ -62,24 +62,27 @@ public abstract class MergeIterator implements ResultIterator {
@Override
public boolean hasNext() {
//if next isn't set, try to advance
- if ( next == null ) {
- doAdvance();
+ if(next != null){
+ return true;
}
- boolean results = next != null && next.size() > 0;
- if ( results ) {
- last = next;
- loadCount++;
- }
+ doAdvance();
+
- return results;
+ return next != null;
}
/** Advance to the next page */
protected void doAdvance() {
next = advance();
+
+
+ if ( next != null && next.size() > 0 ) {
+ last = next;
+ loadCount++;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2303624a/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/UnionIterator.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/UnionIterator.java b/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/UnionIterator.java
index c7b31d1..01daf36 100644
--- a/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/UnionIterator.java
+++ b/stack/core/src/main/java/org/usergrid/persistence/query/ir/result/UnionIterator.java
@@ -120,6 +120,16 @@ public class UnionIterator extends MultiIterator {
}
+ @Override
+ public void doReset() {
+ //reset sub iterators if we need to
+ super.doReset();
+
+ list.reset();
+
+ }
+
+
/**
* A Sorted Set with a max size. When a new entry is added, the max is removed. You can mark the next "min" by
* calling the mark method. Values > min are accepted. Values > min and that are over size are discarded
@@ -224,6 +234,11 @@ public class UnionIterator extends MultiIterator {
public void clear() {
this.list.clear();
}
+
+ public void reset(){
+ clear();
+ this.min = null;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2303624a/stack/core/src/test/java/org/usergrid/persistence/query/ir/result/UnionIteratorTest.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/usergrid/persistence/query/ir/result/UnionIteratorTest.java b/stack/core/src/test/java/org/usergrid/persistence/query/ir/result/UnionIteratorTest.java
index 8fd9ea8..24851e3 100644
--- a/stack/core/src/test/java/org/usergrid/persistence/query/ir/result/UnionIteratorTest.java
+++ b/stack/core/src/test/java/org/usergrid/persistence/query/ir/result/UnionIteratorTest.java
@@ -365,6 +365,94 @@ public class UnionIteratorTest {
}
+ @Test
+ public void resetCorrect() {
+
+ UUID id1 = UUIDUtils.minTimeUUID( 1 );
+ UUID id2 = UUIDUtils.minTimeUUID( 2 );
+ UUID id3 = UUIDUtils.minTimeUUID( 3 );
+ UUID id4 = UUIDUtils.minTimeUUID( 4 );
+ UUID id5 = UUIDUtils.minTimeUUID( 5 );
+ UUID id6 = UUIDUtils.minTimeUUID( 6 );
+ UUID id7 = UUIDUtils.minTimeUUID( 75 );
+
+
+ UnionIterator union = new UnionIterator( 5, 0, null );
+
+ InOrderIterator first = new InOrderIterator( 100 );
+ first.add( id3 );
+ first.add( id6 );
+ first.add( id4 );
+
+
+ InOrderIterator second = new InOrderIterator( 100 );
+ second.add( id7 );
+ second.add( id1 );
+ second.add( id2 );
+ second.add( id5 );
+
+
+ union.addIterator( first );
+ union.addIterator( second );
+
+
+ // now make sure it's right, only 1, 3 and 8 intersect
+ assertTrue( union.hasNext() );
+
+ Set<ScanColumn> ids = union.next();
+
+
+ assertEquals(5, ids.size());
+
+ // now make sure it's right, only 1, 3 and 8 intersect
+ assertTrue( ids.contains( uuidColumn( id1 ) ) );
+ assertTrue( ids.contains( uuidColumn( id2 ) ) );
+ assertTrue( ids.contains( uuidColumn( id3 ) ) );
+ assertTrue( ids.contains( uuidColumn( id4 ) ) );
+ assertTrue( ids.contains( uuidColumn( id5 ) ) );
+
+ ids = union.next();
+
+
+ assertEquals(2, ids.size());
+
+ assertTrue( ids.contains( uuidColumn( id6 ) ) );
+ assertTrue( ids.contains( uuidColumn( id7 ) ) );
+
+ //now try to get the next page
+ ids = union.next();
+ assertNull( ids );
+
+ //now reset and re-test
+ union.reset();
+
+ ids = union.next();
+
+ assertEquals(5, ids.size());
+
+
+ // now make sure it's right, only 1, 3 and 8 intersect
+ assertTrue( ids.contains( uuidColumn( id1 ) ) );
+ assertTrue( ids.contains( uuidColumn( id2 ) ) );
+ assertTrue( ids.contains( uuidColumn( id3 ) ) );
+ assertTrue( ids.contains( uuidColumn( id4 ) ) );
+ assertTrue( ids.contains( uuidColumn( id5 ) ) );
+
+
+ ids = union.next();
+
+ assertEquals(2, ids.size());
+
+ assertTrue( ids.contains( uuidColumn( id6 ) ) );
+ assertTrue( ids.contains( uuidColumn( id7 ) ) );
+
+
+ //now try to get the next page
+ ids = union.next();
+ assertNull( ids );
+ }
+
+
private void reverse( UUID[] array ) {
UUID temp = null;