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";

Reply via email to