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:44 UTC

[10/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/6afd2e79
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/6afd2e79
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/6afd2e79

Branch: refs/heads/ignite-gg-11810
Commit: 6afd2e795b409f20218991253ccd068a44409902
Parents: 80bf580
Author: sboikov <sb...@gridgain.com>
Authored: Fri Dec 23 17:06:25 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Dec 23 17:06:25 2016 +0300

----------------------------------------------------------------------
 .../cache/database/tree/io/DataPageIO.java      |  41 +++++-
 .../database/FreeListImplSelfTest.java          | 127 ++++++++++++-------
 2 files changed, 116 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/6afd2e79/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 fcb7fb9..0aaa2a4 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
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.HashSet;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.pagemem.PageIdUtils;
+import org.apache.ignite.internal.pagemem.PageMemory;
 import org.apache.ignite.internal.pagemem.PageUtils;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.database.CacheDataRow;
@@ -148,7 +149,9 @@ public class DataPageIO extends PageIO {
      * @return Data page entry size.
      */
     private int getPageEntrySize(int payloadLen, int show) {
-        assert payloadLen > 0: payloadLen;
+        if (payloadLen == 0)
+            System.out.println();
+        assert payloadLen > 0 : payloadLen;
 
         int res = payloadLen;
 
@@ -400,6 +403,7 @@ public class DataPageIO extends PageIO {
     /**
      * @param buf Buffer.
      * @param itemId Fixed item ID (the index used for referencing an entry from the outside).
+     * @param pageSize Page size.
      * @return Data entry offset in bytes.
      */
     private int getDataOffset(long buf, int itemId, int pageSize) {
@@ -711,11 +715,13 @@ public class DataPageIO extends PageIO {
      * @throws IgniteCheckedException If failed.
      */
     public void addRow(
-        long buf,
+        final long buf,
         CacheDataRow row,
-        int rowSize,
-        int pageSize
+        final int rowSize,
+        final int pageSize
     ) throws IgniteCheckedException {
+        System.out.println("Start add row " + buf + " " + printPageLayout(buf, pageSize));
+
         assert rowSize <= getFreeSpace(buf): "can't call addRow if not enough space for the whole row";
 
         int fullEntrySize = getPageEntrySize(rowSize, SHOW_PAYLOAD_LEN | SHOW_ITEM);
@@ -730,6 +736,8 @@ public class DataPageIO extends PageIO {
         int itemId = addItem(buf, fullEntrySize, directCnt, indirectCnt, dataOff, pageSize);
 
         setLink(row, buf, itemId);
+
+        System.out.println("Add row " + buf + " " + printPageLayout(buf, pageSize));
     }
 
     /**
@@ -845,6 +853,7 @@ public class DataPageIO extends PageIO {
      * @param row Cache data row.
      * @param written Number of bytes of row size that was already written.
      * @param rowSize Row size.
+     * @param pageSize Page size.
      * @return Written payload size.
      * @throws IgniteCheckedException If failed.
      */
@@ -864,6 +873,7 @@ public class DataPageIO extends PageIO {
      * @param buf Byte buffer.
      * @param payload Payload bytes.
      * @param lastLink Link to the previous written fragment (link to the tail).
+     * @param pageSize Page size.
      * @throws IgniteCheckedException If failed.
      */
     public void addRowFragment(
@@ -887,6 +897,7 @@ public class DataPageIO extends PageIO {
      * @param lastLink Link to the previous written fragment (link to the tail).
      * @param row Row.
      * @param payload Payload bytes.
+     * @param pageSize Page size.
      * @return Written payload size.
      * @throws IgniteCheckedException If failed.
      */
@@ -912,24 +923,40 @@ public class DataPageIO extends PageIO {
 
         if (payload == null) {
             ByteBuffer buf0 = nioAccess.newDirectByteBuffer(buf, pageSize, null);
+            buf0.order(PageMemory.NATIVE_BYTE_ORDER);
 
             buf0.position(dataOff);
 
-            buf0.putShort((short)(payloadSize | FRAGMENTED_FLAG));
+            short p = (short)(payloadSize | FRAGMENTED_FLAG);
+
+            System.out.println("Start add row fragment " + buf + " " + dataOff + " " + payloadSize + " " + p);
+
+            buf0.putShort(p);
             buf0.putLong(lastLink);
 
             int rowOff = rowSize - written - payloadSize;
 
+            System.out.println("Size1: " + PageUtils.getShort(buf, dataOff));
+
             writeFragmentData(row, buf0, rowOff, payloadSize);
+
+            System.out.println("Size2: " + PageUtils.getShort(buf, dataOff));
+        }
+        else {
+            PageUtils.putShort(buf, dataOff, (short)(payloadSize | FRAGMENTED_FLAG));
+
+            PageUtils.putLong(buf, dataOff + 2, lastLink);
+
+            PageUtils.putBytes(buf, dataOff + 10, payload);
         }
-        else
-            PageUtils.putBytes(buf, dataOff, payload);
 
         int itemId = addItem(buf, fullEntrySize, directCnt, indirectCnt, dataOff, pageSize);
 
         if (row != null)
             setLink(row, buf, itemId);
 
+        System.out.println("Add fragment " + buf + " " + printPageLayout(buf, pageSize));
+
         return payloadSize;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6afd2e79/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java
index 2b93d48..fd3e0f5 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java
@@ -237,13 +237,17 @@ public class FreeListImplSelfTest extends GridCommonAbstractTest {
     protected void checkInsertDeleteSingleThreaded(int pageSize) throws Exception {
         FreeList list = createFreeList(pageSize);
 
-        Random rnd = new Random();
+        long seed = 1482500591478L;//System.currentTimeMillis();
+
+        Random rnd = new Random(seed);
+
+        System.out.println("Seed " + seed);
 
         Map<Long, TestDataRow> stored = new HashMap<>();
 
-        for (int i = 0; i < 100; i++) {
-            int keySize = rnd.nextInt(pageSize * 3 / 2) + 10;
-            int valSize = rnd.nextInt(pageSize * 5 / 2) + 10;
+        {
+            int keySize = 749;
+            int valSize = 2426;
 
             TestDataRow row = new TestDataRow(keySize, valSize);
 
@@ -255,55 +259,88 @@ public class FreeListImplSelfTest extends GridCommonAbstractTest {
 
             assertNull(old);
         }
+        {
+            int keySize = 472;
+            int valSize = 83;
 
-        boolean grow = true;
-
-        for (int i = 0; i < 1_000_000; i++) {
-            if (grow) {
-                if (stored.size() > 20_000) {
-                    grow = false;
-
-                    info("Shrink... [" + stored.size() + ']');
-                }
-            }
-            else {
-                if (stored.size() < 1_000) {
-                    grow = true;
-
-                    info("Grow... [" + stored.size() + ']');
-                }
-            }
-
-            boolean insert = rnd.nextInt(100) < 70 == grow;
-
-            if (insert) {
-                int keySize = rnd.nextInt(pageSize * 3 / 2) + 10;
-                int valSize = rnd.nextInt(pageSize * 3 / 2) + 10;
-
-                TestDataRow row = new TestDataRow(keySize, valSize);
-
-                list.insertDataRow(row);
+            TestDataRow row = new TestDataRow(keySize, valSize);
 
-                assertTrue(row.link() != 0L);
+            list.insertDataRow(row);
 
-                TestDataRow old = stored.put(row.link(), row);
+            assertTrue(row.link() != 0L);
 
-                assertNull(old);
-            }
-            else {
-                Iterator<TestDataRow> it = stored.values().iterator();
+            TestDataRow old = stored.put(row.link(), row);
 
-                if (it.hasNext()) {
-                    TestDataRow row = it.next();
+            assertNull(old);
+        }
 
-                    TestDataRow rmvd = stored.remove(row.link);
 
-                    assertTrue(rmvd == row);
 
-                    list.removeDataRowByLink(row.link);
-                }
-            }
-        }
+//        for (int i = 0; i < 100; i++) {
+//            int keySize = rnd.nextInt(pageSize * 3 / 2) + 10;
+//            int valSize = rnd.nextInt(pageSize * 5 / 2) + 10;
+//
+//            System.out.println("Add " + keySize + " " + valSize);
+//
+//            TestDataRow row = new TestDataRow(keySize, valSize);
+//
+//            list.insertDataRow(row);
+//
+//            assertTrue(row.link() != 0L);
+//
+//            TestDataRow old = stored.put(row.link(), row);
+//
+//            assertNull(old);
+//        }
+
+//        boolean grow = true;
+//
+//        for (int i = 0; i < 1_000_000; i++) {
+//            if (grow) {
+//                if (stored.size() > 20_000) {
+//                    grow = false;
+//
+//                    info("Shrink... [" + stored.size() + ']');
+//                }
+//            }
+//            else {
+//                if (stored.size() < 1_000) {
+//                    grow = true;
+//
+//                    info("Grow... [" + stored.size() + ']');
+//                }
+//            }
+//
+//            boolean insert = rnd.nextInt(100) < 70 == grow;
+//
+//            if (insert) {
+//                int keySize = rnd.nextInt(pageSize * 3 / 2) + 10;
+//                int valSize = rnd.nextInt(pageSize * 3 / 2) + 10;
+//
+//                TestDataRow row = new TestDataRow(keySize, valSize);
+//
+//                list.insertDataRow(row);
+//
+//                assertTrue(row.link() != 0L);
+//
+//                TestDataRow old = stored.put(row.link(), row);
+//
+//                assertNull(old);
+//            }
+//            else {
+//                Iterator<TestDataRow> it = stored.values().iterator();
+//
+//                if (it.hasNext()) {
+//                    TestDataRow row = it.next();
+//
+//                    TestDataRow rmvd = stored.remove(row.link);
+//
+//                    assertTrue(rmvd == row);
+//
+//                    list.removeDataRowByLink(row.link);
+//                }
+//            }
+//        }
     }
 
     /**