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/11 13:22:43 UTC

[09/25] ignite git commit: ignite-gg-11810

ignite-gg-11810


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

Branch: refs/heads/ignite-gg-11810
Commit: 80bf5806b7d6945c09af3b8f024acfd8f814123f
Parents: 0a556cb
Author: sboikov <sb...@gridgain.com>
Authored: Fri Dec 23 15:46:44 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Dec 23 15:46:44 2016 +0300

----------------------------------------------------------------------
 .../ignite/internal/pagemem/PageUtils.java      | 38 ++++++++++++++++++++
 .../cache/database/CacheDataRowAdapter.java     |  2 +-
 .../cache/database/tree/io/DataPageIO.java      | 12 +++++--
 3 files changed, 48 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/80bf5806/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java
index b6faeb1..6f46cd5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java
@@ -29,10 +29,17 @@ public class PageUtils {
     private static final Unsafe unsafe = GridUnsafe.UNSAFE;
 
     public static byte getByte(long buf, int off) {
+        assert buf > 0 : buf;
+        assert off >= 0;
+
         return unsafe.getByte(buf + off);
     }
 
     public static byte[] getBytes(long buf, int off, int len) {
+        assert buf > 0 : buf;
+        assert off >= 0;
+        assert len >= 0;
+
         byte[] bytes = new byte[len];
 
         unsafe.copyMemory(null, buf + off, bytes, GridUnsafe.BYTE_ARR_OFF, len);
@@ -41,38 +48,69 @@ public class PageUtils {
     }
 
     public static void getBytes(long src, int srcOff, byte[] dst, int dstOff, int len) {
+        assert src > 0;
+        assert srcOff > 0;
+        assert dst != null;
+        assert dstOff >= 0;
+        assert len >= 0;
+
         unsafe.copyMemory(null, src + srcOff, dst, GridUnsafe.BYTE_ARR_OFF + dstOff, len);
     }
 
     public static short getShort(long buf, int off) {
+        assert buf > 0 : buf;
+        assert off >= 0;
+
         return unsafe.getShort(buf + off);
     }
 
     public static int getInt(long buf, int off) {
+        assert buf > 0 : buf;
+        assert off >= 0;
+
         return unsafe.getInt(buf + off);
     }
 
     public static long getLong(long buf, int off) {
+        assert buf > 0 : buf;
+        assert off >= 0;
+
         return unsafe.getLong(buf + off);
     }
 
     public static void putBytes(long buf, int off, byte[] bytes) {
+        assert buf > 0 : buf;
+        assert off >= 0;
+        assert bytes != null;
+
         unsafe.copyMemory(bytes, GridUnsafe.BYTE_ARR_OFF, null, buf + off, bytes.length);
     }
 
     public static void putByte(long buf, int off, byte v) {
+        assert buf > 0 : buf;
+        assert off >= 0;
+
         unsafe.putByte(buf + off, v);
     }
 
     public static void putShort(long buf, int off, short v) {
+        assert buf > 0 : buf;
+        assert off >= 0;
+
         unsafe.putShort(buf + off, v);
     }
 
     public static void putInt(long buf, int off, int v) {
+        assert buf > 0 : buf;
+        assert off >= 0;
+
         unsafe.putInt(buf + off, v);
     }
 
     public static void putLong(long buf, int off, long v) {
+        assert buf > 0 : buf;
+        assert off >= 0;
+
         unsafe.putLong(buf + off, v);
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/80bf5806/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
index 59e2fc4..1e7a99b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
@@ -104,7 +104,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
                     if (first) {
                         if (nextLink == 0) {
                             // Fast path for a single page row.
-                            readFullRow(coctx, data.offset(), keyOnly);
+                            readFullRow(coctx, buf + data.offset(), keyOnly);
 
                             return;
                         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/80bf5806/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java
index c9baf05..fcb7fb9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java
@@ -29,6 +29,8 @@ import org.apache.ignite.internal.processors.cache.database.CacheDataRow;
 import org.apache.ignite.internal.processors.cache.database.tree.util.PageHandler;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.util.typedef.internal.SB;
+import sun.misc.JavaNioAccess;
+import sun.misc.SharedSecrets;
 
 /**
  * Data pages IO.
@@ -184,9 +186,10 @@ public class DataPageIO extends PageIO {
     /**
      * @param buf Buffer.
      * @param freeSpace Free space.
+     * @param pageSize Page size.
      */
     private void setRealFreeSpace(long buf, int freeSpace, int pageSize) {
-        assert freeSpace == actualFreeSpace(buf, pageSize): freeSpace + " != " + actualFreeSpace(buf, pageSize);
+        assert freeSpace == actualFreeSpace(buf, pageSize) : freeSpace + " != " + actualFreeSpace(buf, pageSize);
 
         PageUtils.putShort(buf, FREE_SPACE_OFF, (short)freeSpace);
     }
@@ -872,6 +875,9 @@ public class DataPageIO extends PageIO {
         addRowFragment(buf, 0, 0, lastLink, null, payload, pageSize);
     }
 
+    // TODO GG-11810.
+    private JavaNioAccess nioAccess = SharedSecrets.getJavaNioAccess();
+
     /**
      * Adds maximum possible fragment of the given row to this data page and sets respective link to the row.
      *
@@ -905,11 +911,11 @@ public class DataPageIO extends PageIO {
         int dataOff = getDataOffsetForWrite(buf, fullEntrySize, directCnt, indirectCnt, pageSize);
 
         if (payload == null) {
-            ByteBuffer buf0 = null;
+            ByteBuffer buf0 = nioAccess.newDirectByteBuffer(buf, pageSize, null);
 
             buf0.position(dataOff);
 
-            buf0.putShort((short) (payloadSize | FRAGMENTED_FLAG));
+            buf0.putShort((short)(payloadSize | FRAGMENTED_FLAG));
             buf0.putLong(lastLink);
 
             int rowOff = rowSize - written - payloadSize;