You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/01/30 17:47:20 UTC

[8/9] ignite git commit: ignite-3477 lock free freelist

ignite-3477 lock free freelist


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

Branch: refs/heads/ignite-3477-freelist
Commit: 0745af2ec7674f02627bbdf5cd6d1cbd22217713
Parents: a7652ea
Author: sboikov <sb...@gridgain.com>
Authored: Mon Jan 30 14:51:48 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Jan 30 16:24:16 2017 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/IgniteKernal.java    |  1 -
 .../cache/database/freelist/FreeListImpl2.java  | 62 ++++++++++----------
 2 files changed, 31 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0745af2e/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index c055563..039e648 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -1142,7 +1142,6 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
                             String msg = NL +
                                 "Metrics for local node (to disable set 'metricsLogFrequency' to 0)" + NL +
                                 "    ^-- Node [id=" + id + ", name=" + name() + ", uptime=" + getUpTimeFormatted() + "]" + NL +
-                                "    ^-- Memory [allocPages=" + ctx.cache().context().database().pages()+ "]" + NL +
                                 "    ^-- H/N/C [hosts=" + hosts + ", nodes=" + nodes + ", CPUs=" + cpus + "]" + NL +
                                 "    ^-- CPU [cur=" + dblFmt.format(cpuLoadPct) + "%, avg=" +
                                 dblFmt.format(avgCpuLoadPct) + "%, GC=" + dblFmt.format(gcPct) + "%]" + NL +

http://git-wip-us.apache.org/repos/asf/ignite/blob/0745af2e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl2.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl2.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl2.java
index 46b1ea0..c6859f8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl2.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl2.java
@@ -37,7 +37,6 @@ import org.apache.ignite.internal.processors.cache.database.tree.reuse.ReuseList
 import org.apache.ignite.internal.processors.cache.database.tree.reuse.ReuseListImpl;
 import org.apache.ignite.internal.processors.cache.database.tree.util.PageHandler;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.jsr166.LongAdder8;
 
 import static org.apache.ignite.internal.processors.cache.database.tree.util.PageHandler.writePage;
 
@@ -65,9 +64,10 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
     /** */
     private final int MIN_SIZE_FOR_DATA_PAGE;
 
+    private final PageHandler<CacheDataRow, Boolean> updateRow = new UpdateRow();
+
     /** */
-    private final PageHandler<CacheDataRow, Boolean> updateRow =
-        new PageHandler<CacheDataRow, Boolean>() {
+    private class UpdateRow extends PageHandler<CacheDataRow, Boolean> {
             @Override public Boolean run(Page page, PageIO iox, long pageAddr, CacheDataRow row, int itemId)
                 throws IgniteCheckedException {
                 DataPageIO io = (DataPageIO)iox;
@@ -81,8 +81,9 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
         };
 
     /** */
-    private final PageHandler<Void, Boolean> compact =
-        new PageHandler<Void, Boolean>() {
+    private final PageHandler<Void, Boolean> compact = new Compact();
+
+    private class Compact extends PageHandler<Void, Boolean> {
             @Override public Boolean run(Page page, PageIO iox, long pageAddr, Void row, int itemId)
                 throws IgniteCheckedException {
                 DataPageIO io = (DataPageIO)iox;
@@ -111,37 +112,36 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
         };
 
     /** */
-    private final PageHandler<Void, Boolean> compact2 =
-        new PageHandler<Void, Boolean>() {
-            @Override public Boolean run(Page page, PageIO iox, long pageAddr, Void ignore, int reqSpace)
-                throws IgniteCheckedException {
-                DataPageIO io = (DataPageIO)iox;
+    private final PageHandler<Void, Boolean> compact2 = new Compact2();
 
-                int freeSpace = io.getFreeSpace(pageAddr);
-                int ts1 = io.getFreeSpace2(pageAddr);
+    private class Compact2 extends PageHandler<Void, Boolean> {
+        @Override public Boolean run(Page page, PageIO iox, long pageAddr, Void ignore, int reqSpace)
+            throws IgniteCheckedException {
+            DataPageIO io = (DataPageIO)iox;
 
-                int newFreeSpace = io.compact(pageAddr, freeSpace, pageSize());
+            int freeSpace = io.getFreeSpace(pageAddr);
 
-                int ts2 = io.getFreeSpace2(pageAddr);
+            int newFreeSpace = io.compact(pageAddr, freeSpace, pageSize());
 
-                assert freeSpace == newFreeSpace;
+            assert freeSpace == newFreeSpace;
 
-                if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
-                    if (newFreeSpace > reqSpace)
-                        return Boolean.TRUE;
+            if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
+                if (newFreeSpace >= reqSpace)
+                    return Boolean.TRUE;
 
-                    int newBucket = bucket(newFreeSpace);
+                int newBucket = bucket(newFreeSpace);
 
-                    putInBucket(newBucket, page);
-                }
-
-                return Boolean.FALSE;
+                putInBucket(newBucket, page);
             }
-        };
+
+            return Boolean.FALSE;
+        }
+    };
 
     /** */
-    private final PageHandler<CacheDataRow, Integer> writeRow =
-        new PageHandler<CacheDataRow, Integer>() {
+    private final PageHandler<CacheDataRow, Integer> writeRow = new WriteRow();
+
+    private class WriteRow extends PageHandler<CacheDataRow, Integer> {
             @Override public Integer run(Page page, PageIO iox, long pageAddr, CacheDataRow row, int written)
                 throws IgniteCheckedException {
                 DataPageIO io = (DataPageIO)iox;
@@ -216,7 +216,9 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
         };
 
     /** */
-    private final PageHandler<Void, Long> rmvRow = new PageHandler<Void, Long>() {
+    private final PageHandler<Void, Long> rmvRow = new RemoveRow();
+
+    private class RemoveRow extends PageHandler<Void, Long> {
         @Override public Long run(Page page, PageIO iox, long pageAddr, Void arg, int itemId)
             throws IgniteCheckedException {
             DataPageIO io = (DataPageIO)iox;
@@ -304,11 +306,9 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
                         Thread.sleep(100);
                     }
                 }
-                catch (InterruptedException ignore) {
-                    // No-op.
-                }
                 catch (Exception e) {
-                    e.printStackTrace();
+                    if (!(e instanceof InterruptedException))
+                        e.printStackTrace();
                 }
             }
         });