You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2019/01/23 15:09:16 UTC
[ignite] branch ignite-11030-test updated: IGNITE-11030 Scanning WAL
This is an automated email from the ASF dual-hosted git repository.
dpavlov pushed a commit to branch ignite-11030-test
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/ignite-11030-test by this push:
new ff3d95f IGNITE-11030 Scanning WAL
ff3d95f is described below
commit ff3d95f531087f6cc0f392ded204a2d46a243a49
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Wed Jan 23 18:09:11 2019 +0300
IGNITE-11030 Scanning WAL
---
.../persistence/db/IgniteTcBotSandboxTest.java | 83 +++++++++++++++++++++-
1 file changed, 81 insertions(+), 2 deletions(-)
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteTcBotSandboxTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteTcBotSandboxTest.java
index 4c8d9e9..991bd0b 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteTcBotSandboxTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteTcBotSandboxTest.java
@@ -18,6 +18,9 @@
package org.apache.ignite.internal.processors.cache.persistence.db;
import com.google.common.base.Preconditions;
+import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
import org.apache.ignite.IgniteBinary;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.binary.BinaryObject;
@@ -27,7 +30,23 @@ import org.apache.ignite.configuration.DataStorageConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.configuration.WALMode;
import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.pagemem.wal.WALIterator;
+import org.apache.ignite.internal.pagemem.wal.WALPointer;
+import org.apache.ignite.internal.pagemem.wal.record.PageSnapshot;
+import org.apache.ignite.internal.pagemem.wal.record.WALRecord;
+import org.apache.ignite.internal.pagemem.wal.record.delta.InitNewPageRecord;
+import org.apache.ignite.internal.pagemem.wal.record.delta.PageDeltaRecord;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
+import org.apache.ignite.internal.processors.cache.persistence.wal.FileWALPointer;
+import org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory;
+import org.apache.ignite.internal.processors.query.h2.database.io.H2ExtrasInnerIO;
+import org.apache.ignite.internal.processors.query.h2.database.io.H2ExtrasLeafIO;
+import org.apache.ignite.internal.processors.query.h2.database.io.H2InnerIO;
+import org.apache.ignite.internal.processors.query.h2.database.io.H2LeafIO;
+import org.apache.ignite.internal.processors.query.h2.database.io.H2MvccInnerIO;
+import org.apache.ignite.internal.processors.query.h2.database.io.H2MvccLeafIO;
import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
@@ -35,9 +54,27 @@ public class IgniteTcBotSandboxTest extends GridCommonAbstractTest {
public static final String TEST_HIST_CACHE_NAME = "teamcityTestRunHist";
+ // todo set correct path
+ public static final String WORK_DIR = "C:\\projects\\corrupt\\work";
+
@Test
public void readTcBotDb() throws Exception {
- System.out.println("Cache name hash code: " + U.safeAbs(TEST_HIST_CACHE_NAME.hashCode()));
+
+ PageIO.registerH2(H2InnerIO.VERSIONS, H2LeafIO.VERSIONS, H2MvccInnerIO.VERSIONS, H2MvccLeafIO.VERSIONS);
+ H2ExtrasInnerIO.register();
+ H2ExtrasLeafIO.register();
+
+ int grpId = U.safeAbs(TEST_HIST_CACHE_NAME.hashCode());
+ System.out.println("Cache name hash code: " + grpId);
+ IgniteWalIteratorFactory factory = new IgniteWalIteratorFactory(log);
+ WALIterator iter = factory.iterator(new File(WORK_DIR, "db\\wal\\archive\\TcHelper").getAbsolutePath());
+
+ long pageId = 0x00010000000145b4L;
+ processRecords(grpId, iter, pageId);
+
+ WALIterator iter2 = factory.iterator(new File(WORK_DIR, "db\\wal\\TcHelper").getAbsolutePath());
+
+ processRecords(grpId, iter2, pageId);
IgniteEx ignite = startGrid(0);
ignite.cluster().active(true);
@@ -60,11 +97,53 @@ public class IgniteTcBotSandboxTest extends GridCommonAbstractTest {
System.out.println(val);
}
+ private void processRecords(int grpId, WALIterator iter, long pageId) {
+ Set<Long> segments = new HashSet<>();
+ while (iter.hasNext()) {
+ IgniteBiTuple<WALPointer, WALRecord> next = iter.next();
+ WALPointer pos = next.get1();
+ WALRecord rec = next.get2();
+ FileWALPointer walPtr = (FileWALPointer)pos;
+ long idx = walPtr.index();
+
+ if (segments.add(idx)) {
+ System.out.println("Scanning segment [" + idx + "]," +
+ " relIdx [" + (idx % 10) + "]");
+ }
+
+ if (rec instanceof InitNewPageRecord) {
+ InitNewPageRecord initRec = (InitNewPageRecord)rec;
+
+ if (initRec.groupId() == grpId
+ && initRec.pageId() == pageId) {
+ System.out.println("InitNewPageRecord:: pos=" + pos
+ + ", rec=" + initRec.toString());
+ }
+ } else if (rec instanceof PageSnapshot) {
+ PageSnapshot snapshot = (PageSnapshot)rec;
+
+ if (snapshot.fullPageId().groupId() == grpId
+ && snapshot.fullPageId().pageId() == pageId) {
+ System.out.println("PageSnapshot:: pos=" + pos
+ + ", rec=" + snapshot.toString());
+ }
+ } else if(rec instanceof PageDeltaRecord) {
+ PageDeltaRecord deltaRec = (PageDeltaRecord)rec;
+
+ if (deltaRec.groupId() == grpId
+ && deltaRec.pageId() == pageId) {
+ System.out.println("PageDeltaRecord:: pos=" + pos
+ + ", rec=" + deltaRec.toString());
+ }
+ }
+ }
+ }
+
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
- cfg.setWorkDirectory("C:\\projects\\corrupt\\work"); // todo set correct path
+ cfg.setWorkDirectory(WORK_DIR);
cfg.setConsistentId("TcHelper");