From 2278740878264362fd0f51e5f782715a89e4964f Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Tue, 19 Sep 2006 06:07:30 +0000 Subject: Removed all cursor synchronization. It just adds overhead and no real (or needed) thread safety. --- .../amazon/carbonado/cursor/AbstractCursor.java | 5 +- .../amazon/carbonado/cursor/DifferenceCursor.java | 6 +- .../amazon/carbonado/cursor/FilteredCursor.java | 70 ++++++-------- .../com/amazon/carbonado/cursor/GroupedCursor.java | 104 ++++++++++----------- .../carbonado/cursor/IntersectionCursor.java | 6 +- .../carbonado/cursor/MultiTransformedCursor.java | 86 ++++++++--------- .../com/amazon/carbonado/cursor/SortedCursor.java | 8 +- .../cursor/SymmetricDifferenceCursor.java | 6 +- .../amazon/carbonado/cursor/TransformedCursor.java | 70 ++++++-------- .../com/amazon/carbonado/cursor/UnionCursor.java | 6 +- 10 files changed, 166 insertions(+), 201 deletions(-) (limited to 'src/main/java/com/amazon/carbonado/cursor') diff --git a/src/main/java/com/amazon/carbonado/cursor/AbstractCursor.java b/src/main/java/com/amazon/carbonado/cursor/AbstractCursor.java index cf64a24..fb34617 100644 --- a/src/main/java/com/amazon/carbonado/cursor/AbstractCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/AbstractCursor.java @@ -64,10 +64,7 @@ public abstract class AbstractCursor implements Cursor { return list; } - public synchronized int skipNext(int amount) throws FetchException { - // This method is synchronized to avoid potential race conditions - // between calls to hasNext and next in the loop below. - + public int skipNext(int amount) throws FetchException { if (amount <= 0) { if (amount < 0) { throw new IllegalArgumentException("Cannot skip negative amount: " + amount); diff --git a/src/main/java/com/amazon/carbonado/cursor/DifferenceCursor.java b/src/main/java/com/amazon/carbonado/cursor/DifferenceCursor.java index 39455c8..8b330ea 100644 --- a/src/main/java/com/amazon/carbonado/cursor/DifferenceCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/DifferenceCursor.java @@ -59,14 +59,14 @@ public class DifferenceCursor extends AbstractCursor { mOrder = order; } - public synchronized void close() throws FetchException { + public void close() throws FetchException { mLeftCursor.close(); mRightCursor.close(); mNext = null; mNextRight = null; } - public synchronized boolean hasNext() throws FetchException { + public boolean hasNext() throws FetchException { if (mNext != null) { return true; } @@ -109,7 +109,7 @@ public class DifferenceCursor extends AbstractCursor { } } - public synchronized S next() throws FetchException { + public S next() throws FetchException { if (hasNext()) { S next = mNext; mNext = null; diff --git a/src/main/java/com/amazon/carbonado/cursor/FilteredCursor.java b/src/main/java/com/amazon/carbonado/cursor/FilteredCursor.java index 60b3c81..f426f36 100644 --- a/src/main/java/com/amazon/carbonado/cursor/FilteredCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/FilteredCursor.java @@ -82,61 +82,53 @@ public abstract class FilteredCursor extends AbstractCursor { protected abstract boolean isAllowed(S storable); public void close() throws FetchException { - synchronized (mCursor) { - mCursor.close(); - mNext = null; - } + mCursor.close(); + mNext = null; } public boolean hasNext() throws FetchException { - synchronized (mCursor) { - if (mNext != null) { - return true; - } - try { - int count = 0; - while (mCursor.hasNext()) { - S next = mCursor.next(); - if (isAllowed(next)) { - mNext = next; - return true; - } - interruptCheck(++count); + if (mNext != null) { + return true; + } + try { + int count = 0; + while (mCursor.hasNext()) { + S next = mCursor.next(); + if (isAllowed(next)) { + mNext = next; + return true; } - } catch (NoSuchElementException e) { + interruptCheck(++count); } - return false; + } catch (NoSuchElementException e) { } + return false; } public S next() throws FetchException { - synchronized (mCursor) { - if (hasNext()) { - S next = mNext; - mNext = null; - return next; - } - throw new NoSuchElementException(); + if (hasNext()) { + S next = mNext; + mNext = null; + return next; } + throw new NoSuchElementException(); } public int skipNext(int amount) throws FetchException { - synchronized (mCursor) { - if (amount <= 0) { - if (amount < 0) { - throw new IllegalArgumentException("Cannot skip negative amount: " + amount); - } - return 0; - } - - int count = 0; - while (--amount >= 0 && hasNext()) { - interruptCheck(++count); - mNext = null; + if (amount <= 0) { + if (amount < 0) { + throw new IllegalArgumentException("Cannot skip negative amount: " + amount); } + return 0; + } - return count; + int count = 0; + while (--amount >= 0 && hasNext()) { + interruptCheck(++count); + mNext = null; } + + return count; } private void interruptCheck(int count) throws FetchException { diff --git a/src/main/java/com/amazon/carbonado/cursor/GroupedCursor.java b/src/main/java/com/amazon/carbonado/cursor/GroupedCursor.java index 0b17e50..bf838b1 100644 --- a/src/main/java/com/amazon/carbonado/cursor/GroupedCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/GroupedCursor.java @@ -113,87 +113,79 @@ public abstract class GroupedCursor extends AbstractCursor { protected abstract G finishGroup() throws FetchException; public void close() throws FetchException { - synchronized (mCursor) { - mCursor.close(); - mGroupLeader = null; - mNextAggregate = null; - } + mCursor.close(); + mGroupLeader = null; + mNextAggregate = null; } public boolean hasNext() throws FetchException { - synchronized (mCursor) { - if (mNextAggregate != null) { - return true; - } + if (mNextAggregate != null) { + return true; + } - try { - int count = 0; - if (mCursor.hasNext()) { - if (mGroupLeader == null) { - beginGroup(mGroupLeader = mCursor.next()); - } + try { + int count = 0; + if (mCursor.hasNext()) { + if (mGroupLeader == null) { + beginGroup(mGroupLeader = mCursor.next()); + } - while (mCursor.hasNext()) { - S groupMember = mCursor.next(); + while (mCursor.hasNext()) { + S groupMember = mCursor.next(); - if (mGroupComparator.compare(mGroupLeader, groupMember) == 0) { - addToGroup(groupMember); - } else { - G aggregate = finishGroup(); + if (mGroupComparator.compare(mGroupLeader, groupMember) == 0) { + addToGroup(groupMember); + } else { + G aggregate = finishGroup(); - beginGroup(mGroupLeader = groupMember); + beginGroup(mGroupLeader = groupMember); - if (aggregate != null) { - mNextAggregate = aggregate; - return true; - } + if (aggregate != null) { + mNextAggregate = aggregate; + return true; } - - interruptCheck(++count); } - G aggregate = finishGroup(); + interruptCheck(++count); + } - if (aggregate != null) { - mNextAggregate = aggregate; - return true; - } + G aggregate = finishGroup(); + + if (aggregate != null) { + mNextAggregate = aggregate; + return true; } - } catch (NoSuchElementException e) { } - - return false; + } catch (NoSuchElementException e) { } + + return false; } public G next() throws FetchException { - synchronized (mCursor) { - if (hasNext()) { - G next = mNextAggregate; - mNextAggregate = null; - return next; - } - throw new NoSuchElementException(); + if (hasNext()) { + G next = mNextAggregate; + mNextAggregate = null; + return next; } + throw new NoSuchElementException(); } public int skipNext(int amount) throws FetchException { - synchronized (mCursor) { - if (amount <= 0) { - if (amount < 0) { - throw new IllegalArgumentException("Cannot skip negative amount: " + amount); - } - return 0; - } - - int count = 0; - while (--amount >= 0 && hasNext()) { - interruptCheck(++count); - mNextAggregate = null; + if (amount <= 0) { + if (amount < 0) { + throw new IllegalArgumentException("Cannot skip negative amount: " + amount); } + return 0; + } - return count; + int count = 0; + while (--amount >= 0 && hasNext()) { + interruptCheck(++count); + mNextAggregate = null; } + + return count; } private void interruptCheck(int count) throws FetchException { diff --git a/src/main/java/com/amazon/carbonado/cursor/IntersectionCursor.java b/src/main/java/com/amazon/carbonado/cursor/IntersectionCursor.java index 9d11b2f..58aba0d 100644 --- a/src/main/java/com/amazon/carbonado/cursor/IntersectionCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/IntersectionCursor.java @@ -58,13 +58,13 @@ public class IntersectionCursor extends AbstractCursor { mOrder = order; } - public synchronized void close() throws FetchException { + public void close() throws FetchException { mLeftCursor.close(); mRightCursor.close(); mNext = null; } - public synchronized boolean hasNext() throws FetchException { + public boolean hasNext() throws FetchException { if (mNext != null) { return true; } @@ -107,7 +107,7 @@ public class IntersectionCursor extends AbstractCursor { } } - public synchronized S next() throws FetchException { + public S next() throws FetchException { if (hasNext()) { S next = mNext; mNext = null; diff --git a/src/main/java/com/amazon/carbonado/cursor/MultiTransformedCursor.java b/src/main/java/com/amazon/carbonado/cursor/MultiTransformedCursor.java index 0cfd197..feeb414 100644 --- a/src/main/java/com/amazon/carbonado/cursor/MultiTransformedCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/MultiTransformedCursor.java @@ -54,73 +54,65 @@ public abstract class MultiTransformedCursor extends AbstractCursor { protected abstract Cursor transform(S storable) throws FetchException; public void close() throws FetchException { - synchronized (mCursor) { - mCursor.close(); - if (mNextCursor != null) { - mNextCursor.close(); - mNextCursor = null; - } + mCursor.close(); + if (mNextCursor != null) { + mNextCursor.close(); + mNextCursor = null; } } public boolean hasNext() throws FetchException { - synchronized (mCursor) { - if (mNextCursor != null) { - if (mNextCursor.hasNext()) { - return true; - } - mNextCursor.close(); - mNextCursor = null; + if (mNextCursor != null) { + if (mNextCursor.hasNext()) { + return true; } - try { - int count = 0; - while (mCursor.hasNext()) { - Cursor nextCursor = transform(mCursor.next()); - if (nextCursor != null) { - if (nextCursor.hasNext()) { - mNextCursor = nextCursor; - return true; - } - nextCursor.close(); + mNextCursor.close(); + mNextCursor = null; + } + try { + int count = 0; + while (mCursor.hasNext()) { + Cursor nextCursor = transform(mCursor.next()); + if (nextCursor != null) { + if (nextCursor.hasNext()) { + mNextCursor = nextCursor; + return true; } - interruptCheck(++count); + nextCursor.close(); } - } catch (NoSuchElementException e) { + interruptCheck(++count); } - return false; + } catch (NoSuchElementException e) { } + return false; } public T next() throws FetchException { - synchronized (mCursor) { - if (hasNext()) { - return mNextCursor.next(); - } - throw new NoSuchElementException(); + if (hasNext()) { + return mNextCursor.next(); } + throw new NoSuchElementException(); } public int skipNext(int amount) throws FetchException { - synchronized (mCursor) { - if (amount <= 0) { - if (amount < 0) { - throw new IllegalArgumentException("Cannot skip negative amount: " + amount); - } - return 0; + if (amount <= 0) { + if (amount < 0) { + throw new IllegalArgumentException("Cannot skip negative amount: " + amount); } + return 0; + } - int count = 0; - while (hasNext()) { - int chunk = mNextCursor.skipNext(amount); - count += chunk; - if ((amount -= chunk) <= 0) { - break; - } - interruptCheck(count); + int count = 0; + while (hasNext()) { + int chunk = mNextCursor.skipNext(amount); + count += chunk; + if ((amount -= chunk) <= 0) { + break; } - - return count; + interruptCheck(count); } + + return count; } private void interruptCheck(int count) throws FetchException { diff --git a/src/main/java/com/amazon/carbonado/cursor/SortedCursor.java b/src/main/java/com/amazon/carbonado/cursor/SortedCursor.java index 7a728bb..9cee89b 100644 --- a/src/main/java/com/amazon/carbonado/cursor/SortedCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/SortedCursor.java @@ -198,13 +198,13 @@ public class SortedCursor extends AbstractCursor { }; } - public synchronized void close() throws FetchException { + public void close() throws FetchException { mCursor.close(); mChunkIterator = null; mChunkBuffer.close(); } - public synchronized boolean hasNext() throws FetchException { + public boolean hasNext() throws FetchException { prepareNextChunk(); try { if (mChunkIterator.hasNext()) { @@ -217,7 +217,7 @@ public class SortedCursor extends AbstractCursor { return false; } - public synchronized S next() throws FetchException { + public S next() throws FetchException { prepareNextChunk(); try { return mChunkIterator.next(); @@ -233,7 +233,7 @@ public class SortedCursor extends AbstractCursor { } } - public synchronized int skipNext(int amount) throws FetchException { + public int skipNext(int amount) throws FetchException { if (amount <= 0) { if (amount < 0) { throw new IllegalArgumentException("Cannot skip negative amount: " + amount); diff --git a/src/main/java/com/amazon/carbonado/cursor/SymmetricDifferenceCursor.java b/src/main/java/com/amazon/carbonado/cursor/SymmetricDifferenceCursor.java index 6851464..1f94e30 100644 --- a/src/main/java/com/amazon/carbonado/cursor/SymmetricDifferenceCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/SymmetricDifferenceCursor.java @@ -60,7 +60,7 @@ public class SymmetricDifferenceCursor extends AbstractCursor { mOrder = order; } - public synchronized void close() throws FetchException { + public void close() throws FetchException { mLeftCursor.close(); mRightCursor.close(); mNextLeft = null; @@ -76,7 +76,7 @@ public class SymmetricDifferenceCursor extends AbstractCursor { * left source cursor, and >0 if next element is from right source * cursor. */ - public synchronized int compareNext() throws FetchException { + public int compareNext() throws FetchException { if (mCompareResult != 0) { return mCompareResult; } @@ -105,7 +105,7 @@ public class SymmetricDifferenceCursor extends AbstractCursor { } } - public synchronized S next() throws FetchException { + public S next() throws FetchException { S next; int result = compareNext(); if (result < 0) { diff --git a/src/main/java/com/amazon/carbonado/cursor/TransformedCursor.java b/src/main/java/com/amazon/carbonado/cursor/TransformedCursor.java index 0860cf0..9f9efe7 100644 --- a/src/main/java/com/amazon/carbonado/cursor/TransformedCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/TransformedCursor.java @@ -53,61 +53,53 @@ public abstract class TransformedCursor extends AbstractCursor { protected abstract T transform(S storable) throws FetchException; public void close() throws FetchException { - synchronized (mCursor) { - mCursor.close(); - mNext = null; - } + mCursor.close(); + mNext = null; } public boolean hasNext() throws FetchException { - synchronized (mCursor) { - if (mNext != null) { - return true; - } - try { - int count = 0; - while (mCursor.hasNext()) { - T next = transform(mCursor.next()); - if (next != null) { - mNext = next; - return true; - } - interruptCheck(++count); + if (mNext != null) { + return true; + } + try { + int count = 0; + while (mCursor.hasNext()) { + T next = transform(mCursor.next()); + if (next != null) { + mNext = next; + return true; } - } catch (NoSuchElementException e) { + interruptCheck(++count); } - return false; + } catch (NoSuchElementException e) { } + return false; } public T next() throws FetchException { - synchronized (mCursor) { - if (hasNext()) { - T next = mNext; - mNext = null; - return next; - } - throw new NoSuchElementException(); + if (hasNext()) { + T next = mNext; + mNext = null; + return next; } + throw new NoSuchElementException(); } public int skipNext(int amount) throws FetchException { - synchronized (mCursor) { - if (amount <= 0) { - if (amount < 0) { - throw new IllegalArgumentException("Cannot skip negative amount: " + amount); - } - return 0; - } - - int count = 0; - while (--amount >= 0 && hasNext()) { - interruptCheck(++count); - mNext = null; + if (amount <= 0) { + if (amount < 0) { + throw new IllegalArgumentException("Cannot skip negative amount: " + amount); } + return 0; + } - return count; + int count = 0; + while (--amount >= 0 && hasNext()) { + interruptCheck(++count); + mNext = null; } + + return count; } private void interruptCheck(int count) throws FetchException { diff --git a/src/main/java/com/amazon/carbonado/cursor/UnionCursor.java b/src/main/java/com/amazon/carbonado/cursor/UnionCursor.java index 7a62678..7e4fde3 100644 --- a/src/main/java/com/amazon/carbonado/cursor/UnionCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/UnionCursor.java @@ -59,14 +59,14 @@ public class UnionCursor extends AbstractCursor { mOrder = order; } - public synchronized void close() throws FetchException { + public void close() throws FetchException { mLeftCursor.close(); mRightCursor.close(); mNextLeft = null; mNextRight = null; } - public synchronized boolean hasNext() throws FetchException { + public boolean hasNext() throws FetchException { if (mNextLeft == null && mLeftCursor.hasNext()) { mNextLeft = mLeftCursor.next(); } @@ -76,7 +76,7 @@ public class UnionCursor extends AbstractCursor { return mNextLeft != null || mNextRight != null; } - public synchronized S next() throws FetchException { + public S next() throws FetchException { if (hasNext()) { S next; if (mNextLeft == null) { -- cgit v1.2.3