Skip to content

Commit 7bccf91

Browse files
committed
Populate RecoveryState details for shallow snapshot restore
Signed-off-by: Lakshya Taragi <lakshya.taragi@gmail.com>
1 parent 0ca4ed0 commit 7bccf91

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

server/src/internalClusterTest/java/org/opensearch/remotestore/RemoteRestoreSnapshotIT.java

+20
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.opensearch.action.admin.cluster.remotestore.restore.RestoreRemoteStoreRequest;
1313
import org.opensearch.action.admin.cluster.snapshots.restore.RestoreSnapshotResponse;
1414
import org.opensearch.action.admin.indices.delete.DeleteIndexRequest;
15+
import org.opensearch.action.admin.indices.recovery.RecoveryResponse;
1516
import org.opensearch.action.delete.DeleteResponse;
1617
import org.opensearch.action.support.PlainActionFuture;
1718
import org.opensearch.client.Client;
@@ -31,6 +32,7 @@
3132
import org.opensearch.index.remote.RemoteStoreEnums.PathType;
3233
import org.opensearch.index.shard.IndexShard;
3334
import org.opensearch.indices.IndicesService;
35+
import org.opensearch.indices.recovery.RecoveryState;
3436
import org.opensearch.indices.replication.common.ReplicationType;
3537
import org.opensearch.snapshots.AbstractSnapshotIntegTestCase;
3638
import org.opensearch.snapshots.SnapshotInfo;
@@ -579,6 +581,24 @@ public void testRestoreShallowSnapshotRepository() throws ExecutionException, In
579581
ensureGreen(restoredIndexName1);
580582
assertDocsPresentInIndex(client, restoredIndexName1, numDocsInIndex1);
581583

584+
// ensure recovery details are non-zero
585+
RecoveryResponse recoveryResponse = client().admin().indices().prepareRecoveries(restoredIndexName1).execute().actionGet();
586+
for (Map.Entry<String, List<RecoveryState>> entry : recoveryResponse.shardRecoveryStates().entrySet()) {
587+
for (RecoveryState recoveryState : entry.getValue()) {
588+
// ensure populated file details
589+
assertThat(recoveryState.getIndex().totalFileCount(), greaterThan(0));
590+
assertThat(recoveryState.getIndex().totalRecoverFiles(), greaterThan(0));
591+
assertThat(recoveryState.getIndex().recoveredFileCount(), greaterThan(0));
592+
assertThat(recoveryState.getIndex().recoveredFilesPercent(), greaterThan(0f));
593+
594+
// ensure populated bytes details
595+
assertThat(recoveryState.getIndex().recoveredBytes(), greaterThan(0L));
596+
assertThat(recoveryState.getIndex().totalBytes(), greaterThan(0L));
597+
assertThat(recoveryState.getIndex().totalRecoverBytes(), greaterThan(0L));
598+
assertThat(recoveryState.getIndex().recoveredBytesPercent(), greaterThan(0f));
599+
}
600+
}
601+
582602
// indexing some new docs and validating
583603
indexDocuments(client, restoredIndexName1, numDocsInIndex1, numDocsInIndex1 + 2);
584604
ensureGreen(restoredIndexName1);

server/src/main/java/org/opensearch/index/shard/IndexShard.java

+16-3
Original file line numberDiff line numberDiff line change
@@ -5117,10 +5117,23 @@ public void syncSegmentsFromGivenRemoteSegmentStore(
51175117
}
51185118
Map<String, RemoteSegmentStoreDirectory.UploadedSegmentMetadata> uploadedSegments = sourceRemoteDirectory
51195119
.getSegmentsUploadedToRemoteStore();
5120-
final Directory storeDirectory = store.directory();
5121-
store.incRef();
5122-
51235120
try {
5121+
final Directory storeDirectory;
5122+
if (recoveryState.getStage() == RecoveryState.Stage.INDEX) {
5123+
storeDirectory = new StoreRecovery.StatsDirectoryWrapper(store.directory(), recoveryState.getIndex());
5124+
for (String file : uploadedSegments.keySet()) {
5125+
long checksum = Long.parseLong(uploadedSegments.get(file).getChecksum());
5126+
if (overrideLocal || localDirectoryContains(storeDirectory, file, checksum) == false) {
5127+
recoveryState.getIndex().addFileDetail(file, uploadedSegments.get(file).getLength(), false);
5128+
} else {
5129+
recoveryState.getIndex().addFileDetail(file, uploadedSegments.get(file).getLength(), true);
5130+
}
5131+
}
5132+
} else {
5133+
storeDirectory = store.directory();
5134+
}
5135+
store.incRef();
5136+
51245137
String segmentsNFile = copySegmentFiles(
51255138
storeDirectory,
51265139
sourceRemoteDirectory,

0 commit comments

Comments
 (0)