Skip to content

Commit

Permalink
[Remove] Old Translog Checkpoint Format (#1884)
Browse files Browse the repository at this point in the history
This commit removes support for old translog checkpoint formats prior to 7.0.0.

Signed-off-by: Nicholas Walter Knize <[email protected]>
  • Loading branch information
nknize authored Jan 11, 2022
1 parent c457272 commit 0887ac6
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 51 deletions.
40 changes: 5 additions & 35 deletions server/src/main/java/org/opensearch/index/translog/Checkpoint.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,31 +64,18 @@ final class Checkpoint {
final long minTranslogGeneration;
final long trimmedAboveSeqNo;

private static final int VERSION_6_0_0 = 2; // introduction of global checkpoints
private static final int CURRENT_VERSION = 3; // introduction of trimmed above seq#

private static final String CHECKPOINT_CODEC = "ckp";

// size of 6.4.0 checkpoint

static final int V3_FILE_SIZE = CodecUtil.headerLength(CHECKPOINT_CODEC) + Integer.BYTES // ops
+ Long.BYTES // offset
+ Long.BYTES // generation
+ Long.BYTES // minimum sequence number
+ Long.BYTES // maximum sequence number
+ Long.BYTES // global checkpoint
+ Long.BYTES // minimum translog generation in the translog
+ Long.BYTES // maximum reachable (trimmed) sequence number, introduced in 6.4.0
+ CodecUtil.footerLength();

// size of 6.0.0 checkpoint
static final int V2_FILE_SIZE = CodecUtil.headerLength(CHECKPOINT_CODEC) + Integer.BYTES // ops
+ Long.BYTES // offset
+ Long.BYTES // generation
+ Long.BYTES // minimum sequence number
+ Long.BYTES // maximum sequence number
+ Long.BYTES // global checkpoint
+ Long.BYTES // minimum translog generation in the translog
+ Long.BYTES // maximum reachable (trimmed) sequence number
+ CodecUtil.footerLength();

/**
Expand Down Expand Up @@ -177,18 +164,6 @@ static Checkpoint readCheckpointV3(final DataInput in) throws IOException {
return new Checkpoint(offset, numOps, generation, minSeqNo, maxSeqNo, globalCheckpoint, minTranslogGeneration, trimmedAboveSeqNo);
}

static Checkpoint readCheckpointV2(final DataInput in) throws IOException {
final long offset = in.readLong();
final int numOps = in.readInt();
final long generation = in.readLong();
final long minSeqNo = in.readLong();
final long maxSeqNo = in.readLong();
final long globalCheckpoint = in.readLong();
final long minTranslogGeneration = in.readLong();
final long trimmedAboveSeqNo = SequenceNumbers.UNASSIGNED_SEQ_NO;
return new Checkpoint(offset, numOps, generation, minSeqNo, maxSeqNo, globalCheckpoint, minTranslogGeneration, trimmedAboveSeqNo);
}

@Override
public String toString() {
return "Checkpoint{"
Expand Down Expand Up @@ -216,15 +191,10 @@ public static Checkpoint read(Path path) throws IOException {
try (IndexInput indexInput = dir.openInput(path.getFileName().toString(), IOContext.DEFAULT)) {
// We checksum the entire file before we even go and parse it. If it's corrupted we barf right here.
CodecUtil.checksumEntireFile(indexInput);
final int fileVersion = CodecUtil.checkHeader(indexInput, CHECKPOINT_CODEC, VERSION_6_0_0, CURRENT_VERSION);
if (fileVersion == VERSION_6_0_0) {
assert indexInput.length() == V2_FILE_SIZE : indexInput.length();
return Checkpoint.readCheckpointV2(indexInput);
} else {
assert fileVersion == CURRENT_VERSION : fileVersion;
assert indexInput.length() == V3_FILE_SIZE : indexInput.length();
return Checkpoint.readCheckpointV3(indexInput);
}
final int fileVersion = CodecUtil.checkHeader(indexInput, CHECKPOINT_CODEC, CURRENT_VERSION, CURRENT_VERSION);
assert fileVersion == CURRENT_VERSION : fileVersion;
assert indexInput.length() == V3_FILE_SIZE : indexInput.length();
return Checkpoint.readCheckpointV3(indexInput);
} catch (CorruptIndexException | NoSuchFileException | IndexFormatTooOldException | IndexFormatTooNewException e) {
throw new TranslogCorruptedException(path.toString(), e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3461,22 +3461,7 @@ public void testLegacyCheckpointVersion() throws IOException {
expectThrows(
TranslogCorruptedException.class,
IndexFormatTooOldException.class,
() -> Checkpoint.read(getDataPath("/org/opensearch/index/checkpoint/v1.ckp.binary"))
);
assertThat(
Checkpoint.read(getDataPath("/org/opensearch/index/checkpoint/v2.ckp.binary")),
equalTo(
new Checkpoint(
-1312746831014894010L,
44230819,
4168771208509507653L,
6217263213205155568L,
8590850694628654668L,
3768575734506660560L,
1476009383806516272L,
SequenceNumbers.UNASSIGNED_SEQ_NO
)
)
() -> Checkpoint.read(getDataPath("/org/opensearch/index/checkpoint/v2.ckp.binary"))
);
}

Expand Down
Binary file not shown.

0 comments on commit 0887ac6

Please sign in to comment.