Skip to content

Commit bddc064

Browse files
authored
Merge pull request #2132 from wind57/add-wait-in-commons
move poll in commons
2 parents 1c5ea48 + b8ee8b5 commit bddc064

3 files changed

Lines changed: 39 additions & 4 deletions

File tree

  • spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery
  • spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery
  • spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client

spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesClientDiscoveryClientUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@
3636
import io.kubernetes.client.util.CallGenerator;
3737
import io.kubernetes.client.util.CallGeneratorParams;
3838
import io.kubernetes.client.util.Namespaces;
39-
import io.kubernetes.client.util.wait.Wait;
4039
import org.apache.commons.logging.LogFactory;
4140

4241
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
4342
import org.springframework.cloud.kubernetes.commons.discovery.ServiceMetadata;
4443
import org.springframework.core.log.LogAccessor;
4544
import org.springframework.util.CollectionUtils;
4645

46+
import static org.springframework.cloud.kubernetes.commons.discovery.DiscoveryClientUtils.poll;
4747
import static org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryConstants.UNSET_PORT_NAME;
4848
import static org.springframework.util.StringUtils.hasText;
4949

@@ -64,7 +64,7 @@ static void postConstruct(List<SharedInformerFactory> sharedInformerFactories,
6464
List<Lister<V1Service>> serviceListers) {
6565

6666
sharedInformerFactories.forEach(SharedInformerFactory::startAllRegisteredInformers);
67-
if (!Wait.poll(Duration.ofSeconds(1), Duration.ofSeconds(properties.cacheLoadingTimeoutSeconds()), () -> {
67+
if (!poll(Duration.ofSeconds(1), Duration.ofSeconds(properties.cacheLoadingTimeoutSeconds()), () -> {
6868
LOG.info(() -> "Waiting for the cache of informers to be fully loaded..");
6969
return informersReadyFunc.get();
7070
})) {

spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/DiscoveryClientUtils.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616

1717
package org.springframework.cloud.kubernetes.commons.discovery;
1818

19+
import java.time.Duration;
1920
import java.util.HashMap;
2021
import java.util.Map;
2122
import java.util.Optional;
23+
import java.util.concurrent.TimeUnit;
24+
import java.util.function.BooleanSupplier;
2225
import java.util.function.Function;
2326
import java.util.function.Supplier;
2427
import java.util.stream.Collectors;
@@ -171,6 +174,26 @@ public static ServiceInstance externalNameServiceInstance(ServiceMetadata servic
171174

172175
}
173176

177+
public static boolean poll(Duration interval, Duration timeout, BooleanSupplier condition) {
178+
long deadline = System.nanoTime() + timeout.toNanos();
179+
180+
while (System.nanoTime() < deadline) {
181+
try {
182+
if (condition.getAsBoolean()) {
183+
return true;
184+
}
185+
else {
186+
TimeUnit.MILLISECONDS.sleep(interval.toMillis());
187+
}
188+
}
189+
catch (Exception ex) {
190+
throw new RuntimeException(ex);
191+
}
192+
193+
}
194+
return false;
195+
}
196+
174197
/**
175198
* take primary-port-name from service label "PRIMARY_PORT_NAME_LABEL_KEY" if it
176199
* exists, otherwise from KubernetesDiscoveryProperties if it exists, otherwise null.

spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.apache.commons.logging.Log;
5454
import org.apache.commons.logging.LogFactory;
5555
import org.assertj.core.api.Assertions;
56+
import org.testcontainers.containers.Container;
5657
import org.testcontainers.k3s.K3sContainer;
5758

5859
import org.springframework.cloud.kubernetes.integration.tests.commons.Images;
@@ -606,7 +607,7 @@ private boolean isDeploymentReady(String deploymentName, String namespace) throw
606607
V1Deployment deployment = deployments.getItems().get(0);
607608
if (deployment.getStatus() != null) {
608609
Integer availableReplicas = deployment.getStatus().getAvailableReplicas();
609-
logDeploymentConditions(deployment.getStatus().getConditions());
610+
logDeploymentConditions(deployment.getStatus().getConditions(), deployment.getMetadata().getNamespace());
610611
LOG.info("Available replicas for " + deploymentName + ": "
611612
+ (availableReplicas == null ? 0 : availableReplicas));
612613
return availableReplicas != null && availableReplicas >= 1;
@@ -616,13 +617,24 @@ private boolean isDeploymentReady(String deploymentName, String namespace) throw
616617
}
617618
}
618619

619-
private void logDeploymentConditions(List<V1DeploymentCondition> conditions) {
620+
private void logDeploymentConditions(List<V1DeploymentCondition> conditions, String namespace) {
620621
if (conditions != null) {
621622
for (V1DeploymentCondition condition : conditions) {
622623
LOG.info("Deployment Condition Type: " + condition.getType());
623624
LOG.info("Deployment Condition Status: " + condition.getStatus());
624625
LOG.info("Deployment Condition Message: " + condition.getMessage());
625626
LOG.info("Deployment Condition Reason: " + condition.getReason());
627+
628+
if (condition.getReason() != null && condition.getReason().contains("ProgressDeadlineExceeded")) {
629+
try {
630+
Container.ExecResult result = container.execInContainer("sh", "-c",
631+
"kubectl get events -n " + namespace);
632+
LOG.info("events from namespace : " + result.getStdout());
633+
}
634+
catch (Exception e) {
635+
throw new RuntimeException(e);
636+
}
637+
}
626638
}
627639
}
628640
}

0 commit comments

Comments
 (0)