You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2020/03/24 14:32:34 UTC
[ignite] branch master updated: IGNITE-12789 Delta record for
tracking page repairing.
This is an automated email from the ASF dual-hosted git repository.
agura pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new fd3065b IGNITE-12789 Delta record for tracking page repairing.
fd3065b is described below
commit fd3065b80025699c345e367037d7f1efe46c0231
Author: ibessonov <be...@gmail.com>
AuthorDate: Tue Mar 24 17:11:44 2020 +0300
IGNITE-12789 Delta record for tracking page repairing.
Signed-off-by: Andrey Gura <ag...@apache.org>
---
.../internal/pagemem/wal/record/WALRecord.java | 5 ++-
.../wal/record/delta/TrackingPageDeltaRecord.java | 30 ++++++-------
.../delta/TrackingPageRepairDeltaRecord.java | 51 ++++++++++++++++++++++
.../cache/persistence/tree/io/TrackingPageIO.java | 18 ++++----
.../wal/serializer/RecordDataV1Serializer.java | 4 +-
.../wal/serializer/RecordDataV2Serializer.java | 15 +++++++
.../testframework/wal/record/RecordUtils.java | 8 ++++
7 files changed, 104 insertions(+), 27 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/WALRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/WALRecord.java
index 67106a9..14c1bc4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/WALRecord.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/WALRecord.java
@@ -227,7 +227,10 @@ public abstract class WALRecord {
BTREE_META_PAGE_INIT_ROOT_V3(59, PHYSICAL),
/** Master key change record. */
- MASTER_KEY_CHANGE_RECORD(60, LOGICAL);
+ MASTER_KEY_CHANGE_RECORD(60, LOGICAL),
+
+ /** Record that indicates that "corrupted" flag should be removed from tracking page. */
+ TRACKING_PAGE_REPAIR_DELTA (61, PHYSICAL);
/** Index for serialization. Should be consistent throughout all versions. */
private final int idx;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageDeltaRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageDeltaRecord.java
index 3f11c58..62c8fb1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageDeltaRecord.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageDeltaRecord.java
@@ -29,24 +29,24 @@ public class TrackingPageDeltaRecord extends PageDeltaRecord {
/** Page id to mark. */
private final long pageIdToMark;
- /** Next snapshot id. */
- private final long nextSnapshotId;
+ /** Next snapshot tag. */
+ private final long nextSnapshotTag;
- /** Last successful snapshot id. */
- private final long lastSuccessfulSnapshotId;
+ /** Last successful snapshot tag. */
+ private final long lastSuccessfulSnapshotTag;
/**
* @param grpId Cache group id.
* @param pageId Page id.
- * @param nextSnapshotTag next snapshot tag
- * @param lastSuccessfulSnapshotId last successful snapshot id
+ * @param nextSnapshotTag Next snapshot tag.
+ * @param lastSuccessfulSnapshotTag Last successful snapshot tag.
*/
- public TrackingPageDeltaRecord(int grpId, long pageId, long pageIdToMark, long nextSnapshotTag, long lastSuccessfulSnapshotId) {
+ public TrackingPageDeltaRecord(int grpId, long pageId, long pageIdToMark, long nextSnapshotTag, long lastSuccessfulSnapshotTag) {
super(grpId, pageId);
this.pageIdToMark = pageIdToMark;
- this.nextSnapshotId = nextSnapshotTag;
- this.lastSuccessfulSnapshotId = lastSuccessfulSnapshotId;
+ this.nextSnapshotTag = nextSnapshotTag;
+ this.lastSuccessfulSnapshotTag = lastSuccessfulSnapshotTag;
}
/**
@@ -59,23 +59,23 @@ public class TrackingPageDeltaRecord extends PageDeltaRecord {
/**
*
*/
- public long nextSnapshotId() {
- return nextSnapshotId;
+ public long nextSnapshotTag() {
+ return nextSnapshotTag;
}
/**
*
*/
- public long lastSuccessfulSnapshotId() {
- return lastSuccessfulSnapshotId;
+ public long lastSuccessfulSnapshotTag() {
+ return lastSuccessfulSnapshotTag;
}
/** {@inheritDoc} */
@Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException {
TrackingPageIO.VERSIONS.forPage(pageAddr).markChanged(pageMem.pageBuffer(pageAddr),
pageIdToMark,
- nextSnapshotId,
- lastSuccessfulSnapshotId,
+ nextSnapshotTag,
+ lastSuccessfulSnapshotTag,
pageMem.realPageSize(groupId()));
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageRepairDeltaRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageRepairDeltaRecord.java
new file mode 100644
index 0000000..0c0d13a
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageRepairDeltaRecord.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.pagemem.wal.record.delta;
+
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.pagemem.PageMemory;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.TrackingPageIO;
+import org.apache.ignite.internal.util.typedef.internal.S;
+
+/**
+ * Record that indicates that "corrupted" flag should be removed from tracking page.
+ */
+public class TrackingPageRepairDeltaRecord extends PageDeltaRecord {
+ /**
+ * @param grpId Cache group ID.
+ * @param pageId Page ID.
+ */
+ public TrackingPageRepairDeltaRecord(int grpId, long pageId) {
+ super(grpId, pageId);
+ }
+
+ /** {@inheritDoc} */
+ @Override public RecordType type() {
+ return RecordType.TRACKING_PAGE_REPAIR_DELTA;
+ }
+
+ /** */
+ @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException {
+ TrackingPageIO.VERSIONS.forPage(pageAddr).resetCorruptFlag(pageAddr);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TrackingPageRepairDeltaRecord.class, this, "super", super.toString());
+ }
+}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/TrackingPageIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/TrackingPageIO.java
index 80dbf25..dee301d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/TrackingPageIO.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/TrackingPageIO.java
@@ -37,12 +37,12 @@ import org.jetbrains.annotations.Nullable;
* N depends on page size (how many bytes we can use for tracking).
*
*
- * +-----------------------------------------+-----------------------------------------+
- * | left half | right half |
- * +---------+----------+----+------------------------------------+----+------------------------------------+
- * | HEADER | Last |size| |size| |
- * | |SnapshotId|2b. | tracking bits |2b. | tracking bits |
- * +---------+----------+----+------------------------------------+----+------------------------------------+
+ * +-----------------------------------------+-----------------------------------------+
+ * | left half | right half |
+ * +---------+-----------+----+------------------------------------+----+------------------------------------+
+ * | HEADER | Last |size| |size| |
+ * | |SnapshotTag|2b. | tracking bits |2b. | tracking bits |
+ * +---------+--------- -+----+------------------------------------+----+------------------------------------+
*
*/
public class TrackingPageIO extends PageIO {
@@ -122,8 +122,8 @@ public class TrackingPageIO extends PageIO {
/**
* @param buf Buffer.
- * @param nextSnapshotTag Next snapshot id.
- * @param lastSuccessfulSnapshotTag Last successful snapshot id.
+ * @param nextSnapshotTag Next snapshot tag.
+ * @param lastSuccessfulSnapshotTag Last successful snapshot tag.
* @param pageSize Page size.
*
* @return <code>-1</code> if everything is ok, otherwise last saved tag.
@@ -134,7 +134,7 @@ public class TrackingPageIO extends PageIO {
long last = getLastSnapshotTag(buf);
- if(last > nextSnapshotTag) { //we have lost snapshot tag therefore should mark this tracking as corrupted
+ if (last > nextSnapshotTag) { //we have lost snapshot tag therefore should mark this tracking as corrupted
PageHandler.zeroMemory(buf, LAST_SNAPSHOT_TAG_OFFSET, buf.capacity() - LAST_SNAPSHOT_TAG_OFFSET);
setLastSnasphotTag(buf, nextSnapshotTag | CORRUPT_FLAG_MASK);
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 829ef58..88fdc9b 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
@@ -1714,8 +1714,8 @@ public class RecordDataV1Serializer implements RecordDataSerializer {
buf.putLong(tpDelta.pageId());
buf.putLong(tpDelta.pageIdToMark());
- buf.putLong(tpDelta.nextSnapshotId());
- buf.putLong(tpDelta.lastSuccessfulSnapshotId());
+ buf.putLong(tpDelta.nextSnapshotTag());
+ buf.putLong(tpDelta.lastSuccessfulSnapshotTag());
break;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordDataV2Serializer.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordDataV2Serializer.java
index 3063a25..21c5c99 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordDataV2Serializer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/serializer/RecordDataV2Serializer.java
@@ -43,6 +43,7 @@ import org.apache.ignite.internal.pagemem.wal.record.SnapshotRecord;
import org.apache.ignite.internal.pagemem.wal.record.TxRecord;
import org.apache.ignite.internal.pagemem.wal.record.WALRecord;
import org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType;
+import org.apache.ignite.internal.pagemem.wal.record.delta.TrackingPageRepairDeltaRecord;
import org.apache.ignite.internal.processors.cache.CacheObject;
import org.apache.ignite.internal.processors.cache.CacheObjectContext;
import org.apache.ignite.internal.processors.cache.GridCacheContext;
@@ -218,6 +219,12 @@ public class RecordDataV2Serializer extends RecordDataV1Serializer {
return new RollbackRecord(grpId, partId, start, range);
+ case TRACKING_PAGE_REPAIR_DELTA:
+ cacheId = in.readInt();
+ pageId = in.readLong();
+
+ return new TrackingPageRepairDeltaRecord(cacheId, pageId);
+
default:
return super.readPlainRecord(type, in, encrypted, recordSize);
}
@@ -310,6 +317,14 @@ public class RecordDataV2Serializer extends RecordDataV1Serializer {
break;
+ case TRACKING_PAGE_REPAIR_DELTA:
+ TrackingPageRepairDeltaRecord tprDelta = (TrackingPageRepairDeltaRecord)rec;
+
+ buf.putInt(tprDelta.groupId());
+ buf.putLong(tprDelta.pageId());
+
+ break;
+
default:
super.writePlainRecord(rec, buf);
}
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/wal/record/RecordUtils.java b/modules/core/src/test/java/org/apache/ignite/testframework/wal/record/RecordUtils.java
index 2855de7..37dbeb8 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/wal/record/RecordUtils.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/wal/record/RecordUtils.java
@@ -76,6 +76,7 @@ import org.apache.ignite.internal.pagemem.wal.record.delta.ReplaceRecord;
import org.apache.ignite.internal.pagemem.wal.record.delta.RotatedIdPartRecord;
import org.apache.ignite.internal.pagemem.wal.record.delta.SplitExistingPageRecord;
import org.apache.ignite.internal.pagemem.wal.record.delta.TrackingPageDeltaRecord;
+import org.apache.ignite.internal.pagemem.wal.record.delta.TrackingPageRepairDeltaRecord;
import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState;
import org.apache.ignite.internal.processors.cache.mvcc.MvccVersionImpl;
import org.apache.ignite.internal.processors.cache.persistence.wal.FileWALPointer;
@@ -143,6 +144,7 @@ import static org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType
import static org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.SNAPSHOT;
import static org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.SWITCH_SEGMENT_RECORD;
import static org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.TRACKING_PAGE_DELTA;
+import static org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.TRACKING_PAGE_REPAIR_DELTA;
import static org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.TX_RECORD;
import static org.apache.ignite.internal.processors.cache.tree.DataInnerIO.VERSIONS;
@@ -189,6 +191,7 @@ public class RecordUtils {
put(PARTITION_META_PAGE_UPDATE_COUNTERS, RecordUtils::buildMetaPageUpdatePartitionDataRecord);
put(MEMORY_RECOVERY, RecordUtils::buildMemoryRecoveryRecord);
put(TRACKING_PAGE_DELTA, RecordUtils::buildTrackingPageDeltaRecord);
+ put(TRACKING_PAGE_REPAIR_DELTA, RecordUtils::buildTrackingPageRepairDeltaRecord);
put(META_PAGE_UPDATE_LAST_SUCCESSFUL_SNAPSHOT_ID, RecordUtils::buildMetaPageUpdateLastSuccessfulSnapshotId);
put(META_PAGE_UPDATE_LAST_SUCCESSFUL_FULL_SNAPSHOT_ID, RecordUtils::buildMetaPageUpdateLastSuccessfulFullSnapshotId);
put(META_PAGE_UPDATE_NEXT_SNAPSHOT_ID, RecordUtils::buildMetaPageUpdateNextSnapshotId);
@@ -420,6 +423,11 @@ public class RecordUtils {
}
/** **/
+ public static TrackingPageRepairDeltaRecord buildTrackingPageRepairDeltaRecord() {
+ return new TrackingPageRepairDeltaRecord(1, 1);
+ }
+
+ /** **/
public static MetaPageUpdateLastSuccessfulSnapshotId buildMetaPageUpdateLastSuccessfulSnapshotId() {
return new MetaPageUpdateLastSuccessfulSnapshotId(1, 1, 1, 1);
}