Skip to content

Commit 2a510f8

Browse files
committed
Ensure 5.x indices have 6.x commit tags before open engine
The previous commit chose to fallback the default value if max_unsafe_autoid_timestamp is not available. That approach is embarrassing as it may hide an underlying problem. This commit backs out that logic and ensures all required 6.x commit tags are available (if not, generate them) before opening engine.
1 parent 6fa7af4 commit 2a510f8

File tree

5 files changed

+10
-9
lines changed

5 files changed

+10
-9
lines changed

server/src/main/java/org/elasticsearch/index/shard/LocalShardSnapshot.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import java.io.Closeable;
3535
import java.io.IOException;
3636
import java.util.Collection;
37-
import java.util.Map;
3837
import java.util.concurrent.atomic.AtomicBoolean;
3938

4039
final class LocalShardSnapshot implements Closeable {
@@ -67,8 +66,7 @@ long maxSeqNo() {
6766
}
6867

6968
long maxUnsafeAutoIdTimestamp() {
70-
final Map<String, String> commitUserData = shard.getEngine().commitStats().getUserData();
71-
return Long.parseLong(commitUserData.getOrDefault(InternalEngine.MAX_UNSAFE_AUTO_ID_TIMESTAMP_COMMIT_ID, "-1"));
69+
return Long.parseLong(shard.getEngine().commitStats().getUserData().get(InternalEngine.MAX_UNSAFE_AUTO_ID_TIMESTAMP_COMMIT_ID));
7270
}
7371

7472
Directory getSnapshotDirectory() {

server/src/main/java/org/elasticsearch/index/shard/StoreRecovery.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ private void internalRecoverFromStore(IndexShard indexShard) throws IndexShardRe
397397
store.associateIndexWithNewTranslog(translogUUID);
398398
} else if (indexShouldExists) {
399399
if (indexShard.indexSettings().getIndexVersionCreated().before(Version.V_6_0_0_rc1)) {
400-
if (store.ensureIndexHasHistoryUUIDAndSeqNo()) {
400+
if (store.ensureIndexHas6xCommitTags()) {
401401
si = store.readLastCommittedSegmentsInfo(); // new commit is flushed - refresh SegmentInfo.
402402
}
403403
}

server/src/main/java/org/elasticsearch/index/store/Store.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -1524,7 +1524,7 @@ public void associateIndexWithNewTranslog(final String translogUUID) throws IOEx
15241524
*
15251525
* @return <code>true</code> if a new commit is flushed, otherwise return false
15261526
*/
1527-
public boolean ensureIndexHasHistoryUUIDAndSeqNo() throws IOException {
1527+
public boolean ensureIndexHas6xCommitTags() throws IOException {
15281528
metadataLock.writeLock().lock();
15291529
try (IndexWriter writer = newIndexWriter(IndexWriterConfig.OpenMode.APPEND, directory, null)) {
15301530
final Map<String, String> userData = getUserData(writer);
@@ -1538,6 +1538,9 @@ public boolean ensureIndexHasHistoryUUIDAndSeqNo() throws IOException {
15381538
maps.put(SequenceNumbers.MAX_SEQ_NO, Long.toString(SequenceNumbers.NO_OPS_PERFORMED));
15391539
maps.put(SequenceNumbers.LOCAL_CHECKPOINT_KEY, Long.toString(SequenceNumbers.NO_OPS_PERFORMED));
15401540
}
1541+
if (userData.containsKey(InternalEngine.MAX_UNSAFE_AUTO_ID_TIMESTAMP_COMMIT_ID) == false) {
1542+
userData.put(InternalEngine.MAX_UNSAFE_AUTO_ID_TIMESTAMP_COMMIT_ID, "-1");
1543+
}
15411544
if (maps.isEmpty() == false) {
15421545
updateCommitData(writer, maps);
15431546
return true;

server/src/main/java/org/elasticsearch/indices/recovery/RecoveryTarget.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ public void cleanFiles(int totalTranslogOps, Store.MetadataSnapshot sourceMetaDa
438438
try {
439439
store.cleanupAndVerify("recovery CleanFilesRequestHandler", sourceMetaData);
440440
if (indexShard.indexSettings().getIndexVersionCreated().before(Version.V_6_0_0_rc1)) {
441-
store.ensureIndexHasHistoryUUIDAndSeqNo();
441+
store.ensureIndexHas6xCommitTags();
442442
}
443443
// TODO: Assign the global checkpoint to the max_seqno of the safe commit if the index version >= 6.2
444444
final String translogUUID =

server/src/test/java/org/elasticsearch/index/store/StoreTests.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1092,7 +1092,7 @@ public void testEnsureIndexHasHistoryUUIDAndSeqNo() throws IOException {
10921092
writer.commit();
10931093
}
10941094

1095-
store.ensureIndexHasHistoryUUIDAndSeqNo();
1095+
store.ensureIndexHas6xCommitTags();
10961096
SegmentInfos segmentInfos = Lucene.readSegmentInfos(store.directory());
10971097
assertThat(segmentInfos.getUserData(), hasKey(Engine.HISTORY_UUID_KEY));
10981098
assertThat(segmentInfos.getUserData(), hasEntry(equalTo(SequenceNumbers.LOCAL_CHECKPOINT_KEY), equalTo("-1")));
@@ -1110,7 +1110,7 @@ public void testEnsureIndexHasHistoryUUIDAndSeqNo() throws IOException {
11101110
writer.setLiveCommitData(newCommitData.entrySet());
11111111
writer.commit();
11121112
}
1113-
store.ensureIndexHasHistoryUUIDAndSeqNo();
1113+
store.ensureIndexHas6xCommitTags();
11141114
segmentInfos = Lucene.readSegmentInfos(store.directory());
11151115
assertThat(segmentInfos.getUserData(),
11161116
hasEntry(equalTo(Engine.HISTORY_UUID_KEY), equalTo(historyUUID)));
@@ -1126,7 +1126,7 @@ public void testEnsureIndexHasHistoryUUIDAndSeqNo() throws IOException {
11261126
writer.setLiveCommitData(newCommitData.entrySet());
11271127
writer.commit();
11281128
}
1129-
store.ensureIndexHasHistoryUUIDAndSeqNo();
1129+
store.ensureIndexHas6xCommitTags();
11301130
segmentInfos = Lucene.readSegmentInfos(store.directory());
11311131
assertThat(segmentInfos.getUserData(), hasKey(Engine.HISTORY_UUID_KEY));
11321132
assertThat(segmentInfos.getUserData(),

0 commit comments

Comments
 (0)