You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by se...@apache.org on 2017/02/16 14:40:54 UTC

[02/17] ignite git commit: ignite-4652 - reverted

ignite-4652 - reverted


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/164995f6
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/164995f6
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/164995f6

Branch: refs/heads/ignite-4652
Commit: 164995f601c188a45275d2f2d0dbbc0b6a742523
Parents: 1fd247f
Author: Sergi Vladykin <se...@gmail.com>
Authored: Mon Feb 6 18:23:29 2017 +0300
Committer: Sergi Vladykin <se...@gmail.com>
Committed: Mon Feb 6 18:23:29 2017 +0300

----------------------------------------------------------------------
 .../cache/database/tree/BPlusTree.java          | 197 ++++---------------
 1 file changed, 37 insertions(+), 160 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/164995f6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
index 39b8b10..860f542 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
@@ -68,10 +68,6 @@ import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTre
 import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTree.Bool.FALSE;
 import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTree.Bool.READY;
 import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTree.Bool.TRUE;
-import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTree.InvokeType.INSERT;
-import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTree.InvokeType.NOOP;
-import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTree.InvokeType.REMOVE;
-import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTree.InvokeType.REPLACE;
 import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTree.Result.FOUND;
 import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTree.Result.GO_DOWN;
 import static org.apache.ignite.internal.processors.cache.database.tree.BPlusTree.Result.GO_DOWN_X;
@@ -228,9 +224,9 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
             long res = doAskNeighbor(io, pageAddr, back);
 
             if (back) {
-                assert g.getClass() == Invoke.class;
+                assert g.getClass() == Remove.class;
 
-                if (io.getForward(pageAddr) != g.backId) // See how g.backId is setup in invokeDown for this check.
+                if (io.getForward(pageAddr) != g.backId) // See how g.backId is setup in removeDown for this check.
                     return RETRY;
 
                 g.backId = res;
@@ -423,14 +419,14 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     }
 
     /** */
-    private final GetPageHandler<Invoke> rmvFromLeaf = new RemoveFromLeaf();
+    private final GetPageHandler<Remove> rmvFromLeaf = new RemoveFromLeaf();
 
     /**
      *
      */
