Skip to content

Commit e135e1e

Browse files
authored
[Remote Store] Optimize segments metadata upload (opensearch-project#7905)
Signed-off-by: Ashish Singh <[email protected]>
1 parent 8dd5461 commit e135e1e

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

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

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,13 @@ public void beforeRefresh() throws IOException {}
164164
@Override
165165
public void afterRefresh(boolean didRefresh) {
166166

167-
if (didRefresh) {
167+
if (didRefresh || remoteDirectory.getSegmentsUploadedToRemoteStore().isEmpty()) {
168168
updateLocalRefreshTimeAndSeqNo();
169-
}
170-
171-
try {
172-
indexShard.getThreadPool().executor(ThreadPool.Names.REMOTE_REFRESH).submit(() -> syncSegments(false)).get();
173-
} catch (InterruptedException | ExecutionException e) {
174-
logger.info("Exception occurred while scheduling syncSegments", e);
169+
try {
170+
indexShard.getThreadPool().executor(ThreadPool.Names.REMOTE_REFRESH).submit(() -> syncSegments(false)).get();
171+
} catch (InterruptedException | ExecutionException e) {
172+
logger.info("Exception occurred while scheduling syncSegments", e);
173+
}
175174
}
176175
}
177176

@@ -232,9 +231,7 @@ private synchronized void syncSegments(boolean isRetry) {
232231
// Start metadata file upload
233232
uploadMetadata(localSegmentsPostRefresh, segmentInfos);
234233
clearStaleFilesFromLocalSegmentChecksumMap(localSegmentsPostRefresh);
235-
onSuccessfulSegmentsSync(refreshTimeMs, refreshSeqNo);
236-
indexShard.getEngine().translogManager().setMinSeqNoToKeep(lastRefreshedCheckpoint + 1);
237-
checkpointPublisher.publish(indexShard, checkpoint);
234+
onSuccessfulSegmentsSync(refreshTimeMs, refreshSeqNo, lastRefreshedCheckpoint, checkpoint);
238235
// At this point since we have uploaded new segments, segment infos and segment metadata file,
239236
// along with marking minSeqNoToKeep, upload has succeeded completely.
240237
shouldRetry = false;
@@ -278,7 +275,12 @@ private void beforeSegmentsSync(boolean isRetry) {
278275
segmentTracker.incrementTotalUploadsStarted();
279276
}
280277

281-
private void onSuccessfulSegmentsSync(long refreshTimeMs, long refreshSeqNo) {
278+
private void onSuccessfulSegmentsSync(
279+
long refreshTimeMs,
280+
long refreshSeqNo,
281+
long lastRefreshedCheckpoint,
282+
ReplicationCheckpoint checkpoint
283+
) {
282284
// Update latest uploaded segment files name in segment tracker
283285
segmentTracker.setLatestUploadedFiles(latestFileNameSizeOnLocalMap.keySet());
284286
// Update the remote refresh time and refresh seq no
@@ -287,6 +289,10 @@ private void onSuccessfulSegmentsSync(long refreshTimeMs, long refreshSeqNo) {
287289
resetBackOffDelayIterator();
288290
// Cancel the scheduled cancellable retry if possible and set it to null
289291
cancelAndResetScheduledCancellableRetry();
292+
// Set the minimum sequence number for keeping translog
293+
indexShard.getEngine().translogManager().setMinSeqNoToKeep(lastRefreshedCheckpoint + 1);
294+
// Publishing the new checkpoint which is used for remote store + segrep indexes
295+
checkpointPublisher.publish(indexShard, checkpoint);
290296
}
291297

292298
/**

server/src/test/java/org/opensearch/index/shard/ReplicaRecoveryWithRemoteTranslogOnPrimaryTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public void testNoTranslogHistoryTransferred() throws Exception {
120120
shards.flush();
121121
List<DocIdSeqNoAndSource> docIdAndSeqNosAfterFlush = getDocIdAndSeqNos(primary);
122122
int moreDocs = shards.indexDocs(randomIntBetween(20, 100));
123-
assertEquals(moreDocs, getTranslog(primary).totalOperations());
123+
assertEquals(numDocs + moreDocs, getTranslog(primary).totalOperations());
124124

125125
// Step 2 - Start replica, recovery happens, check docs recovered till last flush
126126
final IndexShard replica = shards.addReplica();

0 commit comments

Comments
 (0)