This is an automated email from the ASF dual-hosted git repository.

sboikov pushed a commit to branch ignite-invokeAll
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 6d8f53b31dbef26636da42804cfb6e0cfe1c2787
Author: Sergi Vladykin <sergi.vlady...@gmail.com>
AuthorDate: Fri Feb 22 21:26:33 2019 +0300

    nextRow field
---
 .../cache/persistence/tree/BPlusTree.java          | 44 +++++++++++++++++-----
 1 file changed, 34 insertions(+), 10 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
index a02df7d..f911280 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
@@ -2895,6 +2895,9 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
          */
         boolean gettingHigh;
 
+        /** Used in batch operations like {@link InvokeAll}. */
+        L nextRow;
+
         /**
          * @param row Row.
          * @param findLast find last row.
@@ -2908,6 +2911,18 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
             this.findLast = findLast;
         }
 
+        /**
+         * @param sortedRows Sorted rows.
+         */
+        final void takeNextRow(Iterator<? extends L> sortedRows) {
+            if (sortedRows.hasNext()) {
+                nextRow = sortedRows.next();
+                assert nextRow != null;
+            }
+            else
+                nextRow = null;
+        }
+
         @SuppressWarnings({"unchecked", "WrapperTypeMayBePrimitive"})
         protected final T convertOldRow(boolean needOld, T oldRow) {
             if (needOld)
@@ -2952,10 +2967,14 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
          * @param sortedRows Sorted rows.
          * @return {@code true} If was successfully switched to the next row.
          */
-        protected final boolean doNextRow(Result res, Iterator<? extends L> 
sortedRows) {
-            if (res.retry || !isFinished() || !sortedRows.hasNext())
+        protected final boolean doSwitchToNextRow(Result res, Iterator<? 
extends L> sortedRows) {
+            if (nextRow == null || res.retry || !isFinished())
                 return false;
 
+            // Switch to the next row.
+            row = nextRow;
+            takeNextRow(sortedRows);
+
             // Well need to get high enough to start new search.
             assert !gettingHigh;
             gettingHigh = true;
@@ -2963,9 +2982,6 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
             // Reinitialize state to continue working with the next row.
             lockRetriesCnt = getLockRetries();
 
-            row = sortedRows.next();
-            assert row != null;
-
             return true;
         }
 
@@ -3002,7 +3018,7 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
          * @param cnt Row count.
          * @return Insertion point.
          */
-        private int findInsertionPointGettingHigh(int lvl, BPlusIO<L> io, long 
pageAddr, int cnt) throws IgniteCheckedException {
+        protected final int findInsertionPointGettingHigh(int lvl, BPlusIO<L> 
io, long pageAddr, int cnt) throws IgniteCheckedException {
             int idx;
 
             if (cnt == 0)
@@ -3224,11 +3240,13 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
 
             this.sortedRows = sortedRows;
             foundRows = new ArrayList<>();
+
+            takeNextRow(sortedRows);
         }
 
         /** {@inheritDoc} */
         @Override boolean switchToNextRow(Result res) {
-            if (!doNextRow(res, sortedRows))
+            if (!doSwitchToNextRow(res, sortedRows))
                 return false;
 
             // Reset state.
@@ -3656,11 +3674,13 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
 
             this.sortedRows = sortedRows;
             oldRows = new ArrayList<>();
+
+            takeNextRow(sortedRows);
         }
 
         /** {@inheritDoc} */
         @Override boolean switchToNextRow(Result res) {
-            if (!doNextRow(res, sortedRows))
+            if (!doSwitchToNextRow(res, sortedRows))
                 return false;
 
             // Reset state.
@@ -4051,11 +4071,13 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
 
             this.sortedRows = sortedRows;
             this.closures = closures;
+
+            takeNextRow(sortedRows);
         }
 
         /** {@inheritDoc} */
         @Override boolean switchToNextRow(Result res) throws 
IgniteCheckedException {
-            if (!doNextRow(res, sortedRows))
+            if (!doSwitchToNextRow(res, sortedRows))
                 return false;
 
             reuseFreePagesFromBag(reuseBag, 15);
@@ -4404,11 +4426,13 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
 
             this.sortedRows = sortedRows;
             removedRows = new ArrayList<>();
+
+            takeNextRow(sortedRows);
         }
 
         /** {@inheritDoc} */
         @Override boolean switchToNextRow(Result res) throws 
IgniteCheckedException {
-            if (!doNextRow(res, sortedRows))
+            if (!doSwitchToNextRow(res, sortedRows))
                 return false;
 
             reuseFreePagesFromBag(reuseBag, 15);

Reply via email to