Skip to content

Commit 1669224

Browse files
committed
Stronger test for precommit/roll/commit sequences
1 parent b4ed67d commit 1669224

File tree

2 files changed

+46
-19
lines changed

2 files changed

+46
-19
lines changed

core/src/main/java/org/elasticsearch/index/translog/Translog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1412,7 +1412,7 @@ public long commit() throws IOException {
14121412
assert readers.stream().anyMatch(r -> r.getGeneration() == currentCommittingGeneration)
14131413
: "readers missing committing generation [" + currentCommittingGeneration + "]";
14141414
// set the last committed generation otherwise old files will not be cleaned up
1415-
lastCommittedTranslogFileGeneration = current.getGeneration();
1415+
lastCommittedTranslogFileGeneration = currentCommittingGeneration;
14161416
currentCommittingGeneration = NOT_SET_GENERATION;
14171417
trimUnreferencedReaders();
14181418
}

core/src/test/java/org/elasticsearch/index/translog/TranslogTests.java

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.elasticsearch.common.io.FileSystemUtils;
4242
import org.elasticsearch.common.io.stream.BytesStreamOutput;
4343
import org.elasticsearch.common.io.stream.StreamInput;
44+
import org.elasticsearch.common.lease.Releasable;
4445
import org.elasticsearch.common.settings.Settings;
4546
import org.elasticsearch.common.unit.ByteSizeUnit;
4647
import org.elasticsearch.common.unit.ByteSizeValue;
@@ -102,6 +103,7 @@
102103
import java.util.stream.Collectors;
103104

104105
import static org.elasticsearch.common.util.BigArrays.NON_RECYCLING_INSTANCE;
106+
import static org.elasticsearch.common.util.BigArrays.PAGE_SIZE_IN_BYTES;
105107
import static org.hamcrest.Matchers.containsString;
106108
import static org.hamcrest.Matchers.equalTo;
107109
import static org.hamcrest.Matchers.greaterThan;
@@ -2153,34 +2155,59 @@ public void testRollGenerationBetweenPrepareCommitAndCommit() throws IOException
21532155
final long generation = translog.currentFileGeneration();
21542156
int seqNo = 0;
21552157

2156-
final int operationsBefore = randomIntBetween(1, 256);
2157-
for (int i = 0; i < operationsBefore; i++) {
2158-
translog.add(new Translog.NoOp(seqNo++, 0, "test"));
2158+
final int rollsBefore = randomIntBetween(0, 16);
2159+
for (int r = 1; r <= rollsBefore; r++) {
2160+
final int operationsBefore = randomIntBetween(1, 256);
2161+
for (int i = 0; i < operationsBefore; i++) {
2162+
translog.add(new Translog.NoOp(seqNo++, 0, "test"));
2163+
}
2164+
2165+
try (Releasable ignored = translog.writeLock.acquire()) {
2166+
translog.rollGeneration();
2167+
}
2168+
2169+
assertThat(translog.currentFileGeneration(), equalTo(generation + r));
2170+
for (int i = 0; i <= r; i++) {
2171+
assertFileIsPresent(translog, generation + r);
2172+
}
21592173
}
21602174

2175+
assertThat(translog.currentFileGeneration(), equalTo(generation + rollsBefore));
21612176
translog.prepareCommit();
2162-
assertThat(translog.currentFileGeneration(), equalTo(generation + 1));
2163-
assertFileIsPresent(translog, generation);
2164-
assertFileIsPresent(translog, generation + 1);
2177+
assertThat(translog.currentFileGeneration(), equalTo(generation + rollsBefore + 1));
21652178

2166-
final int operationsBetween = randomIntBetween(1, 256);
2167-
for (int i = 0; i < operationsBetween; i++) {
2168-
translog.add(new Translog.NoOp(seqNo++, 0, "test"));
2179+
for (int i = 0; i <= rollsBefore + 1; i++) {
2180+
assertFileIsPresent(translog, generation + i);
21692181
}
21702182

2171-
try (ReleasableLock ignored = translog.writeLock.acquire()) {
2172-
translog.rollGeneration();
2183+
final int rollsBetween = randomIntBetween(0, 16);
2184+
for (int r = 1; r <= rollsBetween; r++) {
2185+
final int operationsBetween = randomIntBetween(1, 256);
2186+
for (int i = 0; i < operationsBetween; i++) {
2187+
translog.add(new Translog.NoOp(seqNo++, 0, "test"));
2188+
}
2189+
2190+
try (Releasable ignored = translog.writeLock.acquire()) {
2191+
translog.rollGeneration();
2192+
}
2193+
2194+
assertThat(
2195+
translog.currentFileGeneration(),
2196+
equalTo(generation + rollsBefore + 1 + r));
2197+
for (int i = 0; i <= rollsBefore + 1 + r; i++) {
2198+
assertFileIsPresent(translog, generation + i);
2199+
}
21732200
}
2174-
assertThat(translog.currentFileGeneration(), equalTo(generation + 2));
2175-
assertFileIsPresent(translog, generation);
2176-
assertFileIsPresent(translog, generation + 1);
2177-
assertFileIsPresent(translog, generation + 2);
21782201

21792202
translog.commit();
21802203

2181-
assertFileDeleted(translog, generation);
2182-
assertFileDeleted(translog, generation + 1);
2183-
assertFileIsPresent(translog, generation + 2);
2204+
for (int i = 0; i < rollsBefore; i++) {
2205+
assertFileDeleted(translog, generation + i);
2206+
}
2207+
for (int i = rollsBefore; i <= rollsBefore + 1 + rollsBetween; i++) {
2208+
assertFileIsPresent(translog, generation + i);
2209+
}
2210+
21842211
}
21852212

21862213
}

0 commit comments

Comments
 (0)