diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/environment/EnvironmentManager.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/environment/EnvironmentManager.java index eb238a5b92..0721746c2d 100644 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/environment/EnvironmentManager.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/environment/EnvironmentManager.java @@ -54,6 +54,8 @@ public class EnvironmentManager { private final AtomicInteger environmentIdCounter = new AtomicInteger(0); + private static Boolean readedDB = true; + /** * Environment Cache */ @@ -206,6 +208,31 @@ public List listEnvironments(String status) throws SubmarineRuntimeException { List environmentList = new ArrayList(cachedEnvironments.values()); + + // Is it available in cache? + if (this.readedDB == true) { + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + EnvironmentMapper environmentMapper = + sqlSession.getMapper(EnvironmentMapper.class); + List environmentEntitys = environmentMapper.selectAll(); + for (EnvironmentEntity environmentEntity : environmentEntitys) { + if (environmentEntity != null) { + Environment env = new Environment(); + env.setEnvironmentSpec(new Gson().fromJson( + environmentEntity.getEnvironmentSpec(), EnvironmentSpec.class)); + env.setEnvironmentId( + EnvironmentId.fromString(environmentEntity.getId())); + environmentList.add(env); + cachedEnvironments.put(env.getEnvironmentSpec().getName(), env); + } + } + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException(Status.BAD_REQUEST.getStatusCode(), + "Unable to get the environment list."); + } + } + this.readedDB = false; return environmentList; } diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/environment/database/mappers/EnvironmentMapper.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/environment/database/mappers/EnvironmentMapper.java index eddea3266a..43b1a3c4ad 100644 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/environment/database/mappers/EnvironmentMapper.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/environment/database/mappers/EnvironmentMapper.java @@ -20,8 +20,12 @@ import org.apache.submarine.server.environment.database.entity.EnvironmentEntity; +import java.util.List; + public interface EnvironmentMapper { + List selectAll(); + EnvironmentEntity select(String environmentName); int insert(EnvironmentEntity environment); diff --git a/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/EnvironmentMapper.xml b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/EnvironmentMapper.xml index 0efce7dda8..4d870b75f5 100644 --- a/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/EnvironmentMapper.xml +++ b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/EnvironmentMapper.xml @@ -36,6 +36,12 @@ id, environment_name, environment_spec, create_by, create_time, update_by, update_time + +