diff options
author | Jason Tedor <jason@tedor.me> | 2017-06-22 11:14:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-22 11:14:25 -0400 |
commit | 8dcb1f5c7c1b5b55bb47e04353456382f9842206 (patch) | |
tree | f49e6b32586ae6d2ee61b2872e71c32a760c1aa6 /core/src/main/java/org/elasticsearch | |
parent | d96388205303fdb93607ea845501379c1dad2b0d (diff) |
Initialize max unsafe auto ID timestamp on shrink
When shrinking an index we initialize its max unsafe auto ID timestamp
to the maximum of the max unsafe auto ID timestamps on the source
shards.
Relates #25356
Diffstat (limited to 'core/src/main/java/org/elasticsearch')
-rw-r--r-- | core/src/main/java/org/elasticsearch/index/shard/LocalShardSnapshot.java | 5 | ||||
-rw-r--r-- | core/src/main/java/org/elasticsearch/index/shard/StoreRecovery.java | 10 |
2 files changed, 12 insertions, 3 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/shard/LocalShardSnapshot.java b/core/src/main/java/org/elasticsearch/index/shard/LocalShardSnapshot.java index ebf08874c0..f108300b95 100644 --- a/core/src/main/java/org/elasticsearch/index/shard/LocalShardSnapshot.java +++ b/core/src/main/java/org/elasticsearch/index/shard/LocalShardSnapshot.java @@ -28,6 +28,7 @@ import org.apache.lucene.store.NoLockFactory; import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.index.Index; import org.elasticsearch.index.engine.Engine; +import org.elasticsearch.index.engine.InternalEngine; import org.elasticsearch.index.store.Store; import java.io.Closeable; @@ -64,6 +65,10 @@ final class LocalShardSnapshot implements Closeable { return shard.getEngine().seqNoService().getMaxSeqNo(); } + long maxUnsafeAutoIdTimestamp() { + return Long.parseLong(shard.getEngine().commitStats().getUserData().get(InternalEngine.MAX_UNSAFE_AUTO_ID_TIMESTAMP_COMMIT_ID)); + } + Directory getSnapshotDirectory() { /* this directory will not be used for anything else but reading / copying files to another directory * we prevent all write operations on this directory with UOE - nobody should close it either. */ diff --git a/core/src/main/java/org/elasticsearch/index/shard/StoreRecovery.java b/core/src/main/java/org/elasticsearch/index/shard/StoreRecovery.java index 76f3595225..078e8b06d6 100644 --- a/core/src/main/java/org/elasticsearch/index/shard/StoreRecovery.java +++ b/core/src/main/java/org/elasticsearch/index/shard/StoreRecovery.java @@ -40,6 +40,7 @@ import org.elasticsearch.common.unit.ByteSizeValue; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.index.Index; import org.elasticsearch.index.engine.EngineException; +import org.elasticsearch.index.engine.InternalEngine; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.seqno.SequenceNumbers; import org.elasticsearch.index.snapshots.IndexShardRestoreFailedException; @@ -50,7 +51,6 @@ import org.elasticsearch.repositories.Repository; import java.io.IOException; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Set; @@ -120,7 +120,9 @@ final class StoreRecovery { final Directory directory = indexShard.store().directory(); // don't close this directory!! final Directory[] sources = shards.stream().map(LocalShardSnapshot::getSnapshotDirectory).toArray(Directory[]::new); final long maxSeqNo = shards.stream().mapToLong(LocalShardSnapshot::maxSeqNo).max().getAsLong(); - addIndices(indexShard.recoveryState().getIndex(), directory, indexSort, sources, maxSeqNo); + final long maxUnsafeAutoIdTimestamp = + shards.stream().mapToLong(LocalShardSnapshot::maxUnsafeAutoIdTimestamp).max().getAsLong(); + addIndices(indexShard.recoveryState().getIndex(), directory, indexSort, sources, maxSeqNo, maxUnsafeAutoIdTimestamp); internalRecoverFromStore(indexShard); // just trigger a merge to do housekeeping on the // copied segments - we will also see them in stats etc. @@ -139,7 +141,8 @@ final class StoreRecovery { final Directory target, final Sort indexSort, final Directory[] sources, - final long maxSeqNo) throws IOException { + final long maxSeqNo, + final long maxUnsafeAutoIdTimestamp) throws IOException { final Directory hardLinkOrCopyTarget = new org.apache.lucene.store.HardlinkCopyDirectoryWrapper(target); IndexWriterConfig iwc = new IndexWriterConfig(null) .setCommitOnClose(false) @@ -162,6 +165,7 @@ final class StoreRecovery { final HashMap<String, String> liveCommitData = new HashMap<>(2); liveCommitData.put(SequenceNumbers.MAX_SEQ_NO, Long.toString(maxSeqNo)); liveCommitData.put(SequenceNumbers.LOCAL_CHECKPOINT_KEY, Long.toString(maxSeqNo)); + liveCommitData.put(InternalEngine.MAX_UNSAFE_AUTO_ID_TIMESTAMP_COMMIT_ID, Long.toString(maxUnsafeAutoIdTimestamp)); return liveCommitData.entrySet().iterator(); }); writer.commit(); |