XComp commented on code in PR #20673:
URL: https://github.com/apache/flink/pull/20673#discussion_r955938498


##########
flink-kubernetes/src/test/java/org/apache/flink/kubernetes/highavailability/KubernetesStateHandleStoreTest.java:
##########
@@ -1119,4 +1166,34 @@ private TestingLongStateHandleHelper.LongStateHandle 
addDeletingEntry(
         configMap.getData().put(key, deleting);
         return state;
     }
+
+    private static CompletableFuture<Boolean> retryWithFirstFailedK8sOperation(
+            Function<KubernetesConfigMap, Optional<KubernetesConfigMap>> 
function,
+            KubernetesConfigMap leaderConfigMap) {
+        final AtomicInteger callbackInvocationCount = new AtomicInteger(0);
+        final CompletableFuture<Boolean> result =
+                FutureUtils.retry(
+                        () ->
+                                CompletableFuture.supplyAsync(
+                                        () -> {
+                                            
callbackInvocationCount.incrementAndGet();
+                                            function.apply(leaderConfigMap);
+                                            if (callbackInvocationCount.get() 
== 1) {
+                                                throw new 
KubernetesClientException(
+                                                        "Expected exception to 
simulate unstable "
+                                                                + "kubernetes 
client operation");
+                                            }
+                                            return true;
+                                        },
+                                        Executors.newDirectExecutorService()),
+                        
KubernetesConfigOptions.KUBERNETES_TRANSACTIONAL_OPERATION_MAX_RETRIES
+                                .defaultValue(),
+                        t ->
+                                ExceptionUtils.findThrowable(t, 
KubernetesClientException.class)
+                                        .isPresent(),
+                        Executors.newDirectExecutorService());
+        assertThat(callbackInvocationCount.get(), is(2));
+        assertThat(result.isDone(), is(true));

Review Comment:
   I see, fair point. But then, you might need to do 
`assertThat(result.isDone() && !result.isCompletedExceptionally() && 
!result.isCancelled(), is(true));` to be more precise. You might want to put it 
into separate asserts instead of having a long boolean condition like that for 
readability purposes...



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@flink.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to