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/04/23 14:47:33 UTC
[ignite] branch ignite-11796 updated: IGNITE-11796: Fix for WAL
recovery stopped with 'Partition consistency failure: newPageId': Logger
added
This is an automated email from the ASF dual-hosted git repository.
dpavlov pushed a commit to branch ignite-11796
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/ignite-11796 by this push:
new 5b238f7 IGNITE-11796: Fix for WAL recovery stopped with 'Partition consistency failure: newPageId': Logger added
5b238f7 is described below
commit 5b238f749290aabbc2fa18c57d603a270d550b6c
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Tue Apr 23 17:46:55 2019 +0300
IGNITE-11796: Fix for WAL recovery stopped with 'Partition consistency failure: newPageId': Logger added
---
.../wal/record/delta/InitNewPageRecord.java | 17 +++++++++++-
.../wal/record/delta/MetaPageInitRecord.java | 20 ++++++++++++++-
.../record/delta/PagesListInitNewPageRecord.java | 30 +++++++++++++++++++++-
.../wal/serializer/RecordDataV1Serializer.java | 12 ++++++---
4 files changed, 73 insertions(+), 6 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InitNewPageRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InitNewPageRecord.java
index c750d49..5c20167 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InitNewPageRecord.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InitNewPageRecord.java
@@ -18,12 +18,14 @@
package org.apache.ignite.internal.pagemem.wal.record.delta;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
import org.apache.ignite.internal.pagemem.PageIdUtils;
import org.apache.ignite.internal.pagemem.PageMemory;
import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
import org.apache.ignite.internal.util.tostring.GridToStringExclude;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
+import org.jetbrains.annotations.Nullable;
/**
* Initializes new page by calling {@link PageIO#initNewPage(long, long, int)}.
@@ -47,6 +49,18 @@ public class InitNewPageRecord extends PageDeltaRecord {
* @param newPageId New page ID.
*/
public InitNewPageRecord(int grpId, long pageId, int ioType, int ioVer, long newPageId) {
+ this(grpId, pageId, ioType, ioVer, newPageId, null);
+ }
+
+ /**
+ * @param grpId Cache group ID.
+ * @param pageId Page ID.
+ * @param ioType IO type.
+ * @param ioVer IO version.
+ * @param newPageId New page ID.
+ * @param log Logger for case data is invalid. Can be {@code null}, but is needed when processing existing storage.
+ */
+ public InitNewPageRecord(int grpId, long pageId, int ioType, int ioVer, long newPageId, @Nullable IgniteLogger log) {
super(grpId, pageId);
this.ioType = ioType;
@@ -57,13 +71,14 @@ public class InitNewPageRecord extends PageDeltaRecord {
int partId = PageIdUtils.partId(pageId);
if (newPartId == 0 && newPartId != partId) {
- U.warn(null, "Partition consistency warning: " +
+ U.warn(log, "Partition consistency warning: " +
"newPageId=" + Long.toHexString(newPageId) + " (newPartId: 0) " +
"pageId=" + Long.toHexString(pageId) + " (partId: " + partId + ")");
// Partition consistency failure came from https://issues.apache.org/jira/browse/IGNITE-11030
// This invalid record can come from persistent stores, version < 2.7.5 where this bug was not fixed.
newPartId = partId; // Just hack new page ID to make this record to be correctly applied.
+
this.newPageId = PageIdUtils.pageId(
newPartId,
PageIdUtils.flag(newPageId),
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRecord.java
index 7b3f3a9..d683a5a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRecord.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRecord.java
@@ -18,10 +18,12 @@
package org.apache.ignite.internal.pagemem.wal.record.delta;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
import org.apache.ignite.internal.pagemem.PageMemory;
import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageMetaIO;
import org.apache.ignite.internal.util.typedef.internal.S;
+import org.jetbrains.annotations.Nullable;
/**
*
@@ -40,11 +42,26 @@ public class MetaPageInitRecord extends InitNewPageRecord {
* @param grpId Cache group ID.
* @param pageId Page ID.
* @param ioType IO type.
+ * @param ioVer Io version.
* @param treeRoot Tree root.
* @param reuseListRoot Reuse list root.
*/
public MetaPageInitRecord(int grpId, long pageId, int ioType, int ioVer, long treeRoot, long reuseListRoot) {
- super(grpId, pageId, ioType, ioVer, pageId);
+ this(grpId, pageId, ioType, ioVer, treeRoot, reuseListRoot, null);
+ }
+
+ /**
+ * @param grpId Cache group ID.
+ * @param pageId Page ID.
+ * @param ioType IO type.
+ * @param ioVer Io version.
+ * @param treeRoot Tree root.
+ * @param reuseListRoot Reuse list root.
+ * @param log Logger for case data is invalid. Can be {@code null}, but is needed when processing existing storage.
+ */
+ public MetaPageInitRecord(int grpId, long pageId, int ioType, int ioVer, long treeRoot, long reuseListRoot,
+ @Nullable IgniteLogger log) {
+ super(grpId, pageId, ioType, ioVer, pageId, log);
assert ioType == PageIO.T_META || ioType == PageIO.T_PART_META;
@@ -53,6 +70,7 @@ public class MetaPageInitRecord extends InitNewPageRecord {
this.ioType = ioType;
}
+
/**
* @return Tree root.
*/
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListInitNewPageRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListInitNewPageRecord.java
index 53c23b1..456314a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListInitNewPageRecord.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListInitNewPageRecord.java
@@ -18,12 +18,14 @@
package org.apache.ignite.internal.pagemem.wal.record.delta;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
import org.apache.ignite.internal.pagemem.PageMemory;
import org.apache.ignite.internal.processors.cache.persistence.freelist.io.PagesListNodeIO;
import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
import org.apache.ignite.internal.util.tostring.GridToStringExclude;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
+import org.jetbrains.annotations.Nullable;
/**
*
@@ -40,6 +42,9 @@ public class PagesListInitNewPageRecord extends InitNewPageRecord {
/**
* @param grpId Cache group ID.
* @param pageId Page ID.
+ * @param ioType IO type.
+ * @param ioVer IO version.
+ * @param newPageId New page ID.
* @param prevPageId Previous page ID.
* @param addDataPageId Optional page ID to add.
*/
@@ -52,7 +57,30 @@ public class PagesListInitNewPageRecord extends InitNewPageRecord {
long prevPageId,
long addDataPageId
) {
- super(grpId, pageId, ioType, ioVer, newPageId);
+ this(grpId, pageId, ioType, ioVer, newPageId, prevPageId, addDataPageId, null);
+ }
+
+ /**
+ * @param grpId Cache group ID.
+ * @param pageId Page ID.
+ * @param ioType IO type.
+ * @param ioVer IO version.
+ * @param newPageId New page ID.
+ * @param prevPageId Previous page ID.
+ * @param addDataPageId Optional page ID to add.
+ * @param log Logger for case data is invalid. Can be {@code null}, but is needed when processing existing storage.
+ */
+ public PagesListInitNewPageRecord(
+ int grpId,
+ long pageId,
+ int ioType,
+ int ioVer,
+ long newPageId,
+ long prevPageId,
+ long addDataPageId,
+ @Nullable IgniteLogger log
+ ) {
+ super(grpId, pageId, ioType, ioVer, newPageId, log);
this.prevPageId = prevPageId;
this.addDataPageId = addDataPageId;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordDataV1Serializer.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordDataV1Serializer.java
index 4ca65f4..19e8d7c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordDataV1Serializer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordDataV1Serializer.java
@@ -29,6 +29,7 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
import org.apache.ignite.internal.managers.encryption.GridEncryptionManager;
import org.apache.ignite.internal.pagemem.FullPageId;
import org.apache.ignite.internal.pagemem.wal.record.CacheState;
@@ -136,6 +137,9 @@ public class RecordDataV1Serializer implements RecordDataSerializer {
/** Cache object processor to reading {@link DataEntry DataEntries}. */
protected final IgniteCacheObjectProcessor co;
+ /** Logger. */
+ private final IgniteLogger log;
+
/** Serializer of {@link TxRecord} records. */
private TxRecordSerializer txRecordSerializer;
@@ -172,6 +176,8 @@ public class RecordDataV1Serializer implements RecordDataSerializer {
this.realPageSize = CU.encryptedPageSize(pageSize, encSpi);
else
this.realPageSize = pageSize;
+
+ log = cctx.logger(getClass());
}
/** {@inheritDoc} */
@@ -585,7 +591,7 @@ public class RecordDataV1Serializer implements RecordDataSerializer {
long treeRoot = in.readLong();
long reuseListRoot = in.readLong();
- res = new MetaPageInitRecord(cacheId, pageId, ioType, ioVer, treeRoot, reuseListRoot);
+ res = new MetaPageInitRecord(cacheId, pageId, ioType, ioVer, treeRoot, reuseListRoot, log);
break;
@@ -795,7 +801,7 @@ public class RecordDataV1Serializer implements RecordDataSerializer {
ioVer = in.readUnsignedShort();
long virtualPageId = in.readLong();
- res = new InitNewPageRecord(cacheId, pageId, ioType, ioVer, virtualPageId);
+ res = new InitNewPageRecord(cacheId, pageId, ioType, ioVer, virtualPageId, log);
break;
@@ -1025,7 +1031,7 @@ public class RecordDataV1Serializer implements RecordDataSerializer {
prevPageId = in.readLong();
long addDataPageId = in.readLong();
- res = new PagesListInitNewPageRecord(cacheId, pageId, ioType, ioVer, newPageId, prevPageId, addDataPageId);
+ res = new PagesListInitNewPageRecord(cacheId, pageId, ioType, ioVer, newPageId, prevPageId, addDataPageId, log);
break;