-    private class RemoveFromLeaf extends GetPageHandler<Invoke> {
+    private class RemoveFromLeaf extends GetPageHandler<Remove> {
         /** {@inheritDoc} */
-        @Override public Result run0(Page leaf, long pageAddr, BPlusIO<L> io, Invoke r, int lvl)
+        @Override public Result run0(Page leaf, long pageAddr, BPlusIO<L> io, Remove r, int lvl)
             throws IgniteCheckedException {
             assert lvl == 0 : lvl; // Leaf.
 
@@ -494,14 +490,14 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     }
 
     /** */
-    private final GetPageHandler<Invoke> lockBackAndRmvFromLeaf = new LockBackAndRmvFromLeaf();
+    private final GetPageHandler<Remove> lockBackAndRmvFromLeaf = new LockBackAndRmvFromLeaf();
 
     /**
      *
      */
-    private class LockBackAndRmvFromLeaf extends GetPageHandler<Invoke> {
+    private class LockBackAndRmvFromLeaf extends GetPageHandler<Remove> {
         /** {@inheritDoc} */
-        @Override protected Result run0(Page back, long pageAddr, BPlusIO<L> io, Invoke r, int lvl)
+        @Override protected Result run0(Page back, long pageAddr, BPlusIO<L> io, Remove r, int lvl)
             throws IgniteCheckedException {
             // Check that we have consistent view of the world.
             if (io.getForward(pageAddr) != r.pageId)
@@ -519,14 +515,14 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     }
 
     /** */
-    private final GetPageHandler<Invoke> lockBackAndTail = new LockBackAndTail();
+    private final GetPageHandler<Remove> lockBackAndTail = new LockBackAndTail();
 
     /**
      *
      */
-    private class LockBackAndTail extends GetPageHandler<Invoke> {
+    private class LockBackAndTail extends GetPageHandler<Remove> {
         /** {@inheritDoc} */
-        @Override public Result run0(Page back, long pageAddr, BPlusIO<L> io, Invoke r, int lvl)
+        @Override public Result run0(Page back, long pageAddr, BPlusIO<L> io, Remove r, int lvl)
             throws IgniteCheckedException {
             // Check that we have consistent view of the world.
             if (io.getForward(pageAddr) != r.pageId)
@@ -543,14 +539,14 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     }
 
     /** */
-    private final GetPageHandler<Invoke> lockTailForward = new LockTailForward();
+    private final GetPageHandler<Remove> lockTailForward = new LockTailForward();
 
     /**
      *
      */
-    private class LockTailForward extends GetPageHandler<Invoke> {
+    private class LockTailForward extends GetPageHandler<Remove> {
         /** {@inheritDoc} */
-        @Override protected Result run0(Page page, long pageAddr, BPlusIO<L> io, Invoke r, int lvl)
+        @Override protected Result run0(Page page, long pageAddr, BPlusIO<L> io, Remove r, int lvl)
             throws IgniteCheckedException {
             r.addTail(page, pageAddr, io, lvl, Tail.FORWARD);
 
@@ -559,14 +555,14 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     }
 
     /** */
-    private final GetPageHandler<Invoke> lockTail = new LockTail();
+    private final GetPageHandler<Remove> lockTail = new LockTail();
 
     /**
      *
      */
-    private class LockTail extends GetPageHandler<Invoke> {
+    private class LockTail extends GetPageHandler<Remove> {
         /** {@inheritDoc} */
-        @Override public Result run0(Page page, long pageAddr, BPlusIO<L> io, Invoke r, int lvl)
+        @Override public Result run0(Page page, long pageAddr, BPlusIO<L> io, Remove r, int lvl)
             throws IgniteCheckedException {
             assert lvl > 0 : lvl; // We are not at the bottom.
 
@@ -1405,42 +1401,27 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         return res != null ? res : false;
     }
 
-    /**
-     * @param row Lookup row.
-     * @param needOld {@code True} if need return removed row.
-     * @return Removed row.
-     * @throws IgniteCheckedException If failed.
-     */
-    private T doRemove(L row, boolean needOld) throws IgniteCheckedException {
-        return doInvoke(row, needOld, null);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
+    /** {@inheritDoc} */
     @Override public void invoke(L key, InvokeClosure<T> c) throws IgniteCheckedException {
-        assert c != null;
-
-        doInvoke(key, false, c);
+        // TODO
     }
 
     /**
      * @param row Lookup row.
      * @param needOld {@code True} if need return removed row.
-     * @param c Invoke closure or {@code null} if it is just a plain remove operation.
      * @return Removed row.
      * @throws IgniteCheckedException If failed.
      */
-    private T doInvoke(L row, boolean needOld, InvokeClosure<T> c) throws IgniteCheckedException {
+    private T doRemove(L row, boolean needOld) throws IgniteCheckedException {
         checkDestroyed();
 
-        Invoke r = new Invoke(row, needOld, c);
+        Remove r = new Remove(row, needOld);
 
         try {
             for (;;) {
                 r.init();
 
-                switch (invokeDown(r, r.rootId, 0L, 0L, r.rootLvl)) {
+                switch (removeDown(r, r.rootId, 0L, 0L, r.rootLvl)) {
                     case RETRY:
                     case RETRY_ROOT:
                         checkInterrupted();
@@ -1465,7 +1446,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
 
                         assert r.isFinished();
 
-                        return r.oldRow;
+                        return r.rmvd;
                 }
             }
         }
@@ -1494,7 +1475,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
      * @return Result code.
      * @throws IgniteCheckedException If failed.
      */
-    private Result invokeDown(final Invoke r, final long pageId, final long backId, final long fwdId, final int lvl)
+    private Result removeDown(final Remove r, final long pageId, final long backId, final long fwdId, final int lvl)
         throws IgniteCheckedException {
         assert lvl >= 0 : lvl;
 
@@ -1529,7 +1510,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
 
                         // Intentional fallthrough.
                     case GO_DOWN:
-                        res = invokeDown(r, r.pageId, r.backId, r.fwdId, lvl - 1);
+                        res = removeDown(r, r.pageId, r.backId, r.fwdId, lvl - 1);
 
                         if (res == RETRY) {
                             checkInterrupted();
@@ -1549,13 +1530,8 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
                     case NOT_FOUND:
                         // We are at the bottom.
                         assert lvl == 0 : lvl;
-                        assert r.invokeType != null;
 
-                        if (r.invokeType == INSERT) {
-                            // TODO insert
-                        }
-                        else
-                            r.finish();
+                        r.finish();
 
                         return res;
 
@@ -1563,29 +1539,11 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
                         // We must be at the bottom here, just need to remove row from the current page.
                         assert lvl == 0 : lvl;
 
-                        switch (r.invokeType) {
-                            case REPLACE: {
-                                // TODO replace
-                                break;
-                            }
-
-                            case REMOVE: {
-                                res = r.removeFromLeaf(pageId, page, backId, fwdId);
+                        res = r.removeFromLeaf(pageId, page, backId, fwdId);
 
-                                if (res == FOUND && r.tail == null) {
-                                    // Finish if we don't need to do any merges.
-                                    r.finish();
-                                }
-
-                                break;
-                            }
-
-                            case NOOP:
-                                break;
-
-                            case INSERT: // We can not have INSERT here since we have found a row.
-                            default:
-                                throw new IllegalStateException("Type: " + r.invokeType);
+                        if (res == FOUND && r.tail == null) {
+                            // Finish if we don't need to do any merges.
+                            r.finish();
                         }
 
                         return res;
@@ -2478,7 +2436,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     /**
      * Remove operation.
      */
-    private final class Invoke extends Get implements ReuseBag {
+    private final class Remove extends Get implements ReuseBag {
         /** We may need to lock part of the tree branch from the bottom to up for multiple levels. */
         private Tail<L> tail;
 
@@ -2488,8 +2446,8 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         /** */
         Bool needMergeEmptyBranch = FALSE;
 
-        /** Updated or removed row. */
-        private T oldRow;
+        /** Removed row. */
+        private T rmvd;
 
         /** Current page. */
         private Page page;
@@ -2500,64 +2458,14 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         /** */
         private final boolean needOld;
 
-        /** */
-        private final InvokeClosure<T> c;
-
-        /** */
-        private boolean closureInvoked;
-
-        /** */
-        private InvokeType invokeType;
-
         /**
          * @param row Row.
          * @param needOld {@code True} If need return old value.
-         * @param c Invoke closure or {@code null} if it is just a plain remove operation.
          */
-        private Invoke(L row, boolean needOld, InvokeClosure<T> c) {
+        private Remove(L row, boolean needOld) {
             super(row);
 
             this.needOld = needOld;
-            this.c = c;
-        }
-
-        /**
-         * @return Operation type or {@code null} if it is unknown yet. When the closure is invoked
-         *      we must know exact operation type. Note that even if the operation type is known
-         *      from the beginning it is allowed to change after the closure invocation, for example
-         *      initially it was {@code PUT} but became {@code NOOP}.
-         */
-        private OperationType getOperationType() {
-            return c == null ? OperationType.REMOVE : c.operationType();
-        }
-
-        /**
-         * @param rowFound If the old row was found.
-         */
-        private void setupInvokeType(boolean rowFound) {
-            if (invokeType != null)
-                return;
-
-            OperationType opType = getOperationType();
-
-            assert opType != null; // We do this always after the closure has been invoked.
-
-            switch (opType) {
-                case NOOP:
-                    invokeType = NOOP;
-                    break;
-
-                case PUT:
-                    invokeType = rowFound ? REPLACE : INSERT;
-                    break;
-
-                case REMOVE:
-                    invokeType = REMOVE;
-                    break;
-
-                default:
-                    throw new IllegalStateException("Operation type: " + opType);
-            }
         }
 
         /** {@inheritDoc} */
@@ -2603,41 +2511,10 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         }
 
         /** {@inheritDoc} */
-        @Override boolean notFound(BPlusIO<L> io, long pageAddr, int idx, int lvl) throws IgniteCheckedException {
+        @Override boolean notFound(BPlusIO<L> io, long pageAddr, int idx, int lvl) {
             if (lvl == 0) {
                 assert tail == null;
 
-                doInvokeClosure(null, 0L, 0);
-
-                return true;
-            }
-
-            return false;
-        }
-
-        /**
-         * @param io Page IO.
-         * @param pageAddr Page address.
-         * @param idx Index of found entry.
-         * @throws IgniteCheckedException If failed.
-         */
-        private void doInvokeClosure(BPlusIO<L> io, long pageAddr, int idx) throws IgniteCheckedException {
-            boolean rowFound = io != null;
-
-            if (c != null && !closureInvoked) {
-                c.call(rowFound ? getRow(io, pageAddr, idx) : null);
-
-                closureInvoked = true;
-            }
-
-            setupInvokeType(rowFound);
-        }
-
-        /** {@inheritDoc} */
-        @Override boolean found(BPlusIO<L> io, long pageAddr, int idx, int lvl) throws IgniteCheckedException {
-            if (lvl == 0) {
-                doInvokeClosure(io, pageAddr, idx);
-
                 return true;
             }
 
@@ -2732,7 +2609,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
          * @return {@code true} If already removed from leaf.
          */
         private boolean isRemoved() {
-            return oldRow != null;
+            return rmvd != null;
         }
 
         /**
@@ -3009,7 +2886,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
             assert !isRemoved(): "already removed";
 
             // Detach the row.
-            oldRow = needOld ? getRow(io, pageAddr, idx) : (T)Boolean.TRUE;
+            rmvd = needOld ? getRow(io, pageAddr, idx) : (T)Boolean.TRUE;
 
             doRemove(page, io, pageAddr, cnt, idx);