Skip to content

Commit 386f0c3

Browse files
fix test
1 parent 6f45d07 commit 386f0c3

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

server/src/test/java/org/elasticsearch/snapshots/CorruptedBlobStoreRepositoryIT.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package org.elasticsearch.snapshots;
2020

21+
import org.elasticsearch.Version;
2122
import org.elasticsearch.action.ActionRunnable;
2223
import org.elasticsearch.action.admin.cluster.snapshots.create.CreateSnapshotResponse;
2324
import org.elasticsearch.action.support.PlainActionFuture;
@@ -27,18 +28,25 @@
2728
import org.elasticsearch.cluster.metadata.MetaData;
2829
import org.elasticsearch.cluster.metadata.RepositoriesMetaData;
2930
import org.elasticsearch.cluster.service.ClusterService;
31+
import org.elasticsearch.common.bytes.BytesReference;
3032
import org.elasticsearch.common.settings.Settings;
3133
import org.elasticsearch.common.unit.ByteSizeUnit;
34+
import org.elasticsearch.common.xcontent.XContentFactory;
3235
import org.elasticsearch.repositories.RepositoriesService;
3336
import org.elasticsearch.repositories.Repository;
3437
import org.elasticsearch.repositories.RepositoryData;
3538
import org.elasticsearch.repositories.RepositoryException;
39+
import org.elasticsearch.repositories.ShardGenerations;
3640
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
3741
import org.elasticsearch.threadpool.ThreadPool;
3842

3943
import java.nio.file.Files;
4044
import java.nio.file.Path;
45+
import java.nio.file.StandardOpenOption;
46+
import java.util.Collections;
4147
import java.util.Locale;
48+
import java.util.function.Function;
49+
import java.util.stream.Collectors;
4250

4351
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
4452
import static org.hamcrest.Matchers.containsString;
@@ -263,11 +271,24 @@ public void testHandlingMissingRootLevelSnapshotMetadata() throws Exception {
263271
logger.info("--> delete root level snapshot metadata blob for snapshot [{}]", snapshotToCorrupt);
264272
Files.delete(repo.resolve(String.format(Locale.ROOT, BlobStoreRepository.SNAPSHOT_NAME_FORMAT, snapshotToCorrupt.getUUID())));
265273

274+
logger.info("--> strip version information from index-N blob");
275+
final RepositoryData withoutVersions = new RepositoryData(repositoryData.getGenId(),
276+
repositoryData.getSnapshotIds().stream().collect(Collectors.toMap(
277+
SnapshotId::getUUID, Function.identity())),
278+
repositoryData.getSnapshotIds().stream().collect(Collectors.toMap(
279+
SnapshotId::getUUID, repositoryData::getSnapshotState)),
280+
Collections.emptyMap(), Collections.emptyMap(), ShardGenerations.EMPTY);
281+
282+
Files.write(repo.resolve(BlobStoreRepository.INDEX_FILE_PREFIX + withoutVersions.getGenId()),
283+
BytesReference.toBytes(BytesReference.bytes(withoutVersions.snapshotsToXContent(XContentFactory.jsonBuilder(),
284+
true))), StandardOpenOption.TRUNCATE_EXISTING);
285+
266286
logger.info("--> verify that repo is assumed in old metadata format");
267287
final SnapshotsService snapshotsService = internalCluster().getCurrentMasterNodeInstance(SnapshotsService.class);
268288
final ThreadPool threadPool = internalCluster().getCurrentMasterNodeInstance(ThreadPool.class);
269289
assertThat(PlainActionFuture.get(f -> threadPool.generic().execute(
270-
ActionRunnable.supply(f, () -> snapshotsService.hasOldVersionSnapshots(repoName, repositoryData, null)))), is(true));
290+
ActionRunnable.supply(f, () -> snapshotsService.hasOldVersionSnapshots(repoName, getRepositoryData(repository), null)))),
291+
is(true));
271292

272293
logger.info("--> verify that snapshot with missing root level metadata can be deleted");
273294
assertAcked(client().admin().cluster().prepareDeleteSnapshot(repoName, snapshotToCorrupt.getName()).get());
@@ -276,6 +297,10 @@ public void testHandlingMissingRootLevelSnapshotMetadata() throws Exception {
276297
assertThat(PlainActionFuture.get(f -> threadPool.generic().execute(
277298
ActionRunnable.supply(f, () -> snapshotsService.hasOldVersionSnapshots(repoName, getRepositoryData(repository), null)))),
278299
is(false));
300+
final RepositoryData finalRepositoryData = getRepositoryData(repository);
301+
for (SnapshotId snapshotId : finalRepositoryData.getSnapshotIds()) {
302+
assertThat(finalRepositoryData.getVersion(snapshotId), is(Version.CURRENT));
303+
}
279304
}
280305

281306
private void assertRepositoryBlocked(Client client, String repo, String existingSnapshot) {

0 commit comments

Comments
 (0)