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:13 UTC
[1/9] ignite git commit: ignite-3477 Minor
Repository: ignite
Updated Branches:
refs/heads/ignite-3477-freelist 260aee1c8 -> a4256544b
ignite-3477 Minor
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9c87affb
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9c87affb
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9c87affb
Branch: refs/heads/ignite-3477-freelist
Commit: 9c87affb45da9d41068ea80b58989ac7067ed41b
Parents: ad06102
Author: sboikov <sb...@gridgain.com>
Authored: Fri Jan 27 16:12:40 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Jan 27 16:12:40 2017 +0300
----------------------------------------------------------------------
.../src/main/java/org/apache/ignite/internal/IgniteKernal.java | 4 ++++
.../java/org/apache/ignite/internal/pagemem/PageMemory.java | 5 +++++
.../ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java | 6 ++----
.../processors/cache/database/freelist/FreeListImpl.java | 2 +-
.../internal/processors/cache/database/freelist/PagesList.java | 1 -
.../internal/processors/cache/database/tree/io/DataPageIO.java | 4 +---
6 files changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/9c87affb/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 c280b30..ed75db6 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
@@ -97,6 +97,7 @@ import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager;
import org.apache.ignite.internal.managers.failover.GridFailoverManager;
import org.apache.ignite.internal.managers.indexing.GridIndexingManager;
import org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerManager;
+import org.apache.ignite.internal.pagemem.PageMemory;
import org.apache.ignite.internal.processors.GridProcessor;
import org.apache.ignite.internal.processors.affinity.GridAffinityProcessor;
import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
@@ -1126,6 +1127,8 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
sysPoolQSize = exec.getQueue().size();
}
+ PageMemory pageMem = ctx.cache().context().database().pageMemory();
+
String id = U.id8(localNode().id());
String msg = NL +
@@ -1134,6 +1137,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
" ^-- H/N/C [hosts=" + hosts + ", nodes=" + nodes + ", CPUs=" + cpus + "]" + NL +
" ^-- CPU [cur=" + dblFmt.format(cpuLoadPct) + "%, avg=" +
dblFmt.format(avgCpuLoadPct) + "%, GC=" + dblFmt.format(gcPct) + "%]" + NL +
+ " ^-- PageMemory [pages=" + pageMem.loadedPages() + "]" + NL +
" ^-- Heap [used=" + dblFmt.format(heapUsedInMBytes) + "MB, free=" +
dblFmt.format(freeHeapPct) + "%, comm=" + dblFmt.format(heapCommInMBytes) + "MB]" + NL +
" ^-- Non heap [used=" + dblFmt.format(nonHeapUsedInMBytes) + "MB, free=" +
http://git-wip-us.apache.org/repos/asf/ignite/blob/9c87affb/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
index 2e427de..6bd2ad0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
@@ -60,4 +60,9 @@ public interface PageMemory extends LifecycleAware, PageIdAllocator {
* @return Page byte buffer.
*/
public ByteBuffer pageBuffer(long pageAddr);
+
+ /**
+ * @return Total number of loaded pages in memory.
+ */
+ public long loadedPages();
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9c87affb/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
index 3bc5241..64b7c64 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
@@ -316,10 +316,8 @@ public class PageMemoryNoStoreImpl implements PageMemory {
}
}
- /**
- * @return Total number of loaded pages in memory.
- */
- public long loadedPages() {
+ /** {@inheritDoc} */
+ @Override public long loadedPages() {
long total = 0;
for (Segment seg : segments) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/9c87affb/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 87d5e4d..892c1ec 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
@@ -80,7 +80,7 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList {
int rowSize = getRowSize(row);
- boolean updated = io.updateRow(pageAddr, itemId, pageSize(), null, row, getRowSize(row));
+ boolean updated = io.updateRow(pageAddr, itemId, pageSize(), null, row, rowSize);
if (updated && isWalDeltaRecordNeeded(wal, page)) {
// TODO This record must contain only a reference to a logical WAL record with the actual data.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9c87affb/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java
index e44838d..6ad976e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java
@@ -17,7 +17,6 @@
package org.apache.ignite.internal.processors.cache.database.freelist;
-import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
http://git-wip-us.apache.org/repos/asf/ignite/blob/9c87affb/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 fdb812f..df14dc1 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
@@ -452,12 +452,10 @@ public class DataPageIO extends PageIO {
}
/**
- * Sets position to start of actual fragment data and limit to it's end.
- *
* @param pageAddr Page address.
* @param itemId Item to position on.
* @param pageSize Page size.
- * @return Link to the next fragment or {@code 0} if it is the last fragment or the data row is not fragmented.
+ * @return Size and offset of actual fragment data, and link to the next fragment if data is fragmented.
*/
public DataPagePayload readPayload(final long pageAddr, final int itemId, final int pageSize) {
int dataOff = getDataOffset(pageAddr, itemId, pageSize);
[7/9] ignite git commit: Merge remote-tracking branch
'remotes/origin/ignite-3477' into ignite-3477-freelist
Posted by sb...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-3477' into ignite-3477-freelist
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a7652ea5
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a7652ea5
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a7652ea5
Branch: refs/heads/ignite-3477-freelist
Commit: a7652ea54c6a0b4473a14fc3a5e5dd68ba27a865
Parents: 468af80 611f9d0
Author: sboikov <sb...@gridgain.com>
Authored: Mon Jan 30 14:51:03 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Jan 30 14:51:03 2017 +0300
----------------------------------------------------------------------
.../apache/ignite/internal/IgniteKernal.java | 66 ++++++++++++--------
.../ignite/internal/pagemem/PageMemory.java | 5 ++
.../pagemem/impl/PageMemoryNoStoreImpl.java | 6 +-
.../cache/database/freelist/FreeListImpl.java | 2 +-
.../cache/database/freelist/PagesList.java | 1 -
.../cache/database/tree/io/DataPageIO.java | 4 +-
.../store/jdbc/CacheJdbcPojoStoreTest.java | 13 ++++
...artitionedBackupNodeFailureRecoveryTest.java | 12 +++-
.../odbc/OdbcProcessorValidationSelfTest.java | 9 ++-
.../cpp/core-test/config/cache-test.xml | 1 -
10 files changed, 80 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/a7652ea5/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/a7652ea5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java
----------------------------------------------------------------------
[6/9] ignite git commit: ignite-3477 lock free freelist
Posted by sb...@apache.org.
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/468af801
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/468af801
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/468af801
Branch: refs/heads/ignite-3477-freelist
Commit: 468af801e3715664019a6243be29a1ed38830c88
Parents: 260aee1
Author: sboikov <sb...@gridgain.com>
Authored: Mon Jan 30 13:13:02 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Jan 30 13:13:02 2017 +0300
----------------------------------------------------------------------
.../cache/database/freelist/DataPageList.java | 23 ++++++
.../cache/database/freelist/FreeListImpl2.java | 80 +++++++++++++-------
.../database/FreeListImpl2SelfTest.java | 16 +++-
3 files changed, 88 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/468af801/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/DataPageList.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/DataPageList.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/DataPageList.java
index 33ed2aa..710164d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/DataPageList.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/DataPageList.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.processors.cache.database.freelist;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
import org.apache.ignite.internal.pagemem.Page;
import org.apache.ignite.internal.pagemem.PageMemory;
import org.apache.ignite.internal.processors.cache.database.tree.io.DataPageIO;
@@ -90,6 +91,28 @@ public class DataPageList {
}
}
+ public void dumpState(int cacheId, IgniteLogger log) throws IgniteCheckedException {
+ Head head = this.head;
+
+ long pageId = head.pageId;
+
+ if (pageId == 0) {
+ log.info(" Empty");
+
+ return;
+ }
+
+ while (pageId != 0) {
+ Page page = pageMem.page(cacheId, pageId);
+
+ long pageAddr = page.pageAddress();
+
+ log.info(" Page [id=" + pageId + ", free=" + io.getFreeSpace(pageAddr) + ']');
+
+ pageId = io.getNextPageId(pageAddr);
+ }
+ }
+
/**
*
*/
http://git-wip-us.apache.org/repos/asf/ignite/blob/468af801/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 81186a6..46b1ea0 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
@@ -17,10 +17,10 @@
package org.apache.ignite.internal.processors.cache.database.freelist;
-import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReferenceArray;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
import org.apache.ignite.internal.IgniteInterruptedCheckedException;
import org.apache.ignite.internal.pagemem.Page;
import org.apache.ignite.internal.pagemem.PageIdAllocator;
@@ -316,16 +316,14 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
compacter.setName("compacter");
compacter.setDaemon(true);
- //compacter.start();
+ compacter.start();
}
private void putInBucket(int bucket, Page page) throws IgniteCheckedException {
AtomicReferenceArray<DataPageList> b = buckets[bucket];
- ThreadLocalRandom rnd = ThreadLocalRandom.current();
-
while (true) {
- int idx = rnd.nextInt(STACKS_PER_BUCKET);
+ int idx = randomInt(STACKS_PER_BUCKET);
DataPageList list = b.get(idx);
@@ -354,10 +352,8 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
// }
//
// return null;
- ThreadLocalRandom rnd = ThreadLocalRandom.current();
-
while (true) {
- int idx = rnd.nextInt(STACKS_PER_BUCKET);
+ int idx = randomInt(STACKS_PER_BUCKET);
DataPageList list = b.get(idx);
@@ -407,6 +403,26 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
return pageMem.page(cacheId, pageId);
}
+ public void dumpState(IgniteLogger log) throws IgniteCheckedException {
+ int s = (int)Math.pow(2, shift);
+
+ for (int b = 0; b < BUCKETS; b++) {
+ log.info("Bucket [idx=" + b + ", spaceFrom=" + s * b + ", spaceTo=" + s * (b + 1) + "]");
+
+ AtomicReferenceArray<DataPageList> stacks = buckets[b];
+
+ for (int i = 0; i < stacks.length(); i++) {
+ log.info(" Stripe: " + i);
+
+ DataPageList pageList = stacks.get(i);
+
+ assert pageList != null;
+
+ pageList.dumpState(cacheId, log);
+ }
+ }
+ }
+
public void compact() throws IgniteCheckedException {
for (int b = 0; b < BUCKETS; b++)
compactBucket(b);
@@ -430,6 +446,8 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
}
}
+ public IgniteLogger log;
+
private void compactStack(DataPageList pageList) throws IgniteCheckedException {
Page page;
@@ -444,7 +462,7 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
private final AtomicBoolean cg = new AtomicBoolean();
- public boolean locCompact;
+ public boolean locCompact = true;
/** {@inheritDoc} */
@Override public void insertDataRow(CacheDataRow row) throws IgniteCheckedException {
@@ -481,29 +499,35 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
if (take) {
Page page;
- while ((page = pageList.take(cacheId)) != null) {
- Boolean found = writePage(pageMem,
- page,
- this,
- compact2,
- null,
- wal,
- null,
- freeSpace,
- null);
-
- assert found != null;
-
- if (found) {
- foundPage = page;
-
- break;
+ try {
+ while ((page = pageList.take(cacheId)) != null) {
+ Boolean found = writePage(pageMem,
+ page,
+ this,
+ compact2,
+ null,
+ wal,
+ null,
+ freeSpace,
+ null);
+
+ assert found != null;
+
+ if (found) {
+ foundPage = page;
+
+ break;
+ }
}
}
-
- stacks.set(i, pageList);
+ finally {
+ stacks.set(i, pageList);
+ }
}
}
+
+ if (foundPage != null)
+ break;
}
if (foundPage != null)
http://git-wip-us.apache.org/repos/asf/ignite/blob/468af801/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImpl2SelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImpl2SelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImpl2SelfTest.java
index bcb4c58..6bac890 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImpl2SelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImpl2SelfTest.java
@@ -91,6 +91,7 @@ public class FreeListImpl2SelfTest extends GridCommonAbstractTest {
pageMem = createPageMemory(1024);
FreeListImpl2 fl = new FreeListImpl2(1, "freelist", pageMem, null, null, 0, true);
+ fl.rnd = new Random();
for (int iter = 0; iter < 100_000; iter++) {
System.out.println("Iter: " + iter + ", allocated=" + pageMem.loadedPages());
@@ -107,6 +108,8 @@ public class FreeListImpl2SelfTest extends GridCommonAbstractTest {
for (Long link : links)
fl.removeDataRowByLink(link);
+
+ //fl.locCompact = true;
}
fl.close();
@@ -120,12 +123,15 @@ public class FreeListImpl2SelfTest extends GridCommonAbstractTest {
FreeListImpl2 fl = new FreeListImpl2(1, "freelist", pageMem, null, null, 0, true);
+ fl.rnd = new Random(1);
+ fl.log = log;
+
for (int iter = 0; iter < 1; iter++) {
System.out.println("Iter: " + iter + ", allocated=" + pageMem.loadedPages());
List<Long> links = new ArrayList<>();
- for (int i = 0; i < 100_000; i++) {
+ for (int i = 0; i < 10_000; i++) {
TestDataRow row = new TestDataRow(64, 64);
fl.insertDataRow(row);
@@ -136,11 +142,15 @@ public class FreeListImpl2SelfTest extends GridCommonAbstractTest {
for (Long link : links)
fl.removeDataRowByLink(link);
+ //fl.dumpState(log);
+
fl.locCompact = true;
- TestDataRow row = new TestDataRow(64, 64);
+ for (int i = 0; i < 1000; i++) {
+ TestDataRow row = new TestDataRow(64, 64);
- fl.insertDataRow(row);
+ fl.insertDataRow(row);
+ }
}
fl.close();
[5/9] ignite git commit: Code style
Posted by sb...@apache.org.
Code style
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/611f9d07
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/611f9d07
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/611f9d07
Branch: refs/heads/ignite-3477-freelist
Commit: 611f9d07bb6ce26341408e141106fc9ccea90de3
Parents: a1c6558
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Fri Jan 27 19:39:42 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Fri Jan 27 19:39:42 2017 +0300
----------------------------------------------------------------------
.../src/main/java/org/apache/ignite/internal/IgniteKernal.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/611f9d07/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 045dc11..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
@@ -912,7 +912,8 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
}
fillNodeAttributes(clusterProc.updateNotifierEnabled());
- }catch (Throwable e) {
+ }
+ catch (Throwable e) {
// Stop discovery spi to close tcp socket.
ctx.discovery().stop(true);
[9/9] ignite git commit: ignite-3477 lock free freelist
Posted by sb...@apache.org.
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/a4256544
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a4256544
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a4256544
Branch: refs/heads/ignite-3477-freelist
Commit: a4256544b6bee9be054fc04e7317240d8d66ff3e
Parents: 0745af2
Author: sboikov <sb...@gridgain.com>
Authored: Mon Jan 30 20:02:03 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Jan 30 20:11:39 2017 +0300
----------------------------------------------------------------------
.../IgniteCacheDatabaseSharedManager.java | 2 +-
.../cache/database/freelist/DataPageList.java | 11 +-
.../cache/database/freelist/FreeListImpl2.java | 336 ++++++++++++++-----
.../cache/database/tree/io/DataPageIO.java | 28 +-
.../database/FreeListImpl2SelfTest.java | 12 +-
5 files changed, 289 insertions(+), 100 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/a4256544/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
index b1da249..46df221 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
@@ -80,7 +80,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
* @throws IgniteCheckedException If failed.
*/
protected void initDataStructures() throws IgniteCheckedException {
- freeList = new FreeListImpl2(0, cctx.gridName(), pageMem, null, cctx.wal(), 0L, true);
+ freeList = new FreeListImpl2(log, 0, cctx.gridName(), pageMem, null, cctx.wal(), 0L, true);
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/a4256544/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/DataPageList.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/DataPageList.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/DataPageList.java
index 710164d..90884ad 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/DataPageList.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/DataPageList.java
@@ -49,6 +49,8 @@ public class DataPageList {
/** */
private final DataPageIO io;
+ public volatile boolean needCompact;
+
/**
* @param pageMem Page memory.
*/
@@ -58,13 +60,18 @@ public class DataPageList {
io = DataPageIO.VERSIONS.latest();
}
- public void put(Page page) throws IgniteCheckedException {
+ public void put(Page page, int bucket, int stripe) throws IgniteCheckedException {
+ long pageAddr = page.pageAddress();
+
+ io.setBucket(pageAddr, bucket);
+ io.setStripe(pageAddr, stripe);
+
while (true) {
Head head = this.head;
Head newHead = new Head(page.id());
- io.setNextPageId(page.pageAddress(), head.pageId);
+ io.setNextPageId(pageAddr, head.pageId);
if (GridUnsafe.compareAndSwapObject(this, headOffset, head, newHead))
break;
http://git-wip-us.apache.org/repos/asf/ignite/blob/a4256544/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 c6859f8..a85d40d 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
@@ -17,6 +17,8 @@
package org.apache.ignite.internal.processors.cache.database.freelist;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReferenceArray;
import org.apache.ignite.IgniteCheckedException;
@@ -37,6 +39,7 @@ 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;
@@ -66,7 +69,9 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
private final PageHandler<CacheDataRow, Boolean> updateRow = new UpdateRow();
- /** */
+ /**
+ *
+ */
private class UpdateRow extends PageHandler<CacheDataRow, Boolean> {
@Override public Boolean run(Page page, PageIO iox, long pageAddr, CacheDataRow row, int itemId)
throws IgniteCheckedException {
@@ -83,91 +88,104 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
/** */
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;
+ @Override public Boolean run(Page page, PageIO iox, long pageAddr, Void row, int itemId)
+ throws IgniteCheckedException {
+ DataPageIO io = (DataPageIO)iox;
- int freeSpace = io.getFreeSpace(pageAddr);
+ int freeSpace = io.getFreeSpace(pageAddr);
- int newFreeSpace = io.compact(pageAddr, freeSpace, pageSize());
+ int newFreeSpace = io.compact(pageAddr, freeSpace, pageSize());
- assert freeSpace == newFreeSpace;
+ assert freeSpace == newFreeSpace;
- if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
- int newBucket = bucket(newFreeSpace);
+ if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
+ int newBucket = bucket(newFreeSpace);
// System.out.println("End compact [freeSpace=" + freeSpace +
// ", newSpace=" + newFreeSpace +
// ", b=" + newBucket + ']');
- putInBucket(newBucket, page);
- }
+ putInBucket(newBucket, page);
+ }
// else
// System.out.println("End compact, no reuse [freeSpace=" + freeSpace +
// ", newSpace=" + newFreeSpace + ']');
- return Boolean.TRUE;
- }
- };
+ return Boolean.TRUE;
+ }
+ };
/** */
- private final PageHandler<Void, Boolean> compact2 = new Compact2();
+ private final PageHandler<Integer, Compact2Res> compact2 = new Compact2();
- private class Compact2 extends PageHandler<Void, Boolean> {
- @Override public Boolean run(Page page, PageIO iox, long pageAddr, Void ignore, int reqSpace)
+ /**
+ *
+ */
+ private class Compact2 extends PageHandler<Integer, Compact2Res> {
+ @Override public Compact2Res run(Page page, PageIO iox, long pageAddr, Integer b, int reqSpace)
throws IgniteCheckedException {
DataPageIO io = (DataPageIO)iox;
int freeSpace = io.getFreeSpace(pageAddr);
+ int newBucket = bucket(freeSpace);
+
+ if (newBucket == b)
+ return Compact2Res.BUCKET_NOT_CHANGED;
+
int newFreeSpace = io.compact(pageAddr, freeSpace, pageSize());
assert freeSpace == newFreeSpace;
if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
if (newFreeSpace >= reqSpace)
- return Boolean.TRUE;
-
- int newBucket = bucket(newFreeSpace);
+ return Compact2Res.FOUND;
putInBucket(newBucket, page);
}
- return Boolean.FALSE;
+ return Compact2Res.MOVED;
}
};
/** */
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;
-
- int rowSize = getRowSize(row);
- int oldFreeSpace = io.getFreeSpace(pageAddr);
+ @Override public Integer run(Page page, PageIO iox, long pageAddr, CacheDataRow row, int written)
+ throws IgniteCheckedException {
+ DataPageIO io = (DataPageIO)iox;
- assert oldFreeSpace > 0 : oldFreeSpace;
+ int rowSize = getRowSize(row);
+ int oldFreeSpace = io.getFreeSpace(pageAddr);
- // If the full row does not fit into this page write only a fragment.
- written = (written == 0 && oldFreeSpace >= rowSize) ? addRow(page, pageAddr, io, row, rowSize):
- addRowFragment(page, pageAddr, io, row, written, rowSize);
+ assert oldFreeSpace > 0 : oldFreeSpace;
- // Reread free space after update.
- int newFreeSpace = io.getFreeSpace(pageAddr);
+ // If the full row does not fit into this page write only a fragment.
+ written = (written == 0 && oldFreeSpace >= rowSize) ? addRow(page, pageAddr, io, row, rowSize):
+ addRowFragment(page, pageAddr, io, row, written, rowSize);
- if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
- int bucket = bucket(newFreeSpace);
+ // Reread free space after update.
+ //int newFreeSpace = io.getFreeSpace(pageAddr);
+ int newFreeSpace = Math.max(io.getFreeSpace(pageAddr), io.getFreeSpace2(pageAddr));
- putInBucket(bucket, page);
- }
+ if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
+ int bucket = bucket(newFreeSpace);
- // Avoid boxing with garbage generation for usual case.
- return written == rowSize ? COMPLETE : written;
+ putInBucket(bucket, page);
}
+ // Avoid boxing with garbage generation for usual case.
+ return written == rowSize ? COMPLETE : written;
+ }
+
/**
* @param page Page.
* @param pageAddr Page address.
@@ -218,6 +236,9 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
/** */
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 {
@@ -225,13 +246,34 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
int oldFreeSpace = io.getFreeSpace(pageAddr);
- assert oldFreeSpace >= 0: oldFreeSpace;
+ assert oldFreeSpace >= 0 : oldFreeSpace;
long nextLink = io.removeRow(pageAddr, itemId, pageSize());
int newFreeSpace = io.getFreeSpace(pageAddr);
- assert newFreeSpace > oldFreeSpace;
+ //assert newFreeSpace > oldFreeSpace : "n=" + newFreeSpace + ", o=" + oldFreeSpace;
+
+ if (newFreeSpace > MIN_PAGE_FREE_SPACE) {
+ int curBucket = io.getBucket(pageAddr);
+
+ assert curBucket == -1 || (curBucket >= 0 && curBucket < BUCKETS) : curBucket;
+
+ if (curBucket >= 0) {
+ int newBucket = bucket(newFreeSpace);
+
+ if ((newBucket != curBucket)) {
+ int stripe = io.getStripe(pageAddr);
+
+ assert stripe >= 0 && stripe < STACKS_PER_BUCKET : stripe;
+
+ DataPageList list = (DataPageList)buckets[curBucket].get(stripe);
+
+ if (list != null)
+ list.needCompact = true;
+ }
+ }
+ }
// For common case boxed 0L will be cached inside of Long, so no garbage will be produced.
return nextLink;
@@ -248,6 +290,16 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
private final ReuseListImpl reuseList;
+ private LongAdder8 scanCnt = new LongAdder8();
+ private LongAdder8 scanCntSuccess = new LongAdder8();
+ private LongAdder8 scanBuckets = new LongAdder8();
+
+ private LongAdder8 syncClearCnt = new LongAdder8();
+ private LongAdder8 syncClearSuccess = new LongAdder8();
+ private LongAdder8 syncClearBuckets = new LongAdder8();
+ private LongAdder8 syncClearLists = new LongAdder8();
+ private LongAdder8 syncClearPages = new LongAdder8();
+
/**
* @param cacheId Cache ID.
* @param name Name (for debug purpose).
@@ -259,6 +311,7 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
* @throws IgniteCheckedException If failed.
*/
public FreeListImpl2(
+ final IgniteLogger log,
int cacheId,
String name,
PageMemory pageMem,
@@ -267,6 +320,7 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
long metaPageId,
boolean initNew) throws IgniteCheckedException {
super(cacheId, pageMem, wal);
+ this.log = log;
this.reuseList = new ReuseListImpl(cacheId, name, pageMem, wal, 0, true);
int pageSize = pageMem.pageSize();
@@ -317,6 +371,53 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
compacter.setDaemon(true);
compacter.start();
+
+ Thread dump = new Thread(new Runnable() {
+ @Override public void run() {
+ try {
+ while (!Thread.currentThread().isInterrupted()) {
+ {
+ long scanCnt0 = scanCnt.sumThenReset();
+
+ if (scanCnt0 > 0) {
+ long scanCntSuccess0 = scanCntSuccess.sumThenReset();
+ long scanBuckets0 = scanBuckets.sumThenReset();
+
+ log.info("Bucket scans [total=" + scanCnt0 +
+ ", success=" + scanCntSuccess0 +
+ ", success %=" + scanCntSuccess0 / (double)scanCnt0 +
+ ", avgBuckets=" + scanBuckets0 / (double)scanCnt0 + ']');
+ }
+ }
+
+ long syncClearCnt0 = syncClearCnt.sumThenReset();
+
+ if (syncClearCnt0 > 0) {
+ long syncClearSuccess0 = syncClearSuccess.sumThenReset();
+ long syncClearBuckets0 = syncClearBuckets.sumThenReset();
+ long syncClearLists0 = syncClearLists.sumThenReset();
+ long syncClearPages0 = syncClearPages.sumThenReset();
+
+ log.info("Sync clear [total=" + syncClearCnt0 +
+ ", success=" + syncClearSuccess0 +
+ ", success %=" + syncClearSuccess0 / (double)syncClearCnt0 +
+ ", avgBuckets=" + syncClearBuckets0 / (double)syncClearCnt0 +
+ ", avgLists=" + syncClearLists0 / (double)syncClearCnt0 +
+ ", avgPages=" + syncClearPages0 / (double)syncClearCnt0 +
+ ']');
+ }
+
+ Thread.sleep(5000);
+ }
+ }
+ catch (Exception e) {
+ if (!(e instanceof InterruptedException))
+ e.printStackTrace();
+ }
+ }
+ });
+ dump.setDaemon(true);
+ dump.start();
}
private void putInBucket(int bucket, Page page) throws IgniteCheckedException {
@@ -330,7 +431,7 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
if (list != null) {
//System.out.println(Thread.currentThread().getName() + " put in bucket [b=" + bucket + ", stripe=" + idx + ']');
- list.put(page);
+ list.put(page, bucket, idx);
return;
}
@@ -434,12 +535,14 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
for (int i = 0; i < stacks.length(); i++) {
DataPageList pageList = stacks.get(i);
- if (pageList != null) {
+ if (pageList != null && pageList.needCompact) {
boolean take = stacks.compareAndSet(i, pageList, null);
if (take) {
compactStack(pageList);
+ pageList.needCompact = false;
+
stacks.set(i, pageList);
}
}
@@ -471,84 +574,139 @@ public class FreeListImpl2 extends DataStructure implements FreeList, ReuseList
int written = 0;
do {
- int freeSpace = Math.min(MIN_SIZE_FOR_DATA_PAGE, rowSize - written);
+ final int freeSpace = Math.min(MIN_SIZE_FOR_DATA_PAGE, rowSize - written);
- int bucket = bucket(freeSpace);
+ final int bucket = bucket(freeSpace);
Page foundPage = null;
+ int cntr = 0;
+
// TODO: properly handle reuse bucket.
for (int b = bucket; b < BUCKETS; b++) {
+ cntr++;
+
foundPage = takeFromBucket(b);
if (foundPage != null)
break;
}
- if (locCompact && foundPage == null && bucket > 0 && cg.compareAndSet(false, true)) {
- try {
- for (int b = 0; b < bucket; b++) {
- AtomicReferenceArray<DataPageList> stacks = buckets[b];
+ scanCnt.increment();
+ scanBuckets.add(cntr);
+
+ if (foundPage != null)
+ scanCntSuccess.increment();
+
+ if (foundPage == null && bucket > 0)
+ foundPage = syncClear(freeSpace, bucket);
+
+ try (Page page = foundPage == null ? allocateDataPage(row.partition()) : foundPage) {
+ // If it is an existing page, we do not need to initialize it.
+ DataPageIO init = foundPage == null ? 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);
+ }
+
+ enum Compact2Res {
+ FOUND,
+ MOVED,
+ BUCKET_NOT_CHANGED
+ }
+
+ private Page syncClear(final int freeSpace, final int bucket) throws IgniteCheckedException {
+ if (locCompact && cg.compareAndSet(false, true)) {
+ int buckets = 0;
+ int lists = 0;
+ int pages = 0;
+
+ boolean res = false;
+
+ try {
+ for (int b = 0; b < bucket; b++) {
+ buckets++;
+
+ AtomicReferenceArray<DataPageList> stacks = this.buckets[b];
+
+ final Integer B = b;
+
+ for (int i = 0; i < STACKS_PER_BUCKET; i++) {
+ DataPageList pageList = stacks.get(i);
+
+ if (pageList != null && pageList.needCompact) {
+ lists++;
+
+ boolean take = stacks.compareAndSet(i, pageList, null);
+
+ if (take) {
+ Page page;
- for (int i = 0; i < STACKS_PER_BUCKET; i++) {
- DataPageList pageList = stacks.get(i);
+ List<Page> mvPages = null;
- if (pageList != null) {
- boolean take = stacks.compareAndSet(i, pageList, null);
+ try {
+ while ((page = pageList.take(cacheId)) != null) {
+ pages++;
- if (take) {
- Page page;
+ Compact2Res found = writePage(pageMem,
+ page,
+ this,
+ compact2,
+ null,
+ wal,
+ B,
+ freeSpace,
+ null);
- try {
- while ((page = pageList.take(cacheId)) != null) {
- Boolean found = writePage(pageMem,
- page,
- this,
- compact2,
- null,
- wal,
- null,
- freeSpace,
- null);
+ assert found != null;
- assert found != null;
+ if (found == Compact2Res.FOUND) {
+ res = true;
- if (found) {
- foundPage = page;
+ return page;
+ }
+ else if (found == Compact2Res.BUCKET_NOT_CHANGED) {
+ if (mvPages == null)
+ mvPages = new ArrayList<>();
- break;
- }
+ mvPages.add(page);
}
}
- finally {
- stacks.set(i, pageList);
+ }
+ finally {
+ if (mvPages != null) {
+ for (int p = 0; p < mvPages.size(); p++)
+ pageList.put(mvPages.get(p), b, i);
}
+
+ if (!res)
+ pageList.needCompact = false;
+
+ stacks.set(i, pageList);
}
}
-
- if (foundPage != null)
- break;
}
-
- if (foundPage != null)
- break;
}
}
- finally {
- cg.set(false);
- }
}
+ finally {
+ if (res)
+ syncClearSuccess.increment();
- try (Page page = foundPage == null ? allocateDataPage(row.partition()) : foundPage) {
- // If it is an existing page, we do not need to initialize it.
- DataPageIO init = foundPage == null ? DataPageIO.VERSIONS.latest() : null;
-
- written = writePage(pageMem, page, this, writeRow, init, wal, row, written, FAIL_I);
+ syncClearCnt.increment();
+ syncClearBuckets.add(buckets);
+ syncClearLists.add(lists);
+ syncClearPages.add(pages);
- assert written != FAIL_I; // We can't fail here.
+ cg.set(false);
}
}
- while (written != COMPLETE);
+
+ return null;
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/a4256544/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 5618a8c..ac2cf13 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
@@ -54,7 +54,13 @@ public class DataPageIO extends PageIO {
private static final int NEXT_PAGE_ID_OFF = COMMON_HEADER_END;
/** */
- private static final int FREE_LIST_PAGE_ID_OFF = NEXT_PAGE_ID_OFF + 8;
+ private static final int BUCKET_OFF = NEXT_PAGE_ID_OFF + 8;
+
+ /** */
+ private static final int STRIPE_OFF = BUCKET_OFF + 4;
+
+ /** */
+ private static final int FREE_LIST_PAGE_ID_OFF = STRIPE_OFF + 4;
/** */
private static final int FREE_SPACE_OFF = FREE_LIST_PAGE_ID_OFF + 8;
@@ -99,6 +105,8 @@ public class DataPageIO extends PageIO {
setEmptyPage(pageAddr, pageSize);
setFreeListPageId(pageAddr, 0L);
+ setBucket(pageAddr, -1);
+ setStripe(pageAddr, -1);
}
/**
@@ -144,6 +152,22 @@ public class DataPageIO extends PageIO {
return PageUtils.getLong(pageAddr, NEXT_PAGE_ID_OFF);
}
+ public void setBucket(long pageAddr, int bucket) {
+ PageUtils.putInt(pageAddr, BUCKET_OFF, bucket);
+ }
+
+ public int getBucket(long pageAddr) {
+ return PageUtils.getInt(pageAddr, BUCKET_OFF);
+ }
+
+ public void setStripe(long pageAddr, int stripe) {
+ PageUtils.putInt(pageAddr, STRIPE_OFF, stripe);
+ }
+
+ public int getStripe(long pageAddr) {
+ return PageUtils.getInt(pageAddr, STRIPE_OFF);
+ }
+
/**
* @param pageAddr Page address.
* @param dataOff Data offset.
@@ -218,7 +242,7 @@ public class DataPageIO extends PageIO {
int indirectCnt = getIndirectCount(pageAddr);
int firstEntryOff = getFirstEntryOffset(pageAddr);
- return firstEntryOff - (ITEMS_OFF + ITEM_SIZE * (directCnt + indirectCnt));
+ return firstEntryOff - (ITEMS_OFF + ITEM_SIZE * (directCnt + indirectCnt)) - (ITEM_SIZE + PAYLOAD_LEN_SIZE + LINK_SIZE);
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/a4256544/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImpl2SelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImpl2SelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImpl2SelfTest.java
index 6bac890..ce3595e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImpl2SelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImpl2SelfTest.java
@@ -90,7 +90,7 @@ public class FreeListImpl2SelfTest extends GridCommonAbstractTest {
public void testCompact() throws Exception {
pageMem = createPageMemory(1024);
- FreeListImpl2 fl = new FreeListImpl2(1, "freelist", pageMem, null, null, 0, true);
+ FreeListImpl2 fl = new FreeListImpl2(log, 1, "freelist", pageMem, null, null, 0, true);
fl.rnd = new Random();
for (int iter = 0; iter < 100_000; iter++) {
@@ -121,7 +121,7 @@ public class FreeListImpl2SelfTest extends GridCommonAbstractTest {
public void testCompact1() throws Exception {
pageMem = createPageMemory(1024);
- FreeListImpl2 fl = new FreeListImpl2(1, "freelist", pageMem, null, null, 0, true);
+ FreeListImpl2 fl = new FreeListImpl2(log, 1, "freelist", pageMem, null, null, 0, true);
fl.rnd = new Random(1);
fl.log = log;
@@ -171,7 +171,7 @@ public class FreeListImpl2SelfTest extends GridCommonAbstractTest {
assert id != 0;
- pl.put(pageMem.page(1, id));
+ pl.put(pageMem.page(1, id), 0, 0);
ids.push(id);
}
@@ -206,7 +206,7 @@ public class FreeListImpl2SelfTest extends GridCommonAbstractTest {
System.out.println("Iter: " + i);
for (Long id : ids)
- pl.put(pageMem.page(1, id));
+ pl.put(pageMem.page(1, id), 0, 0);
final int THREADS = 16;
@@ -258,7 +258,7 @@ public class FreeListImpl2SelfTest extends GridCommonAbstractTest {
System.out.println("Iter: " + i);
for (Long id : ids)
- pl.put(pageMem.page(1, id));
+ pl.put(pageMem.page(1, id), 0, 0);
final int THREADS = 16;
@@ -279,7 +279,7 @@ public class FreeListImpl2SelfTest extends GridCommonAbstractTest {
takeCnt.incrementAndGet();
if (ThreadLocalRandom.current().nextBoolean()) {
- pl.put(page);
+ pl.put(page, 0, 0);
putCnt.incrementAndGet();
}
[4/9] ignite git commit: Merge branch 'ignite-db-x' of
https://github.com/gridgain/apache-ignite into ignite-db-x
Posted by sb...@apache.org.
Merge branch 'ignite-db-x' of https://github.com/gridgain/apache-ignite into ignite-db-x
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a1c6558c
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a1c6558c
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a1c6558c
Branch: refs/heads/ignite-3477-freelist
Commit: a1c6558cba5caee05941d6203bff1d5be0b77586
Parents: 9c87aff e15cbe8
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Fri Jan 27 19:37:42 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Fri Jan 27 19:37:42 2017 +0300
----------------------------------------------------------------------
.../apache/ignite/internal/IgniteKernal.java | 61 +++++++++++---------
.../store/jdbc/CacheJdbcPojoStoreTest.java | 13 +++++
...artitionedBackupNodeFailureRecoveryTest.java | 12 +++-
.../odbc/OdbcProcessorValidationSelfTest.java | 9 ++-
.../cpp/core-test/config/cache-test.xml | 1 -
5 files changed, 66 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/a1c6558c/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
[8/9] ignite git commit: ignite-3477 lock free freelist
Posted by sb...@apache.org.
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();
}
}
});
[3/9] ignite git commit: ignite-db-x remove swapEnabled in xml config
Posted by sb...@apache.org.
ignite-db-x remove swapEnabled in xml config
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e15cbe8b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e15cbe8b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e15cbe8b
Branch: refs/heads/ignite-3477-freelist
Commit: e15cbe8b283bd9dc5cc9e3c355a4326c718e510f
Parents: 0e78dd1
Author: Dmitriy Govorukhin <dg...@gridgain.com>
Authored: Fri Jan 27 18:11:06 2017 +0300
Committer: Dmitriy Govorukhin <dg...@gridgain.com>
Committed: Fri Jan 27 18:11:06 2017 +0300
----------------------------------------------------------------------
modules/platforms/cpp/core-test/config/cache-test.xml | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/e15cbe8b/modules/platforms/cpp/core-test/config/cache-test.xml
----------------------------------------------------------------------
diff --git a/modules/platforms/cpp/core-test/config/cache-test.xml b/modules/platforms/cpp/core-test/config/cache-test.xml
index 0ea5876..fc11722 100644
--- a/modules/platforms/cpp/core-test/config/cache-test.xml
+++ b/modules/platforms/cpp/core-test/config/cache-test.xml
@@ -129,7 +129,6 @@
<bean id="cache-template" abstract="true" class="org.apache.ignite.configuration.CacheConfiguration">
<property name="rebalanceMode" value="SYNC"/>
<property name="writeSynchronizationMode" value="FULL_SYNC"/>
- <property name="swapEnabled" value="true"/>
<property name="backups" value="1"/>
<property name="eagerTtl" value="true"/>
</bean>
[2/9] ignite git commit: ignite-db-x fix testBackUpFail,
close tcp port if fail on start, refactoring odbc test, fix testParallelLoad,
testLoadCache for binary mode.
Posted by sb...@apache.org.
ignite-db-x fix testBackUpFail, close tcp port if fail on start, refactoring odbc test, fix testParallelLoad, testLoadCache for binary mode.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0e78dd1d
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0e78dd1d
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0e78dd1d
Branch: refs/heads/ignite-3477-freelist
Commit: 0e78dd1dd4e039dcf1ec094e1c84733529d6fedc
Parents: ad06102
Author: Dmitriy Govorukhin <dg...@gridgain.com>
Authored: Fri Jan 27 16:18:12 2017 +0300
Committer: Dmitriy Govorukhin <dg...@gridgain.com>
Committed: Fri Jan 27 16:18:12 2017 +0300
----------------------------------------------------------------------
.../apache/ignite/internal/IgniteKernal.java | 61 +++++++++++---------
.../store/jdbc/CacheJdbcPojoStoreTest.java | 13 +++++
...artitionedBackupNodeFailureRecoveryTest.java | 12 +++-
.../odbc/OdbcProcessorValidationSelfTest.java | 9 ++-
4 files changed, 66 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/0e78dd1d/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 c280b30..c11b770 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
@@ -880,37 +880,44 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
// Start processors before discovery manager, so they will
// be able to start receiving messages once discovery completes.
- startProcessor(createComponent(DiscoveryNodeValidationProcessor.class, ctx));
- startProcessor(new GridClockSyncProcessor(ctx));
- startProcessor(new GridAffinityProcessor(ctx));
- startProcessor(createComponent(GridSegmentationProcessor.class, ctx));
- startProcessor(createComponent(IgniteCacheObjectProcessor.class, ctx));
- startProcessor(new GridCacheProcessor(ctx));
- startProcessor(new GridClusterStateProcessor(ctx));
- startProcessor(new GridQueryProcessor(ctx));
- startProcessor(new OdbcProcessor(ctx));
- startProcessor(new GridServiceProcessor(ctx));
- startProcessor(new GridTaskSessionProcessor(ctx));
- startProcessor(new GridJobProcessor(ctx));
- startProcessor(new GridTaskProcessor(ctx));
- startProcessor((GridProcessor)SCHEDULE.createOptional(ctx));
- startProcessor(new GridRestProcessor(ctx));
- startProcessor(new DataStreamProcessor(ctx));
- startProcessor((GridProcessor)IGFS.create(ctx, F.isEmpty(cfg.getFileSystemConfiguration())));
- startProcessor(new GridContinuousProcessor(ctx));
- startProcessor(createHadoopComponent());
- startProcessor(new DataStructuresProcessor(ctx));
- startProcessor(createComponent(PlatformProcessor.class, ctx));
+ try {
+ startProcessor(createComponent(DiscoveryNodeValidationProcessor.class, ctx));
+ startProcessor(new GridClockSyncProcessor(ctx));
+ startProcessor(new GridAffinityProcessor(ctx));
+ startProcessor(createComponent(GridSegmentationProcessor.class, ctx));
+ startProcessor(createComponent(IgniteCacheObjectProcessor.class, ctx));
+ startProcessor(new GridCacheProcessor(ctx));
+ startProcessor(new GridClusterStateProcessor(ctx));
+ startProcessor(new GridQueryProcessor(ctx));
+ startProcessor(new OdbcProcessor(ctx));
+ startProcessor(new GridServiceProcessor(ctx));
+ startProcessor(new GridTaskSessionProcessor(ctx));
+ startProcessor(new GridJobProcessor(ctx));
+ startProcessor(new GridTaskProcessor(ctx));
+ startProcessor((GridProcessor)SCHEDULE.createOptional(ctx));
+ startProcessor(new GridRestProcessor(ctx));
+ startProcessor(new DataStreamProcessor(ctx));
+ startProcessor((GridProcessor)IGFS.create(ctx, F.isEmpty(cfg.getFileSystemConfiguration())));
+ startProcessor(new GridContinuousProcessor(ctx));
+ startProcessor(createHadoopComponent());
+ startProcessor(new DataStructuresProcessor(ctx));
+ startProcessor(createComponent(PlatformProcessor.class, ctx));
+
+ // Start plugins.
+ for (PluginProvider provider : ctx.plugins().allProviders()) {
+ ctx.add(new GridPluginComponent(provider));
+
+ provider.start(ctx.plugins().pluginContextForProvider(provider));
+ }
- // Start plugins.
- for (PluginProvider provider : ctx.plugins().allProviders()) {
- ctx.add(new GridPluginComponent(provider));
+ fillNodeAttributes(clusterProc.updateNotifierEnabled());
+ }catch (Throwable e) {
+ // Stop discovery spi to close tcp socket.
+ ctx.discovery().stop(true);
- provider.start(ctx.plugins().pluginContextForProvider(provider));
+ throw e;
}
- fillNodeAttributes(clusterProc.updateNotifierEnabled());
-
gw.writeLock();
try {
http://git-wip-us.apache.org/repos/asf/ignite/blob/0e78dd1d/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java
index 4a0b1da..be38541 100644
--- a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java
@@ -29,6 +29,7 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentLinkedQueue;
import javax.cache.integration.CacheWriterException;
+import org.apache.ignite.binary.BinaryObject;
import org.apache.ignite.cache.store.jdbc.dialect.H2Dialect;
import org.apache.ignite.cache.store.jdbc.model.Organization;
import org.apache.ignite.cache.store.jdbc.model.OrganizationKey;
@@ -295,6 +296,12 @@ public class CacheJdbcPojoStoreTest extends GridAbstractCacheStoreSelfTest<Cache
IgniteBiInClosure<Object, Object> c = new CI2<Object, Object>() {
@Override public void apply(Object k, Object v) {
+ if (k instanceof BinaryObject)
+ k = ((BinaryObject)k).deserialize();
+
+ if (v instanceof BinaryObject)
+ v = ((BinaryObject)k).deserialize();
+
if (k instanceof OrganizationKey && v instanceof Organization)
orgKeys.add((OrganizationKey)k);
else if (k instanceof PersonKey && v instanceof Person)
@@ -381,6 +388,12 @@ public class CacheJdbcPojoStoreTest extends GridAbstractCacheStoreSelfTest<Cache
IgniteBiInClosure<Object, Object> c = new CI2<Object, Object>() {
@Override public void apply(Object k, Object v) {
+ if (k instanceof BinaryObject)
+ k = ((BinaryObject)k).deserialize();
+
+ if (v instanceof BinaryObject)
+ v = ((BinaryObject)k).deserialize();
+
if (k instanceof PersonComplexKey && v instanceof Person)
prnComplexKeys.add((PersonComplexKey)k);
else
http://git-wip-us.apache.org/repos/asf/ignite/blob/0e78dd1d/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePartitionedBackupNodeFailureRecoveryTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePartitionedBackupNodeFailureRecoveryTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePartitionedBackupNodeFailureRecoveryTest.java
index 6654fd9..34006bb 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePartitionedBackupNodeFailureRecoveryTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePartitionedBackupNodeFailureRecoveryTest.java
@@ -33,6 +33,7 @@ import org.apache.ignite.configuration.NearCacheConfiguration;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.processors.cache.IgniteCacheAbstractTest;
+import org.apache.ignite.internal.util.typedef.PA;
import static org.apache.ignite.cache.CacheAtomicWriteOrderMode.PRIMARY;
import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
@@ -40,6 +41,7 @@ import static org.apache.ignite.cache.CacheMode.PARTITIONED;
import static org.apache.ignite.cache.CacheRebalanceMode.SYNC;
import static org.apache.ignite.cache.CacheWriteSynchronizationMode.PRIMARY_SYNC;
import static org.apache.ignite.testframework.GridTestUtils.runAsync;
+import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
/**
*/
@@ -148,11 +150,19 @@ public class IgniteCachePartitionedBackupNodeFailureRecoveryTest extends IgniteC
IgniteEx backUp = startGrid(2);
- IgniteCache<Integer, Integer> cache3 = backUp.cache(null);
+ final IgniteCache<Integer, Integer> cache3 = backUp.cache(null);
lock.lock();
try {
+ boolean res = waitForCondition(new PA() {
+ @Override public boolean apply() {
+ return cache3.localPeek(finalKey) != null;
+ }
+ }, 1000);
+
+ assertTrue(res);
+
Integer backUpVal = cache3.localPeek(finalKey);
Integer exp = cntr.get();
http://git-wip-us.apache.org/repos/asf/ignite/blob/0e78dd1d/modules/core/src/test/java/org/apache/ignite/internal/processors/odbc/OdbcProcessorValidationSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/odbc/OdbcProcessorValidationSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/odbc/OdbcProcessorValidationSelfTest.java
index aaee2a9..2cf0c8f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/odbc/OdbcProcessorValidationSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/odbc/OdbcProcessorValidationSelfTest.java
@@ -21,6 +21,8 @@ import org.apache.ignite.IgniteException;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.configuration.OdbcConfiguration;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -36,7 +38,7 @@ public class OdbcProcessorValidationSelfTest extends GridCommonAbstractTest {
/** {@inheritDoc} */
@Override protected void afterTest() throws Exception {
- Ignition.stopAll(true);
+ stopAllGrids();
}
/**
@@ -159,6 +161,11 @@ public class OdbcProcessorValidationSelfTest extends GridCommonAbstractTest {
cfg.setLocalHost("127.0.0.1");
cfg.setOdbcConfiguration(odbcCfg);
+ TcpDiscoverySpi spi = new TcpDiscoverySpi();
+ spi.setIpFinder(new TcpDiscoveryVmIpFinder(true));
+
+ cfg.setDiscoverySpi(spi);
+
if (success)
Ignition.start(cfg);
else {