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/20 12:38:52 UTC
ignite git commit: Fake memory management.
Repository: ignite
Updated Branches:
refs/heads/ignite-3477-test1 [created] 2b06c1917
Fake memory management.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/2b06c191
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/2b06c191
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/2b06c191
Branch: refs/heads/ignite-3477-test1
Commit: 2b06c1917825854c7f786f3baed7ea7f82630df7
Parents: c47d031
Author: sboikov <sb...@gridgain.com>
Authored: Fri Jan 20 15:38:57 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Jan 20 15:38:57 2017 +0300
----------------------------------------------------------------------
.../configuration/MemoryConfiguration.java | 2 +-
.../cache/database/freelist/FreeListImpl.java | 142 +++++++++++--------
.../cache/database/tree/io/DataPageIO.java | 6 +
3 files changed, 86 insertions(+), 64 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/2b06c191/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
index 242354e..ed37784 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
@@ -29,7 +29,7 @@ public class MemoryConfiguration implements Serializable {
private static final long serialVersionUID = 0L;
/** Default cache size is 1Gb. */
- public static final long DFLT_PAGE_CACHE_SIZE = 1024 * 1024 * 1024;
+ public static final long DFLT_PAGE_CACHE_SIZE = 4L * 1024 * 1024 * 1024;
/** Default page size. */
public static final int DFLT_PAGE_SIZE = 2 * 1024;
http://git-wip-us.apache.org/repos/asf/ignite/blob/2b06c191/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java
index 6c1b21b..1e0d914 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.processors.cache.database.freelist;
+import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.atomic.AtomicReferenceArray;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.internal.pagemem.Page;
@@ -87,13 +88,13 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
addRowFragment(page, pageAddr, io, row, written, rowSize);
// Reread free space after update.
- int newFreeSpace = io.getFreeSpace(pageAddr);
-
- if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
- int bucket = bucket(newFreeSpace, false);
-
- put(null, page, pageAddr, bucket);
- }
+// int newFreeSpace = io.getFreeSpace(pageAddr);
+//
+// if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
+// int bucket = bucket(newFreeSpace, false);
+//
+// put(null, page, pageAddr, bucket);
+// }
// Avoid boxing with garbage generation for usual case.
return written == rowSize ? COMPLETE : written;
@@ -186,7 +187,7 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
assert oldFreeSpace >= 0: oldFreeSpace;
- long nextLink = io.removeRow(pageAddr, itemId, pageSize());
+ long nextLink = io.removeRowTmp(pageAddr, itemId, pageSize());
if (isWalDeltaRecordNeeded(wal, page))
wal.log(new DataPageRemoveRecord(cacheId, page.id(), itemId));
@@ -199,23 +200,23 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
// put(null, page, buf, REUSE_BUCKET);
// }
- int newFreeSpace = io.getFreeSpace(pageAddr);
-
- if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
- int newBucket = bucket(newFreeSpace, false);
-
- if (oldFreeSpace > MIN_PAGE_FREE_SPACE) {
- int oldBucket = bucket(oldFreeSpace, false);
-
- if (oldBucket != newBucket) {
- // It is possible that page was concurrently taken for put, in this case put will handle bucket change.
- if (removeDataPage(page, pageAddr, io, oldBucket))
- put(null, page, pageAddr, newBucket);
- }
- }
- else
- put(null, page, pageAddr, newBucket);
- }
+// int newFreeSpace = io.getFreeSpace(pageAddr);
+//
+// if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
+// int newBucket = bucket(newFreeSpace, false);
+//
+// if (oldFreeSpace > MIN_PAGE_FREE_SPACE) {
+// int oldBucket = bucket(oldFreeSpace, false);
+//
+// if (oldBucket != newBucket) {
+// // It is possible that page was concurrently taken for put, in this case put will handle bucket change.
+// if (removeDataPage(page, pageAddr, io, oldBucket))
+// put(null, page, pageAddr, newBucket);
+// }
+// }
+// else
+// put(null, page, pageAddr, newBucket);
+// }
// For common case boxed 0L will be cached inside of Long, so no garbage will be produced.
return nextLink;
@@ -296,41 +297,54 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
return pageMem.page(cacheId, pageId);
}
+ private final ConcurrentLinkedDeque<Long> pagePool = new ConcurrentLinkedDeque<>();
+
/** {@inheritDoc} */
@Override public void insertDataRow(CacheDataRow row) throws IgniteCheckedException {
- int rowSize = getRowSize(row);
-
- int written = 0;
-
- do {
- int freeSpace = Math.min(MIN_SIZE_FOR_DATA_PAGE, rowSize - written);
-
- int bucket = bucket(freeSpace, false);
+ Long poolPageId = pagePool.pollFirst();
- long pageId = 0;
- boolean reuseBucket = false;
+ long pageId = poolPageId != null ? poolPageId : 0L;
- // TODO: properly handle reuse bucket.
- for (int b = bucket; b < BUCKETS - 1; b++) {
- pageId = takeEmptyPage(b, DataPageIO.VERSIONS);
-
- if (pageId != 0L) {
- reuseBucket = isReuseBucket(b);
-
- break;
- }
- }
+ try (Page page = pageId == 0 ? allocateDataPage(row.partition()) : pageMem.page(cacheId, pageId)) {
+ // If it is an existing page, we do not need to initialize it.
+ DataPageIO init = pageId == 0L ? DataPageIO.VERSIONS.latest() : null;
- try (Page page = pageId == 0 ? allocateDataPage(row.partition()) : pageMem.page(cacheId, pageId)) {
- // If it is an existing page, we do not need to initialize it.
- DataPageIO init = reuseBucket || pageId == 0L ? DataPageIO.VERSIONS.latest() : null;
-
- written = writePage(pageMem, page, this, writeRow, init, wal, row, written, FAIL_I);
-
- assert written != FAIL_I; // We can't fail here.
- }
+ writePage(pageMem, page, this, writeRow, init, wal, row, 0, FAIL_I);
}
- while (written != COMPLETE);
+
+// int rowSize = getRowSize(row);
+//
+// int written = 0;
+//
+// do {
+// int freeSpace = Math.min(MIN_SIZE_FOR_DATA_PAGE, rowSize - written);
+//
+// int bucket = bucket(freeSpace, false);
+//
+// long pageId = 0;
+// boolean reuseBucket = false;
+//
+// // TODO: properly handle reuse bucket.
+// for (int b = bucket; b < BUCKETS - 1; b++) {
+// pageId = takeEmptyPage(b, DataPageIO.VERSIONS);
+//
+// if (pageId != 0L) {
+// reuseBucket = isReuseBucket(b);
+//
+// break;
+// }
+// }
+//
+// try (Page page = pageId == 0 ? allocateDataPage(row.partition()) : pageMem.page(cacheId, pageId)) {
+// // If it is an existing page, we do not need to initialize it.
+// DataPageIO init = reuseBucket || pageId == 0L ? DataPageIO.VERSIONS.latest() : null;
+//
+// written = writePage(pageMem, page, this, writeRow, init, wal, row, written, FAIL_I);
+//
+// assert written != FAIL_I; // We can't fail here.
+// }
+// }
+// while (written != COMPLETE);
}
/** {@inheritDoc} */
@@ -348,16 +362,18 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
assert nextLink != FAIL_L; // Can't fail here.
}
- while (nextLink != 0L) {
- itemId = PageIdUtils.itemId(nextLink);
- pageId = PageIdUtils.pageId(nextLink);
-
- try (Page page = pageMem.page(cacheId, pageId)) {
- nextLink = writePage(pageMem, page, this, rmvRow, null, itemId, FAIL_L);
+ pagePool.add(pageId);
- assert nextLink != FAIL_L; // Can't fail here.
- }
- }
+// while (nextLink != 0L) {
+// itemId = PageIdUtils.itemId(nextLink);
+// pageId = PageIdUtils.pageId(nextLink);
+//
+// try (Page page = pageMem.page(cacheId, pageId)) {
+// nextLink = writePage(pageMem, page, this, rmvRow, null, itemId, FAIL_L);
+//
+// assert nextLink != FAIL_L; // Can't fail here.
+// }
+// }
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/2b06c191/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 548e300..f86a51e 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
@@ -597,6 +597,12 @@ public class DataPageIO extends PageIO {
return -1;
}
+ public long removeRowTmp(long pageAddr, int itemId, int pageSize) throws IgniteCheckedException {
+ setEmptyPage(pageAddr, pageSize);
+
+ return 0;
+ }
+
/**
* @param pageAddr Page address.
* @param itemId Fixed item ID (the index used for referencing an entry from the outside).