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/18 15:27:39 UTC
[3/9] ignite git commit: ignite-db-x minor rename
ignite-db-x minor rename
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/921b5c7e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/921b5c7e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/921b5c7e
Branch: refs/heads/ignite-db-x-opt
Commit: 921b5c7edd7cd1468df432daf90c3c4b611c0cec
Parents: 658d207
Author: sboikov <sb...@gridgain.com>
Authored: Thu Dec 15 10:53:25 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Dec 15 10:53:25 2016 +0300
----------------------------------------------------------------------
.../cache/GridCacheConcurrentMapImpl.java | 3 +-
.../cache/database/freelist/FreeListImpl.java | 20 +++++++++
.../cache/database/tree/io/DataPageIO.java | 46 ++++++++++++++++++--
.../ignite/internal/util/CacheStatistics.java | 6 +--
.../internal/util/OperationStatistic.java | 8 ++++
.../ignite/internal/util/PutStatistic.java | 21 ++++++++-
6 files changed, 95 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/921b5c7e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMapImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMapImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMapImpl.java
index 5f21c42..bb125d1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMapImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMapImpl.java
@@ -22,6 +22,7 @@ import java.util.AbstractSet;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
@@ -100,7 +101,7 @@ public class GridCacheConcurrentMapImpl implements GridCacheConcurrentMap {
this.ctx = ctx;
this.factory = factory;
- map = new ConcurrentHashMap8<>(initialCapacity, loadFactor, concurrencyLevel);
+ map = new ConcurrentHashMap<>(initialCapacity, loadFactor, concurrencyLevel);
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/921b5c7e/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 6a29027..5568867 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
@@ -35,6 +35,8 @@ import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO;
import org.apache.ignite.internal.processors.cache.database.tree.reuse.ReuseBag;
import org.apache.ignite.internal.processors.cache.database.tree.reuse.ReuseList;
import org.apache.ignite.internal.processors.cache.database.tree.util.PageHandler;
+import org.apache.ignite.internal.util.CacheStatistics;
+import org.apache.ignite.internal.util.PutStatistic;
import org.apache.ignite.internal.util.typedef.internal.U;
import static org.apache.ignite.internal.processors.cache.database.tree.util.PageHandler.writePage;
@@ -81,17 +83,25 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
assert oldFreeSpace > 0 : oldFreeSpace;
+ CacheStatistics.opStart(PutStatistic.Ops.DATA_ADD);
+
// If the full row does not fit into this page write only a fragment.
written = (written == 0 && oldFreeSpace >= rowSize) ? addRow(page, buf, io, row, rowSize):
addRowFragment(page, buf, io, row, written, rowSize);
+ CacheStatistics.opEnd(PutStatistic.Ops.DATA_ADD);
+
// Reread free space after update.
int newFreeSpace = io.getFreeSpace(buf);
if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
+ CacheStatistics.opStart(PutStatistic.Ops.FREE_LIST_PUT);
+
int bucket = bucket(newFreeSpace, false);
put(null, page, buf, bucket);
+
+ CacheStatistics.opEnd(PutStatistic.Ops.FREE_LIST_PUT);
}
// Avoid boxing with garbage generation for usual case.
@@ -155,6 +165,9 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
int written,
int rowSize
) throws IgniteCheckedException {
+ if (true)
+ throw new IgniteCheckedException("Error");
+
// Read last link before the fragment write, because it will be updated there.
long lastLink = row.link();
@@ -304,6 +317,8 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
int written = 0;
do {
+ CacheStatistics.opStart(PutStatistic.Ops.FREE_LIST_FIND);
+
int freeSpace = Math.min(MIN_SIZE_FOR_DATA_PAGE, rowSize - written);
int bucket = bucket(freeSpace, false);
@@ -322,6 +337,8 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
}
}
+ CacheStatistics.opEnd(PutStatistic.Ops.FREE_LIST_FIND);
+
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;
@@ -350,6 +367,9 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
}
while (nextLink != 0L) {
+ if (true)
+ throw new IgniteCheckedException("Error");
+
itemId = PageIdUtils.itemId(nextLink);
pageId = PageIdUtils.pageId(nextLink);
http://git-wip-us.apache.org/repos/asf/ignite/blob/921b5c7e/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 6d05cd8..badf6f5 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
@@ -27,6 +27,8 @@ import org.apache.ignite.internal.processors.cache.CacheObject;
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.CacheStatistics;
+import org.apache.ignite.internal.util.PutStatistic;
import org.apache.ignite.internal.util.typedef.internal.SB;
/**
@@ -1127,6 +1129,8 @@ public class DataPageIO extends PageIO {
private int compactDataEntries(ByteBuffer buf, int directCnt) {
assert checkCount(directCnt) : directCnt;
+ CacheStatistics.opStart(PutStatistic.Ops.DATA_ADD1);
+
int[] offs = new int[directCnt];
for (int i = 0; i < directCnt; i++) {
@@ -1152,18 +1156,52 @@ public class DataPageIO extends PageIO {
if (delta != 0) { // Move right.
assert delta > 0: delta;
- moveBytes(buf, off, entrySize, delta);
+ int cnt = 1;
+ int mvSize = entrySize;
+
+ for (int j = i - 1; j >= 0; j++) {
+ int off0 = offs[j] >>> 8;
+ int entrySize0 = getPageEntrySize(buf, off0, SHOW_PAYLOAD_LEN | SHOW_LINK);
+ int o = off0 + entrySize0;
+
+ if (o != off)
+ break;
+
+ mvSize += entrySize0;
+ off = off0;
+
+ cnt++;
+ }
+
+ if (cnt > 1) {
+ moveBytes(buf, off, mvSize, delta);
- int itemId = offs[i] & 0xFF;
+ for (int j = 0; j < cnt; j++) {
+ int itemId = offs[i + j] & 0xFF;
- off += delta;
+ off += delta;
- setItem(buf, itemId, directItemFromOffset(off));
+ setItem(buf, itemId, directItemFromOffset(off));
+ }
+
+ i += cnt;
+ }
+ else {
+ moveBytes(buf, off, entrySize, delta);
+
+ int itemId = offs[i] & 0xFF;
+
+ off += delta;
+
+ setItem(buf, itemId, directItemFromOffset(off));
+ }
}
prevOff = off;
}
+ CacheStatistics.opEnd(PutStatistic.Ops.DATA_ADD1);
+
return prevOff;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/921b5c7e/modules/core/src/main/java/org/apache/ignite/internal/util/CacheStatistics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/CacheStatistics.java b/modules/core/src/main/java/org/apache/ignite/internal/util/CacheStatistics.java
index ab6d614..556a713 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/CacheStatistics.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/CacheStatistics.java
@@ -22,7 +22,7 @@ package org.apache.ignite.internal.util;
*/
public class CacheStatistics {
/** */
- private final ThreadLocal<PutStatistic> putStat = new ThreadLocal<>();
+ private static final ThreadLocal<PutStatistic> putStat = new ThreadLocal<>();
private final InternalStatistics stats;
@@ -49,14 +49,14 @@ public class CacheStatistics {
}
}
- public final void opStart(Enum op) {
+ public static final void opStart(Enum op) {
PutStatistic stat = putStat.get();
if (stat != null)
stat.startOp(op.ordinal());
}
- public final void opEnd(Enum op) {
+ public static final void opEnd(Enum op) {
PutStatistic stat = putStat.get();
if (stat != null)
http://git-wip-us.apache.org/repos/asf/ignite/blob/921b5c7e/modules/core/src/main/java/org/apache/ignite/internal/util/OperationStatistic.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/OperationStatistic.java b/modules/core/src/main/java/org/apache/ignite/internal/util/OperationStatistic.java
index 6de5f5e..a1f323e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/OperationStatistic.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/OperationStatistic.java
@@ -62,6 +62,14 @@ public class OperationStatistic {
endTime = System.nanoTime();
}
+ public final void startOp(Enum op) {
+ startOp(op.ordinal());
+ }
+
+ public final void endOp(Enum op) {
+ endOp(op.ordinal());
+ }
+
public final void startOp(int op) {
assert time[op] == -1L : time[op];
http://git-wip-us.apache.org/repos/asf/ignite/blob/921b5c7e/modules/core/src/main/java/org/apache/ignite/internal/util/PutStatistic.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/PutStatistic.java b/modules/core/src/main/java/org/apache/ignite/internal/util/PutStatistic.java
index fbd72b0..389dad7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/PutStatistic.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/PutStatistic.java
@@ -56,6 +56,25 @@ public class PutStatistic extends OperationStatistic {
STORE_RMV,
/** */
- TREE_PUT;
+ TREE_PUT,
+
+ /** */
+ FREE_LIST_FIND,
+
+ /** */
+ FREE_LIST_PUT,
+
+ /** */
+ DATA_ADD,
+
+ /** */
+ DATA_ADD1,
+
+ /** */
+ DATA_ADD2,
+
+ /** */
+ DATA_ADD3
+ ;
}
}