Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -480,8 +480,10 @@ public void handleTasksResults(
try {
DeleteBlockTransactionExecutionResult result = f.get();
handler.accept(result);
} catch (InterruptedException | ExecutionException e) {
} catch (ExecutionException e) {
LOG.error("task failed.", e);
} catch (InterruptedException e) {
LOG.error("task interrupted.", e);
Thread.currentThread().interrupt();
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,16 @@

import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import org.apache.hadoop.hdds.HddsConfigKeys;
Expand Down Expand Up @@ -271,6 +274,28 @@ public List<Future<DeleteBlockTransactionExecutionResult>> answer(
blockDeleteMetrics.getTotalLockTimeoutTransactionCount());
}

@Test
public void testDeleteBlocksCommandHandlerExceptionShouldNotInterrupt() throws Exception {
setup();
// future task will throw first execution exception, and next one will succeed
doAnswer((Answer<List<Future<DeleteBlockTransactionExecutionResult>>>) invocationOnMock -> {
List<Future<DeleteBlockTransactionExecutionResult>> result = new ArrayList<>();
CompletableFuture<DeleteBlockTransactionExecutionResult> future =
new CompletableFuture<>();
future.completeExceptionally(new ExecutionException("Simulated Exception", new IOException()));
result.add(future);
future = new CompletableFuture<>();
future.complete(new DeleteBlockTransactionExecutionResult(null, false));
result.add(future);
return result;
}).when(handler).submitTasks(any());

// last task as success should be returned as result, ignoring the first failed task
List<DeleteBlockTransactionResult> deleteBlockTransactionResults =
handler.executeCmdWithRetry(Collections.emptyList());
assertEquals(1, deleteBlockTransactionResults.size());
}

@ContainerTestVersionInfo.ContainerTest
public void testDeleteCmdWorkerInterval(
ContainerTestVersionInfo versionInfo) throws Exception {
Expand Down