Skip to content

Commit 699a880

Browse files
meet-v25meetvm
and
meetvm
authored
[BugFix] Hide stracktrace in response while translog transfer upload failure (#16891)
--------- Signed-off-by: meetvm <meetvm@amazon.com> Co-authored-by: meetvm <meetvm@amazon.com>
1 parent 6e3d710 commit 699a880

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

server/src/main/java/org/opensearch/index/translog/transfer/TranslogTransferManager.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,8 @@ public boolean transferSnapshot(TransferSnapshot transferSnapshot, TranslogTrans
206206
} catch (Exception ex) {
207207
logger.error(() -> new ParameterizedMessage("Transfer failed for snapshot {}", transferSnapshot), ex);
208208
captureStatsOnUploadFailure();
209-
translogTransferListener.onUploadFailed(transferSnapshot, ex);
209+
Exception exWithoutSuppressed = new TranslogUploadFailedException(ex.getMessage());
210+
translogTransferListener.onUploadFailed(transferSnapshot, exWithoutSuppressed);
210211
return false;
211212
}
212213
}

server/src/test/java/org/opensearch/index/translog/transfer/TranslogTransferManagerTests.java

+74
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,80 @@ public void onUploadFailed(TransferSnapshot transferSnapshot, Exception ex) {
206206
assertEquals(4, fileTransferTracker.allUploaded().size());
207207
}
208208

209+
public void testTransferSnapshotOnFileTransferUploadFail() throws Exception {
210+
AtomicInteger fileTransferSucceeded = new AtomicInteger();
211+
AtomicInteger fileTransferFailed = new AtomicInteger();
212+
AtomicInteger translogTransferSucceeded = new AtomicInteger();
213+
AtomicInteger translogTransferFailed = new AtomicInteger();
214+
215+
doAnswer(invocationOnMock -> {
216+
ActionListener<TransferFileSnapshot> listener = (ActionListener<TransferFileSnapshot>) invocationOnMock.getArguments()[2];
217+
Set<TransferFileSnapshot> transferFileSnapshots = (Set<TransferFileSnapshot>) invocationOnMock.getArguments()[0];
218+
219+
TransferFileSnapshot actualFileSnapshot = transferFileSnapshots.iterator().next();
220+
FileTransferException testException = new FileTransferException(
221+
actualFileSnapshot,
222+
new RuntimeException("FileTransferUploadNeedsToFail-Exception")
223+
);
224+
225+
listener.onFailure(testException);
226+
transferFileSnapshots.stream().skip(1).forEach(listener::onResponse);
227+
return null;
228+
}).when(transferService).uploadBlobs(anySet(), anyMap(), any(ActionListener.class), any(WritePriority.class));
229+
230+
FileTransferTracker fileTransferTracker = new FileTransferTracker(
231+
new ShardId("index", "indexUUid", 0),
232+
remoteTranslogTransferTracker
233+
) {
234+
@Override
235+
public void onSuccess(TransferFileSnapshot fileSnapshot) {
236+
fileTransferSucceeded.incrementAndGet();
237+
super.onSuccess(fileSnapshot);
238+
}
239+
240+
@Override
241+
public void onFailure(TransferFileSnapshot fileSnapshot, Exception e) {
242+
fileTransferFailed.incrementAndGet();
243+
super.onFailure(fileSnapshot, e);
244+
}
245+
};
246+
247+
TranslogTransferManager translogTransferManager = new TranslogTransferManager(
248+
shardId,
249+
transferService,
250+
remoteBaseTransferPath.add(TRANSLOG.getName()),
251+
remoteBaseTransferPath.add(METADATA.getName()),
252+
fileTransferTracker,
253+
remoteTranslogTransferTracker,
254+
DefaultRemoteStoreSettings.INSTANCE,
255+
isTranslogMetadataEnabled
256+
);
257+
258+
SetOnce<Exception> exception = new SetOnce<>();
259+
assertFalse(translogTransferManager.transferSnapshot(createTransferSnapshot(), new TranslogTransferListener() {
260+
@Override
261+
public void onUploadComplete(TransferSnapshot transferSnapshot) {
262+
translogTransferSucceeded.incrementAndGet();
263+
}
264+
265+
@Override
266+
public void onUploadFailed(TransferSnapshot transferSnapshot, Exception ex) {
267+
translogTransferFailed.incrementAndGet();
268+
exception.set(ex);
269+
}
270+
}));
271+
272+
assertNotNull(exception.get());
273+
assertTrue(exception.get() instanceof TranslogUploadFailedException);
274+
assertEquals("Failed to upload 1 files during transfer", exception.get().getMessage());
275+
assertEquals(0, exception.get().getSuppressed().length);
276+
assertEquals(3, fileTransferSucceeded.get());
277+
assertEquals(1, fileTransferFailed.get());
278+
assertEquals(0, translogTransferSucceeded.get());
279+
assertEquals(1, translogTransferFailed.get());
280+
assertEquals(3, fileTransferTracker.allUploaded().size());
281+
}
282+
209283
public void testTransferSnapshotOnUploadTimeout() throws Exception {
210284
doAnswer(invocationOnMock -> {
211285
Set<TransferFileSnapshot> transferFileSnapshots = invocationOnMock.getArgument(0);

0 commit comments

Comments
 (0)