Skip to content
This repository has been archived by the owner on Apr 10, 2024. It is now read-only.

feat: polling default ns #52

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class KubeAPIServer implements UnexpectedProcessStopHandler {

private static final Logger log = LoggerFactory.getLogger(KubeAPIServer.class);

public static final int STARTUP_TIMEOUT = 15_000;
public static final int STARTUP_TIMEOUT = 10_000;

private final KubeAPIServerConfig config;
private final BinaryManager binaryManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import java.io.File;
import java.io.IOException;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
Expand All @@ -13,11 +15,15 @@
import io.javaoperatorsdk.jenvtest.*;
import io.javaoperatorsdk.jenvtest.binary.BinaryManager;

import static io.javaoperatorsdk.jenvtest.KubeAPIServer.STARTUP_TIMEOUT;

public class KubeAPIServerProcess {

public static final int REQUEST_WAIT_TIMEOUT = 500;
private static final Logger log = LoggerFactory.getLogger(KubeAPIServerProcess.class);
private static final Logger apiLog = LoggerFactory.getLogger(KubeAPIServerProcess.class
.getName() + ".APIServerProcessLogs");
public static final int POLLING_INTERVAL = 250;

private final CertManager certManager;
private final BinaryManager binaryManager;
Expand Down Expand Up @@ -85,27 +91,42 @@ private List<String> createCommand(File apiServerBinary, int apiServerPort, int

public void waitUntilDefaultNamespaceCreated() {
try {
AtomicBoolean started = new AtomicBoolean(false);
var startedAt = LocalTime.now();
while (true) {
if (defaultNamespaceExists()) {
return;
}
if (LocalTime.now().isAfter(startedAt.plus(STARTUP_TIMEOUT, ChronoUnit.MILLIS))) {
throw new JenvtestException("API Server did not start properly");
}
Thread.sleep(POLLING_INTERVAL);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new JenvtestException(e);
}
}

private boolean defaultNamespaceExists() {
try {
var proc = new ProcessBuilder(binaryManager.binaries().getKubectl().getPath(), "get", "ns",
"--watch").start();
var procWaiter = new Thread(() -> {
"default").start();
AtomicBoolean defaultFound = new AtomicBoolean(false);
var procIsReader = new Thread(() -> {
log.debug("Starting proc waiter thread.");
try (Scanner sc = new Scanner(proc.getInputStream())) {
while (sc.hasNextLine()) {
String line = sc.nextLine();
log.debug("kubectl ns watch: {}", line);
if (line.contains("default")) {
started.set(true);
defaultFound.set(true);
return;
}
}
}
});
procWaiter.start();
procWaiter.join(KubeAPIServer.STARTUP_TIMEOUT);
if (!started.get()) {
throw new JenvtestException("API Server did not start properly");
}
procIsReader.start();
procIsReader.join(REQUEST_WAIT_TIMEOUT);
return defaultFound.get();
} catch (IOException e) {
throw new JenvtestException(e);
} catch (InterruptedException e) {
Expand Down