This is an automated email from the ASF dual-hosted git repository. marat pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
commit f7894c67f5a68d4bd01deac04c0ae0112945e4a5 Author: Marat Gubaidullin <ma...@talismancloud.io> AuthorDate: Fri Sep 1 13:18:36 2023 -0400 Project chaos for #817 --- .../apache/camel/karavan/service/EventService.java | 28 --------------------- .../apache/camel/karavan/service/GitService.java | 14 +++++++++++ .../camel/karavan/service/KaravanService.java | 20 ++++++++++----- .../camel/karavan/service/ProjectService.java | 29 ++++++++++++++-------- .../org/apache/camel/karavan/shared/EventType.java | 6 ----- 5 files changed, 47 insertions(+), 50 deletions(-) diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java index 2b161620..326946dd 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/EventService.java @@ -8,9 +8,7 @@ import jakarta.inject.Inject; import org.apache.camel.karavan.infinispan.InfinispanService; import org.apache.camel.karavan.infinispan.model.CamelStatus; import org.apache.camel.karavan.infinispan.model.ContainerStatus; -import org.apache.camel.karavan.kubernetes.KubernetesService; import org.apache.camel.karavan.shared.ConfigService; -import org.apache.camel.karavan.shared.EventType; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.jboss.logging.Logger; @@ -32,38 +30,12 @@ public class EventService { @Inject InfinispanService infinispanService; - @Inject - KubernetesService kubernetesService; - @Inject CamelService camelService; - @Inject - ProjectService projectService; - @Inject EventBus eventBus; - void startServices(String infinispanHealth) { - eventBus.publish(EventType.IMPORT_PROJECTS, ""); - eventBus.publish(EventType.START_INFRASTRUCTURE_LISTENERS, ""); - } - - @ConsumeEvent(value = START_INFRASTRUCTURE_LISTENERS, blocking = true, ordered = true) - void startInfrastructureListeners(String data) { - LOGGER.info("Start Infrastructure Listeners"); - if (ConfigService.inKubernetes()) { - kubernetesService.startInformers(data); - } else { -// Docker listener is already started - } - } - - @ConsumeEvent(value = IMPORT_PROJECTS, blocking = true) - public void importProjects(String data) { - projectService.importProjects(data); - } - @ConsumeEvent(value = DEVMODE_CONTAINER_READY, blocking = true, ordered = true) void receiveCommand(JsonObject json) { String projectId = json.getString(LABEL_PROJECT_ID); diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java index 56b3e124..7cf3c243 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java @@ -43,6 +43,7 @@ import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.filter.TreeFilter; import org.eclipse.microprofile.config.ConfigProvider; +import org.eclipse.microprofile.faulttolerance.Retry; import org.jboss.logging.Logger; import jakarta.enterprise.context.ApplicationScoped; @@ -449,4 +450,17 @@ public class GitService { } return files; } + + @Retry(maxRetries = 100, delay = 2000) + public boolean checkGit() throws Exception { + LOGGER.info("Check git"); + GitConfig gitConfig = getGitConfig(); + CredentialsProvider cred = new UsernamePasswordCredentialsProvider(gitConfig.getUsername(), gitConfig.getPassword()); + String uuid = UUID.randomUUID().toString(); + String folder = vertx.fileSystem().createTempDirectoryBlocking(uuid); + try (Git git = clone(folder, gitConfig.getUri(), gitConfig.getBranch(), cred)) { + LOGGER.info("Git is ready"); + } + return true; + } } diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java index 41ef59ab..ae1adc80 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java @@ -29,15 +29,12 @@ import org.apache.camel.karavan.infinispan.InfinispanService; import org.apache.camel.karavan.kubernetes.KubernetesService; import org.apache.camel.karavan.shared.ConfigService; import org.eclipse.microprofile.config.inject.ConfigProperty; -import org.eclipse.microprofile.faulttolerance.Retry; import org.jboss.logging.Logger; import jakarta.enterprise.event.Observes; import jakarta.inject.Inject; import java.io.IOException; -import java.util.concurrent.ExecutionException; -import static org.apache.camel.karavan.shared.EventType.IMPORT_PROJECTS; @Singleton public class KaravanService { @@ -68,6 +65,10 @@ public class KaravanService { @Inject GiteaService giteaService; + @Inject + ProjectService projectService; + + private static final String START_KUBERNETES_LISTENERS = "START_KUBERNETES_LISTENERS"; private static final String START_INTERNAL_DOCKER_SERVICES = "START_INTERNAL_DOCKER_SERVICES"; private static final String START_SERVICES = "START_SERVICES"; @@ -75,9 +76,9 @@ public class KaravanService { if (!ConfigService.inKubernetes()) { eventBus.publish(START_INTERNAL_DOCKER_SERVICES, null); } else { - LOGGER.info("Starting Karavan in " + (kubernetesService.isOpenshift() ? "OpenShift" : "Kubernetes")); + eventBus.publish(START_KUBERNETES_LISTENERS, null); } -// eventBus.publish(START_SERVICES, null); + eventBus.publish(START_SERVICES, null); } @ConsumeEvent(value = START_INTERNAL_DOCKER_SERVICES, blocking = true) @@ -88,7 +89,7 @@ public class KaravanService { } else { dockerService.createNetwork(); dockerService.startListeners(); -// dockerForInfinispan.startInfinispan(); + dockerForInfinispan.startInfinispan(); if (giteaInstall) { dockerForGitea.startGitea(); giteaService.install(); @@ -97,9 +98,16 @@ public class KaravanService { } } + @ConsumeEvent(value = START_KUBERNETES_LISTENERS, blocking = true) + void startKubernetesListeners(String data) throws Exception { + LOGGER.info("Starting Karavan in Kubernetes"); + kubernetesService.startInformers(null); + } + @ConsumeEvent(value = START_SERVICES, blocking = true) void startServices(String data) throws Exception { infinispanService.tryStart(false); + projectService.tryStart(); } void onStop(@Observes ShutdownEvent ev) throws IOException { diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java index 7dd01ca1..5e9d9150 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java @@ -24,6 +24,7 @@ import org.apache.camel.karavan.infinispan.model.ProjectFile; import org.apache.camel.karavan.kubernetes.KubernetesService; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.microprofile.config.inject.ConfigProperty; +import org.eclipse.microprofile.faulttolerance.Retry; import org.eclipse.microprofile.health.HealthCheck; import org.eclipse.microprofile.health.HealthCheckResponse; import org.eclipse.microprofile.health.Readiness; @@ -62,11 +63,12 @@ public class ProjectService implements HealthCheck{ @Inject CodeService codeService; + private AtomicBoolean ready = new AtomicBoolean(false); private AtomicBoolean readyToPull = new AtomicBoolean(false); @Override public HealthCheckResponse call() { - if(readyToPull.get()) { + if(ready.get()) { return HealthCheckResponse.up("Git authentication is successfull."); } else { @@ -101,15 +103,22 @@ public class ProjectService implements HealthCheck{ readyToPull.set(true); } - public void importProjects(String data) { - if (infinispanService.getProjects().isEmpty()) { - importAllProjects(); - } - addKameletsProject(); - addTemplatesProject(); - addServicesProject(); - if (!Objects.equals("disabled", gitPullInterval.toLowerCase()) && !Objects.equals("off", gitPullInterval.toLowerCase())) { - importCommits(); + @Retry(maxRetries = 100, delay = 2000) + public void tryStart() throws Exception { + if (infinispanService.isReady() && gitService.checkGit()) { + if (infinispanService.getProjects().isEmpty()) { + importAllProjects(); + } + addKameletsProject(); + addTemplatesProject(); + addServicesProject(); + if (!Objects.equals("disabled", gitPullInterval.toLowerCase()) && !Objects.equals("off", gitPullInterval.toLowerCase())) { + importCommits(); + } + ready.set(true); + } else { + LOGGER.info("Projects are not ready"); + throw new Exception("Projects are not ready"); } } diff --git a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java index 609fce03..0f6ba504 100644 --- a/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java +++ b/karavan-web/karavan-app/src/main/java/org/apache/camel/karavan/shared/EventType.java @@ -18,12 +18,6 @@ package org.apache.camel.karavan.shared; public class EventType { - // Start Kubernetes or Docker event Listeners - public static final String START_INFRASTRUCTURE_LISTENERS = "START_INFRASTRUCTURE_LISTENERS"; - - // Import projects from Git repository - public static final String IMPORT_PROJECTS = "IMPORT_PROJECTS"; - public static final String CONTAINER_STATUS = "CONTAINER_STATUS"; public static final String DEVMODE_CONTAINER_READY = "DEVMODE_STATUS"; public static final String DEVMODE_DELAY_MESSAGE = "DEVMODE_DELAY_MESSAGE";