This is an automated email from the ASF dual-hosted git repository. pingsutw pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/submarine.git
The following commit(s) were added to refs/heads/master by this push: new 9ba44b9 SUBMARINE-1052. Create submarine model management service in server 9ba44b9 is described below commit 9ba44b975d3971664c9bd3daa9945d845a335251 Author: KUAN-HSUN-LI <b06209...@ntu.edu.tw> AuthorDate: Sun Oct 17 10:11:24 2021 +0800 SUBMARINE-1052. Create submarine model management service in server ### What is this PR for? Create the model management service in the server for later use in model serving and model management workbench. ### What type of PR is it? [Feature] ### Todos ### What is the Jira issue? https://issues.apache.org/jira/browse/SUBMARINE-1052 ### How should this be tested? CI pass. All of the tests for new functions are provided under the `submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database` directory. ### Screenshots (if appropriate) ### Questions: * Do the license files need updating? No * Are there breaking changes for older versions? No * Does this need new documentation? No Author: KUAN-HSUN-LI <b06209...@ntu.edu.tw> Signed-off-by: Kevin <pings...@apache.org> Closes #770 from KUAN-HSUN-LI/SUBMARINE-1052 and squashes the following commits: a01fd85e [KUAN-HSUN-LI] SUBMARINE-1052. Create submarine model management service in server f9432abc [KUAN-HSUN-LI] SUBMARINE-1052. Add exception 42348927 [KUAN-HSUN-LI] Remove useless code e5bc7c25 [KUAN-HSUN-LI] SUBMARINE-1052. Create submarine model management service in server 090f6664 [KUAN-HSUN-LI] SUBMARINE-1052. Create submarine model management service in server --- .../submarine/commons/utils/SubmarineConfVars.java | 4 +- .../server/database/utils/MyBatisUtil.java | 2 +- .../database/entities/ModelVersionEntity.java | 120 +++++++------- ...lNameEntity.java => ModelVersionTagEntity.java} | 45 ++--- ...lNameEntity.java => RegisteredModelEntity.java} | 38 +++-- .../RegisteredModelTagEntity.java} | 36 +++- .../model/database/mappers/ModelVersionMapper.java | 14 +- ...rsionMapper.java => ModelVersionTagMapper.java} | 12 +- ...lNameMapper.java => RegisteredModelMapper.java} | 19 ++- ...meMapper.java => RegisteredModelTagMapper.java} | 14 +- .../model/database/service/ModelService.java | 181 --------------------- .../database/service/ModelVersionService.java | 112 +++++++++++++ .../database/service/ModelVersionTagService.java | 61 +++++++ .../database/service/RegisteredModelService.java | 137 ++++++++++++++++ .../service/RegisteredModelTagService.java | 61 +++++++ .../src/main/resources/mybatis-config.xml | 4 + .../database/mappers/ModelVersionMapper.xml | 99 +++++++---- .../database/mappers/ModelVersionTagMapper.xml | 41 +++++ .../database/mappers/RegisteredModelMapper.xml | 106 ++++++++++++ .../database/mappers/RegisteredModelNameMapper.xml | 68 -------- .../database/mappers/RegisteredModelTagMapper.xml | 41 +++++ .../server/model/database/ModelVersionTagTest.java | 75 +++++++++ .../server/model/database/ModelVersionTest.java | 174 ++++++++++++++++++++ .../model/database/RegisteredModelServiceTest.java | 148 +++++++++++++++++ .../database/RegisteredModelTagServiceTest.java | 61 +++++++ 25 files changed, 1246 insertions(+), 427 deletions(-) diff --git a/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfVars.java b/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfVars.java index bb3d1cd..38945c9 100644 --- a/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfVars.java +++ b/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfVars.java @@ -53,8 +53,8 @@ public class SubmarineConfVars { JDBC_DRIVERCLASSNAME("jdbc.driverClassName", "com.mysql.jdbc.Driver"), JDBC_URL("jdbc.url", "jdbc:mysql://127.0.0.1:3306/submarine" + - "?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&" + - "failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false"), + "?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true" + + "failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false&"), JDBC_USERNAME("jdbc.username", "submarine"), JDBC_PASSWORD("jdbc.password", "password"), METASTORE_JDBC_URL("metastore.jdbc.url", "jdbc:mysql://127.0.0.1:3306/metastore" + diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/database/utils/MyBatisUtil.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/database/utils/MyBatisUtil.java index 9a638ef..cfd0192 100755 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/database/utils/MyBatisUtil.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/database/utils/MyBatisUtil.java @@ -97,7 +97,7 @@ public class MyBatisUtil { // Run the test unit using the test database SubmarineConfiguration conf = SubmarineConfiguration.getInstance(); conf.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/submarine_test?" + - "useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&" + + "useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true&" + "failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false"); conf.setJdbcUserName("submarine_test"); conf.setJdbcPassword("password_test"); diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/ModelVersionEntity.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/ModelVersionEntity.java index 7c7cb3b..ade2cb7 100644 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/ModelVersionEntity.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/ModelVersionEntity.java @@ -19,30 +19,31 @@ package org.apache.submarine.server.model.database.entities; +import java.sql.Timestamp; +import java.util.List; + public class ModelVersionEntity { private String name; private Integer version; - private Long createTime; - - private Long lastUpdatedTime; - - private String description; + private String source; private String userId; + private String experimentId; + private String currentStage; - private String source; + private Timestamp creationTime; - private String runId; + private Timestamp lastUpdatedTime; - private String status; + private String dataset; - private String statusMessage; + private String description; - private String runLink; + private List<String> tags; public String getName() { return name; @@ -60,28 +61,12 @@ public class ModelVersionEntity { this.version = version; } - public Long getCreateTime() { - return createTime; - } - - public void setCreateTime(Long createTime) { - this.createTime = createTime; - } - - public Long getLastUpdatedTime() { - return lastUpdatedTime; - } - - public void setLastUpdatedTime(Long lastUpdatedTime) { - this.lastUpdatedTime = lastUpdatedTime; - } - - public String getDescription() { - return description; + public String getSource() { + return source; } - public void setDescription(String description) { - this.description = description; + public void setSource(String source) { + this.source = source; } public String getUserId() { @@ -92,6 +77,14 @@ public class ModelVersionEntity { this.userId = userId; } + public String getExperimentId() { + return experimentId; + } + + public void setExperimentId(String experimentId) { + this.experimentId = experimentId; + } + public String getCurrentStage() { return currentStage; } @@ -100,60 +93,61 @@ public class ModelVersionEntity { this.currentStage = currentStage; } - public String getSource() { - return source; + public Timestamp getCreationTime() { + return creationTime; } - public void setSource(String source) { - this.source = source; + public void setCreationTime(Timestamp creationTime) { + this.creationTime = creationTime; } - public String getRunId() { - return runId; + public Timestamp getLastUpdatedTime() { + return lastUpdatedTime; } - public void setRunId(String runId) { - this.runId = runId; + public void setLastUpdatedTime(Timestamp lastUpdatedTime) { + this.lastUpdatedTime = lastUpdatedTime; } - public String getStatus() { - return status; + public String getDataset() { + return dataset; } - public void setStatus(String status) { - this.status = status; + public void setDataset(String dataset) { + this.dataset = dataset; } - public String getStatusMessage() { - return statusMessage; + public String getDescription() { + return description; } - public void setStatusMessage(String statusMessage) { - this.statusMessage = statusMessage; + public void setDescription(String description) { + this.description = description; } - public String getRunLink() { - return runLink; + public List<String> getTags() { + return tags; } - public void setRunLink(String runLink) { - this.runLink = runLink; + public void setTags(List<String> tags) { + this.tags = tags; } + public ModelVersionEntity() {} + public String toString() { return "ModelVersionEntity{" + - "name='" + name + '\'' + - ",version='" + version + '\'' + - ", createTime='" + createTime + '\'' + - ", lastUpdatedTime=" + lastUpdatedTime + '\'' + - ", description='" + description + '\'' + - ", userId='" + userId + '\'' + - ", currentStage='" + currentStage + '\'' + - ", source='" + source + '\'' + - ", runLink='" + runLink + '\'' + - ", runId='" + runId + '\'' + - ", status='" + status + '\'' + - ", statusMessage='" + statusMessage + '\'' + - '}'; + "name='" + name + '\'' + + ",version='" + version + '\'' + + ", source='" + source + '\'' + + ", userId='" + userId + '\'' + + ", experimentId='" + experimentId + '\'' + + ", currentStage='" + currentStage + '\'' + + ", creationTime='" + creationTime + '\'' + + ", lastUpdatedTime=" + lastUpdatedTime + '\'' + + ", dataset=" + dataset + '\'' + + ", description='" + description + '\'' + + ", tags='" + tags + '\'' + + '}'; } } diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelNameEntity.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/ModelVersionTagEntity.java similarity index 55% copy from submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelNameEntity.java copy to submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/ModelVersionTagEntity.java index b92045b..b7b85f3 100644 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelNameEntity.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/ModelVersionTagEntity.java @@ -19,15 +19,13 @@ package org.apache.submarine.server.model.database.entities; -public class RegisteredModelNameEntity { +public class ModelVersionTagEntity { private String name; - private Long createTime; + private Integer version; - private Long lastUpdatedTime; - - private String description; + private String tag; public String getName() { return name; @@ -37,38 +35,29 @@ public class RegisteredModelNameEntity { this.name = name; } - public Long getCreateTime() { - return createTime; - } - - public void setCreateTime(Long createTime) { - this.createTime = createTime; - } - - public Long getLastUpdatedTime() { - return lastUpdatedTime; + public Integer getVersion() { + return version; } - public void setLastUpdatedTime(Long lastUpdatedTime) { - this.lastUpdatedTime = lastUpdatedTime; + public void setVersion(Integer version) { + this.version = version; } - public String getDescription() { - return description; + public String getTag() { + return tag; } - public void setDescription(String description) { - this.description = description; + public void setTag(String tag) { + this.tag = tag; } - public RegisteredModelNameEntity() {} + public ModelVersionTagEntity() {}; public String toString() { - return "RegisteredModelNameEntity{" + - "name='" + name + '\'' + - ", createTime='" + createTime + '\'' + - ", lastUpdatedTime=" + lastUpdatedTime + '\'' + - ", description='" + description + '\'' + - '}'; + return "ModelVersionEntity{" + + "name='" + name + '\'' + + ",version='" + version + '\'' + + ", tag='" + tag + '\'' + + '}'; } } diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelNameEntity.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelEntity.java similarity index 66% rename from submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelNameEntity.java rename to submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelEntity.java index b92045b..9bfa016 100644 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelNameEntity.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelEntity.java @@ -19,16 +19,21 @@ package org.apache.submarine.server.model.database.entities; -public class RegisteredModelNameEntity { +import java.sql.Timestamp; +import java.util.List; + +public class RegisteredModelEntity { private String name; - private Long createTime; + private Timestamp creationTime; - private Long lastUpdatedTime; + private Timestamp lastUpdatedTime; private String description; + private List<String> tags; + public String getName() { return name; } @@ -37,19 +42,19 @@ public class RegisteredModelNameEntity { this.name = name; } - public Long getCreateTime() { - return createTime; + public Timestamp getCreationTime() { + return creationTime; } - public void setCreateTime(Long createTime) { - this.createTime = createTime; + public void setCreationTime(Timestamp creationTime) { + this.creationTime = creationTime; } - public Long getLastUpdatedTime() { + public Timestamp getLastUpdatedTime() { return lastUpdatedTime; } - public void setLastUpdatedTime(Long lastUpdatedTime) { + public void setLastUpdatedTime(Timestamp lastUpdatedTime) { this.lastUpdatedTime = lastUpdatedTime; } @@ -61,14 +66,23 @@ public class RegisteredModelNameEntity { this.description = description; } - public RegisteredModelNameEntity() {} + public List<String> getTags() { + return tags; + } + + public void setTags(List<String> tags) { + this.tags = tags; + } + + public RegisteredModelEntity() {} public String toString() { - return "RegisteredModelNameEntity{" + + return "RegisteredModelEntity{" + "name='" + name + '\'' + - ", createTime='" + createTime + '\'' + + ", createTime='" + creationTime + '\'' + ", lastUpdatedTime=" + lastUpdatedTime + '\'' + ", description='" + description + '\'' + + ", tags='" + tags + '\'' + '}'; } } diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelNameMapper.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelTagEntity.java similarity index 59% copy from submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelNameMapper.java copy to submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelTagEntity.java index 2ebc53d..c827724 100644 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelNameMapper.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/entities/RegisteredModelTagEntity.java @@ -17,18 +17,36 @@ * under the License. */ -package org.apache.submarine.server.model.database.mappers; +package org.apache.submarine.server.model.database.entities; -import java.util.List; -import org.apache.submarine.server.model.database.entities.RegisteredModelNameEntity; +public class RegisteredModelTagEntity { -public interface RegisteredModelNameMapper { - List<RegisteredModelNameEntity> selectAll(); - RegisteredModelNameEntity select(String name); + private String name; - int insert(RegisteredModelNameEntity registeredmodelNameEntity); - int update(RegisteredModelNameEntity registeredmodelNameEntity); - int delete(String name); + private String tag; + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public RegisteredModelTagEntity() {}; + + public String toString() { + return "ModelVersionEntity{" + + "name='" + name + '\'' + + ", tag='" + tag + '\'' + + '}'; + } } diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/ModelVersionMapper.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/ModelVersionMapper.java index d39fba8..af7339c 100644 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/ModelVersionMapper.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/ModelVersionMapper.java @@ -20,13 +20,15 @@ package org.apache.submarine.server.model.database.mappers; import java.util.List; + +import org.apache.ibatis.annotations.Param; import org.apache.submarine.server.model.database.entities.ModelVersionEntity; public interface ModelVersionMapper { - List<ModelVersionEntity> list(String name); - ModelVersionEntity select(ModelVersionEntity modelVersionEntity); - - int insert(ModelVersionEntity modelVersionEntity); - int delete(ModelVersionEntity modelVersionEntity); - int deleteAll(String name); + List<ModelVersionEntity> selectAllVersions(String name); + ModelVersionEntity select(@Param("name") String name, @Param("version") Integer version); + ModelVersionEntity selectWithTag(@Param("name") String name, @Param("version") Integer version); + void insert(ModelVersionEntity modelVersion); + void update(ModelVersionEntity modelVersion); + void delete(@Param("name") String name, @Param("version") Integer version); } diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/ModelVersionMapper.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/ModelVersionTagMapper.java similarity index 74% copy from submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/ModelVersionMapper.java copy to submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/ModelVersionTagMapper.java index d39fba8..7611153 100644 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/ModelVersionMapper.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/ModelVersionTagMapper.java @@ -19,14 +19,10 @@ package org.apache.submarine.server.model.database.mappers; -import java.util.List; -import org.apache.submarine.server.model.database.entities.ModelVersionEntity; +import org.apache.submarine.server.model.database.entities.ModelVersionTagEntity; -public interface ModelVersionMapper { - List<ModelVersionEntity> list(String name); - ModelVersionEntity select(ModelVersionEntity modelVersionEntity); - int insert(ModelVersionEntity modelVersionEntity); - int delete(ModelVersionEntity modelVersionEntity); - int deleteAll(String name); +public interface ModelVersionTagMapper { + void insert(ModelVersionTagEntity registeredModelTag); + void delete(ModelVersionTagEntity registeredModelTag); } diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelNameMapper.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelMapper.java similarity index 66% copy from submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelNameMapper.java copy to submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelMapper.java index 2ebc53d..df107ed 100644 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelNameMapper.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelMapper.java @@ -20,15 +20,18 @@ package org.apache.submarine.server.model.database.mappers; import java.util.List; -import org.apache.submarine.server.model.database.entities.RegisteredModelNameEntity; -public interface RegisteredModelNameMapper { - List<RegisteredModelNameEntity> selectAll(); - RegisteredModelNameEntity select(String name); - - int insert(RegisteredModelNameEntity registeredmodelNameEntity); - int update(RegisteredModelNameEntity registeredmodelNameEntity); - int delete(String name); +import org.apache.ibatis.annotations.Param; +import org.apache.submarine.server.model.database.entities.RegisteredModelEntity; +public interface RegisteredModelMapper { + List<RegisteredModelEntity> selectAll(); + RegisteredModelEntity select(String name); + RegisteredModelEntity selectWithTag(String name); + void insert(RegisteredModelEntity registeredModel); + void update(RegisteredModelEntity registeredModel); + void rename(@Param("name")String name, @Param("newName")String newName); + void delete(String name); + void deleteAll(); } diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelNameMapper.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelTagMapper.java similarity index 72% rename from submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelNameMapper.java rename to submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelTagMapper.java index 2ebc53d..0ba67d5 100644 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelNameMapper.java +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/mappers/RegisteredModelTagMapper.java @@ -19,16 +19,10 @@ package org.apache.submarine.server.model.database.mappers; -import java.util.List; -import org.apache.submarine.server.model.database.entities.RegisteredModelNameEntity; - -public interface RegisteredModelNameMapper { - List<RegisteredModelNameEntity> selectAll(); - RegisteredModelNameEntity select(String name); - - int insert(RegisteredModelNameEntity registeredmodelNameEntity); - int update(RegisteredModelNameEntity registeredmodelNameEntity); - int delete(String name); +import org.apache.submarine.server.model.database.entities.RegisteredModelTagEntity; +public interface RegisteredModelTagMapper { + void insert(RegisteredModelTagEntity registeredModelTag); + void delete(RegisteredModelTagEntity registeredModelTag); } diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/ModelService.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/ModelService.java deleted file mode 100644 index b0bb750..0000000 --- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/ModelService.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.submarine.server.model.database.service; - -import org.apache.ibatis.session.SqlSession; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.util.List; -import org.apache.submarine.commons.utils.exception.SubmarineRuntimeException; -import org.apache.submarine.server.database.utils.ModelBatisUtil; -import org.apache.submarine.server.model.database.entities.RegisteredModelNameEntity; -import org.apache.submarine.server.model.database.entities.ModelVersionEntity; -import org.apache.submarine.server.model.database.mappers.RegisteredModelNameMapper; -import org.apache.submarine.server.model.database.mappers.ModelVersionMapper; - -public class ModelService { - - private static final Logger - LOG = LoggerFactory.getLogger(ModelService.class); - - public List<RegisteredModelNameEntity> selectAllRegisteredModelName() throws SubmarineRuntimeException { - LOG.info("Registered Model Name selectAll"); - List<RegisteredModelNameEntity> entities; - try (SqlSession sqlSession = ModelBatisUtil.getSqlSession()) { - RegisteredModelNameMapper mapper = sqlSession.getMapper(RegisteredModelNameMapper.class); - entities = mapper.selectAll(); - sqlSession.commit(); - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new SubmarineRuntimeException("Unable to get registered model name entities from database"); - } - return entities; - } - - public RegisteredModelNameEntity selectRegisteredModelName(String name) throws SubmarineRuntimeException { - LOG.info("Registered Model Name select " + name); - RegisteredModelNameEntity entity; - try (SqlSession sqlSession = ModelBatisUtil.getSqlSession()) { - RegisteredModelNameMapper mapper = sqlSession.getMapper(RegisteredModelNameMapper.class); - entity = mapper.select(name); - sqlSession.commit(); - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new SubmarineRuntimeException("Unable to get registered model name entity from database"); - } - return entity; - } - - public boolean insertRegisteredModelName(RegisteredModelNameEntity entity) - throws SubmarineRuntimeException { - LOG.info("Registered Model Name insert " + entity.getName()); - try (SqlSession sqlSession = ModelBatisUtil.getSqlSession()) { - RegisteredModelNameMapper mapper = sqlSession.getMapper(RegisteredModelNameMapper.class); - mapper.insert(entity); - sqlSession.commit(); - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new SubmarineRuntimeException("Unable to insert registered model name entity from database"); - } - return true; - } - - public boolean updateRegisteredModelName(RegisteredModelNameEntity entity) - throws SubmarineRuntimeException { - LOG.info("Registered Model Name update " + entity.getName()); - try (SqlSession sqlSession = ModelBatisUtil.getSqlSession()) { - RegisteredModelNameMapper mapper = sqlSession.getMapper(RegisteredModelNameMapper.class); - mapper.update(entity); - sqlSession.commit(); - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new SubmarineRuntimeException("Unable to update registered model name entity from database"); - } - return true; - } - - public boolean deleteRegisteredModelName(String name) throws SubmarineRuntimeException { - LOG.info("Registered Model Name delete " + name); - try (SqlSession sqlSession = ModelBatisUtil.getSqlSession()) { - RegisteredModelNameMapper mapper = sqlSession.getMapper(RegisteredModelNameMapper.class); - mapper.delete(name); - sqlSession.commit(); - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new SubmarineRuntimeException("Unable to delete registered model name entity from database"); - } - return true; - } - - public List<ModelVersionEntity> listModelVersion(String name) throws SubmarineRuntimeException { - LOG.info("Model Version list " + name); - List<ModelVersionEntity> entities; - try (SqlSession sqlSession = ModelBatisUtil.getSqlSession()) { - ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); - entities = mapper.list(name); - sqlSession.commit(); - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new SubmarineRuntimeException("Unable to get model version entities from database"); - } - return entities; - } - - public ModelVersionEntity selectModelVersion(String name, Integer version) - throws SubmarineRuntimeException { - LOG.info("Model Version select " + name + " " + version.toString()); - ModelVersionEntity entity = new ModelVersionEntity(); - entity.setName(name); - entity.setVersion(version); - try (SqlSession sqlSession = ModelBatisUtil.getSqlSession()) { - ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); - entity = mapper.select(entity); - sqlSession.commit(); - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new SubmarineRuntimeException("Unable to get model version entity from database"); - } - return entity; - } - - public boolean insertModelVersion(ModelVersionEntity entity) throws SubmarineRuntimeException { - LOG.info("Model Version insert " + entity.getName()); - try (SqlSession sqlSession = ModelBatisUtil.getSqlSession()) { - ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); - mapper.insert(entity); - sqlSession.commit(); - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new SubmarineRuntimeException("Unable to insert model version entity from database"); - } - return true; - } - - - public boolean deleteModelVersion(String name, Integer version) throws SubmarineRuntimeException { - LOG.info("Model Version delete " + name + " " + version.toString()); - ModelVersionEntity entity = new ModelVersionEntity(); - entity.setName(name); - entity.setVersion(version); - try (SqlSession sqlSession = ModelBatisUtil.getSqlSession()) { - ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); - mapper.delete(entity); - sqlSession.commit(); - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new SubmarineRuntimeException("Unable to delete model version entity from database"); - } - return true; - } - - public boolean deleteAllModelVersion(String name) throws SubmarineRuntimeException { - LOG.info("Model Version delete all " + name); - try (SqlSession sqlSession = ModelBatisUtil.getSqlSession()) { - ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); - mapper.deleteAll(name); - sqlSession.commit(); - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new SubmarineRuntimeException("Unable to delete model version entity from database"); - } - return true; - } - -} diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/ModelVersionService.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/ModelVersionService.java new file mode 100644 index 0000000..8588a2e --- /dev/null +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/ModelVersionService.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.submarine.server.model.database.service; + +import org.apache.ibatis.session.SqlSession; +import org.apache.submarine.commons.utils.exception.SubmarineRuntimeException; +import org.apache.submarine.server.database.utils.MyBatisUtil; +import org.apache.submarine.server.model.database.entities.ModelVersionEntity; +import org.apache.submarine.server.model.database.mappers.ModelVersionMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +public class ModelVersionService { + + private static final Logger LOG = LoggerFactory.getLogger(ModelVersionService.class); + + public List<ModelVersionEntity> selectAllVersions(String name) throws SubmarineRuntimeException { + LOG.info("Model Version select all versions:" + name); + List<ModelVersionEntity> modelVersionEntities; + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); + modelVersionEntities = mapper.selectAllVersions(name); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to get model version from database"); + } + return modelVersionEntities; + } + + public ModelVersionEntity select(String name, Integer version) throws SubmarineRuntimeException { + LOG.info("Model Version select:" + name + " " + version.toString()); + ModelVersionEntity modelVersionEntity; + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); + modelVersionEntity = mapper.select(name, version); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to get model version from database"); + } + return modelVersionEntity; + } + public ModelVersionEntity selectWithTag(String name, Integer version) throws SubmarineRuntimeException { + LOG.info("Model Version select with tag:" + name + " " + version.toString()); + ModelVersionEntity modelVersionEntity; + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); + modelVersionEntity = mapper.selectWithTag(name, version); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to get model version from database"); + } + return modelVersionEntity; + } + + public void insert(ModelVersionEntity modelVersion) throws SubmarineRuntimeException { + LOG.info("Model Version insert " + modelVersion.getName()); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); + mapper.insert(modelVersion); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to insert model version from database"); + } + } + + public void update(ModelVersionEntity modelVersion) throws SubmarineRuntimeException { + LOG.info("Model Version update " + modelVersion.getName()); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); + mapper.update(modelVersion); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to update model version from database"); + } + } + + public void delete(String name, Integer version) throws SubmarineRuntimeException { + LOG.info("Model Version delete name:" + name + ", version:" + version.toString()); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + ModelVersionMapper mapper = sqlSession.getMapper(ModelVersionMapper.class); + mapper.delete(name, version); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to delete model version from database"); + } + } +} diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/ModelVersionTagService.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/ModelVersionTagService.java new file mode 100644 index 0000000..937fcf8 --- /dev/null +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/ModelVersionTagService.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.submarine.server.model.database.service; + +import org.apache.ibatis.session.SqlSession; +import org.apache.submarine.commons.utils.exception.SubmarineRuntimeException; +import org.apache.submarine.server.database.utils.MyBatisUtil; +import org.apache.submarine.server.model.database.entities.ModelVersionTagEntity; +import org.apache.submarine.server.model.database.mappers.ModelVersionTagMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ModelVersionTagService { + + private static final Logger LOG = LoggerFactory.getLogger(ModelVersionTagService.class); + + public void insert(ModelVersionTagEntity modelVersionTag) + throws SubmarineRuntimeException { + LOG.info("Model Version Tag insert name:" + modelVersionTag.getName() + ", tag:" + + modelVersionTag.getTag()); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + ModelVersionTagMapper mapper = sqlSession.getMapper(ModelVersionTagMapper.class); + mapper.insert(modelVersionTag); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to insert model version tag entity to database"); + } + } + + public void delete(ModelVersionTagEntity modelVersionTag) + throws SubmarineRuntimeException { + LOG.info("Model Version Tag delete name:" + modelVersionTag.getName() + ", tag:" + + modelVersionTag.getTag()); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + ModelVersionTagMapper mapper = sqlSession.getMapper(ModelVersionTagMapper.class); + mapper.delete(modelVersionTag); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to delete model version tag entity to database"); + } + } +} diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/RegisteredModelService.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/RegisteredModelService.java new file mode 100644 index 0000000..02dae36 --- /dev/null +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/RegisteredModelService.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.submarine.server.model.database.service; + +import org.apache.ibatis.session.SqlSession; +import org.apache.submarine.commons.runtime.exception.SubmarineRuntimeException; +import org.apache.submarine.server.database.utils.MyBatisUtil; +import org.apache.submarine.server.model.database.entities.RegisteredModelEntity; +import org.apache.submarine.server.model.database.mappers.RegisteredModelMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +public class RegisteredModelService { + + private static final Logger LOG = LoggerFactory.getLogger(RegisteredModelService.class); + + public List<RegisteredModelEntity> selectAll() throws SubmarineRuntimeException { + LOG.info("Registered model selectAll"); + List<RegisteredModelEntity> registeredModels; + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + RegisteredModelMapper mapper = sqlSession.getMapper(RegisteredModelMapper.class); + registeredModels = mapper.selectAll(); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to get registered models from database"); + } + return registeredModels; + } + + public RegisteredModelEntity select(String name) throws SubmarineRuntimeException { + LOG.info("Registered Model select:" + name); + RegisteredModelEntity registeredModel; + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + RegisteredModelMapper mapper = sqlSession.getMapper(RegisteredModelMapper.class); + registeredModel = mapper.select(name); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to get registered model name entity from database"); + } + return registeredModel; + } + + public RegisteredModelEntity selectWithTag(String name) throws SubmarineRuntimeException { + LOG.info("Registered Model select with tag:" + name); + RegisteredModelEntity registeredModel; + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + RegisteredModelMapper mapper = sqlSession.getMapper(RegisteredModelMapper.class); + registeredModel = mapper.selectWithTag(name); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to get registered model name entity from database"); + } + return registeredModel; + } + + public void insert(RegisteredModelEntity registeredModel) throws SubmarineRuntimeException { + LOG.info("Registered Model insert " + registeredModel.getName()); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + RegisteredModelMapper mapper = sqlSession.getMapper(RegisteredModelMapper.class); + mapper.insert(registeredModel); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to insert registered model name entity to database"); + } + } + + public void update(RegisteredModelEntity registeredModel) throws SubmarineRuntimeException { + LOG.info("Registered Model update " + registeredModel.getName()); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + RegisteredModelMapper mapper = sqlSession.getMapper(RegisteredModelMapper.class); + mapper.update(registeredModel); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to update registered model name entity from database"); + } + } + + public void rename(String name, String newName) throws SubmarineRuntimeException { + LOG.info("Registered Model rename"); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + RegisteredModelMapper mapper = sqlSession.getMapper(RegisteredModelMapper.class); + mapper.rename(name, newName); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to rename registered model name from database"); + } + } + + public void delete(String name) throws SubmarineRuntimeException { + LOG.info("Registered Model delete " + name); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + RegisteredModelMapper mapper = sqlSession.getMapper(RegisteredModelMapper.class); + mapper.delete(name); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to delete registered model entity from database"); + } + } + + public void deleteAll() throws SubmarineRuntimeException { + LOG.info("Registered Model delete all"); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + RegisteredModelMapper mapper = sqlSession.getMapper(RegisteredModelMapper.class); + mapper.deleteAll(); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to delete all registered model entities from database"); + } + } +} diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/RegisteredModelTagService.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/RegisteredModelTagService.java new file mode 100644 index 0000000..400f764 --- /dev/null +++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/model/database/service/RegisteredModelTagService.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.submarine.server.model.database.service; + +import org.apache.ibatis.session.SqlSession; +import org.apache.submarine.commons.utils.exception.SubmarineRuntimeException; +import org.apache.submarine.server.database.utils.MyBatisUtil; +import org.apache.submarine.server.model.database.entities.RegisteredModelTagEntity; +import org.apache.submarine.server.model.database.mappers.RegisteredModelTagMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RegisteredModelTagService { + + private static final Logger LOG = LoggerFactory.getLogger(RegisteredModelTagService.class); + + public void insert(RegisteredModelTagEntity registeredModelTag) + throws SubmarineRuntimeException { + LOG.info("Registered Model Tag insert name:" + registeredModelTag.getName() + ", tag:" + + registeredModelTag.getTag()); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + RegisteredModelTagMapper mapper = sqlSession.getMapper(RegisteredModelTagMapper.class); + mapper.insert(registeredModelTag); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to insert registered model tag entity to database"); + } + } + + public void delete(RegisteredModelTagEntity registeredModelTag) + throws SubmarineRuntimeException { + LOG.info("Registered Model Tag delete name:" + registeredModelTag.getName() + ", tag:" + + registeredModelTag.getTag()); + try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) { + RegisteredModelTagMapper mapper = sqlSession.getMapper(RegisteredModelTagMapper.class); + mapper.delete(registeredModelTag); + sqlSession.commit(); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new SubmarineRuntimeException("Unable to delete registered model tag from database"); + } + } +} diff --git a/submarine-server/server-core/src/main/resources/mybatis-config.xml b/submarine-server/server-core/src/main/resources/mybatis-config.xml index e251084..ecdc40b 100755 --- a/submarine-server/server-core/src/main/resources/mybatis-config.xml +++ b/submarine-server/server-core/src/main/resources/mybatis-config.xml @@ -70,5 +70,9 @@ <mapper resource='org/apache/submarine/database/mappers/ExperimentTemplateMapper.xml'/> <mapper resource='org/apache/submarine/database/mappers/ExperimentMapper.xml'/> <mapper resource='org/apache/submarine/database/mappers/NotebookMapper.xml'/> + <mapper resource='org/apache/submarine/database/mappers/RegisteredModelMapper.xml'/> + <mapper resource='org/apache/submarine/database/mappers/RegisteredModelTagMapper.xml'/> + <mapper resource="org/apache/submarine/database/mappers/ModelVersionMapper.xml" /> + <mapper resource="org/apache/submarine/database/mappers/ModelVersionTagMapper.xml" /> </mappers> </configuration> diff --git a/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/ModelVersionMapper.xml b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/ModelVersionMapper.xml index 9344f71..eda962e 100644 --- a/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/ModelVersionMapper.xml +++ b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/ModelVersionMapper.xml @@ -22,54 +22,91 @@ <resultMap id="resultMap" type="org.apache.submarine.server.model.database.entities.ModelVersionEntity"> <result column="name" property="name" /> <result column="version" property="version" /> - <result column="creation_time" property="createTime" /> + <result column="source" property="source" /> + <result column="user_id" property="userId" /> + <result column="experiment_id" property="experimentId" /> + <result column="current_stage" property="currentStage" /> + <result column="creation_time" property="creationTime" /> <result column="last_updated_time" property="lastUpdatedTime" /> + <result column="dataset" property="dataset" /> <result column="description" property="description" /> + </resultMap> + + <resultMap id="resultMapWithTag" type="org.apache.submarine.server.model.database.entities.ModelVersionEntity"> + <result column="name" property="name" /> + <result column="version" property="version" /> + <result column="source" property="source" /> <result column="user_id" property="userId" /> + <result column="experiment_id" property="experimentId" /> <result column="current_stage" property="currentStage" /> - <result column="source" property="source" /> - <result column="run_id" property="runId" /> - <result column="status" property="status" /> - <result column="status_message" property="statusMessage" /> - <result column="run_link" property="runLink" /> + <result column="creation_time" property="creationTime" /> + <result column="last_updated_time" property="lastUpdatedTime" /> + <result column="dataset" property="dataset" /> + <result column="description" property="description" /> + <collection property="tags" column="name" ofType="java.lang.String"> + <result column="tag" property="tag" /> + </collection> </resultMap> <sql id="Base_Column_List"> - name, version, creation_time, last_updated_time, description, user_id, current_stage, - source, run_id, status, status_message, run_link + name, version, source, user_id, experiment_id, current_stage, creation_time, + last_updated_time, dataset, description </sql> - <select id="list" parameterType="java.lang.String" resultMap="resultMap"> + <select id="select" resultMap="resultMap"> select <include refid="Base_Column_List" /> - from model_versions - where name = #{name,jdbcType=VARCHAR} + from model_version + where name = #{name} and version = #{version} </select> - <select id="select" parameterType="org.apache.submarine.server.model.database.entities.ModelVersionEntity" resultMap="resultMap"> - select - <include refid="Base_Column_List" /> - from model_versions - where name = #{name,jdbcType=VARCHAR} and version = #{version,jdbcType=INTEGER} + <select id="selectWithTag" resultMap="resultMapWithTag"> + select * + from model_version mv + left join model_version_tag tag on tag.name = mv.name and tag.version = mv.version + where mv.name = #{name,jdbcType=VARCHAR} and mv.version = #{version} </select> - <delete id="delete" parameterType="org.apache.submarine.server.model.database.entities.ModelVersionEntity"> - delete from model_versions - where name = #{name,jdbcType=VARCHAR} and version = #{version,jdbcType=INTEGER} - </delete> - - <delete id="deleteAll" parameterType="java.lang.String"> - delete from model_versions - where name = #{name,jdbcType=VARCHAR} - </delete> + <select id="selectAllVersions" resultMap="resultMapWithTag"> + select * + from model_version mv + left join model_version_tag tag on tag.name = mv.name and tag.version = mv.version + where mv.name = #{name,jdbcType=VARCHAR} + </select> <insert id="insert" parameterType="org.apache.submarine.server.model.database.entities.ModelVersionEntity"> - insert into model_versions (name, version, creation_time, last_updated_time, description, user_id, - current_stage, source, run_id, status, status_message, run_link) - values (#{name,jdbcType=VARCHAR}, #{version,jdbcType=INTEGER}, now(), now(), - #{description,jdbcType=VARCHAR}, #{userId,jdbcType=VARCHAR}, #{currentStage,jdbcType=VARCHAR}, - #{source,jdbcType=VARCHAR}, #{runId,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, - #{statusMessage,jdbcType=VARCHAR}, #{runLink,jdbcType=VARCHAR}) + insert into model_version (name, version, source, user_id, experiment_id, current_stage, creation_time, last_updated_time, dataset, description) + values (#{name,jdbcType=VARCHAR}, #{version,jdbcType=INTEGER}, #{source,jdbcType=VARCHAR}, + #{userId,jdbcType=VARCHAR}, #{experimentId,jdbcType=VARCHAR}, #{currentStage,jdbcType=VARCHAR}, + NOW(3), NOW(3), #{dataset,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}); + <if test="tags != null and !tags.isEmpty()"> + insert INTO model_version_tag (name, version, tag) values + <foreach collection="tags" item="tag" index="index" separator=","> + (#{name},#{version},#{tag}) + </foreach> + </if> </insert> + <update id="update" parameterType="org.apache.submarine.server.model.database.entities.ModelVersionEntity"> + update model_version + <set> + <if test="currentStage != null"> + current_stage = #{currentStage,jdbcType=VARCHAR}, + </if> + <if test="dataset != null"> + dataset = #{dataset,jdbcType=VARCHAR}, + </if> + <if test="description != null"> + description = #{description,jdbcType=VARCHAR}, + </if> + last_updated_time = NOW(3) + </set> + where name = #{name, jdbcType=VARCHAR} and version = #{version, jdbcType=INTEGER} + </update> + + <delete id="delete"> + delete from model_version + where name = #{name,jdbcType=VARCHAR} and version = #{version,jdbcType=INTEGER} + </delete> + </mapper> diff --git a/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/ModelVersionTagMapper.xml b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/ModelVersionTagMapper.xml new file mode 100644 index 0000000..a76f4ee --- /dev/null +++ b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/ModelVersionTagMapper.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.apache.submarine.server.model.database.mappers.ModelVersionTagMapper"> + <resultMap id="resultMap" type="org.apache.submarine.server.model.database.entities.ModelVersionTagEntity"> + <result column="name" property="name" /> + <result column="tag" property="tag" /> + </resultMap> + + <sql id="Base_Column_List"> + name, tag + </sql> + + <delete id="delete" parameterType="java.lang.String"> + delete from model_version_tag + where name = #{name,jdbcType=VARCHAR} AND tag = #{tag,jdbcType=VARCHAR} + </delete> + + <insert id="insert" parameterType="org.apache.submarine.server.model.database.entities.ModelVersionTagEntity"> + insert into model_version_tag (name, version, tag) + values (#{name,jdbcType=VARCHAR}, #{version,jdbcType=INTEGER}, #{tag,jdbcType=VARCHAR}) + </insert> + +</mapper> diff --git a/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/RegisteredModelMapper.xml b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/RegisteredModelMapper.xml new file mode 100644 index 0000000..6c5ecb4 --- /dev/null +++ b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/RegisteredModelMapper.xml @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.apache.submarine.server.model.database.mappers.RegisteredModelMapper"> + <resultMap id="RegisteredModelTagMap" type="org.apache.submarine.server.model.database.entities.RegisteredModelTagEntity"> + <result column="name" property="name" /> + <result column="tag" property="tag" /> + </resultMap> + + <resultMap id="resultMap" type="org.apache.submarine.server.model.database.entities.RegisteredModelEntity"> + <result column="name" property="name" /> + <result column="creation_time" property="creationTime" /> + <result column="last_updated_time" property="lastUpdatedTime" /> + <result column="description" property="description" /> + </resultMap> + + <resultMap id="resultMapWithTag" type="org.apache.submarine.server.model.database.entities.RegisteredModelEntity"> + <result column="name" property="name" /> + <result column="creation_time" property="creationTime" /> + <result column="last_updated_time" property="lastUpdatedTime" /> + <result column="description" property="description" /> + <collection property="tags" column="name" ofType="java.lang.String"> + <result column="tag" property="tag" /> + </collection> + </resultMap> + + <sql id="Base_Column_List"> + name, creation_time, last_updated_time, description + </sql> + + <select id="select" parameterType="java.lang.String" resultMap="resultMap"> + select + <include refid="Base_Column_List" /> + from registered_model + where name = #{name,jdbcType=VARCHAR} + </select> + + <select id="selectWithTag" parameterType="java.lang.String" resultMap="resultMapWithTag"> + select * + from registered_model rm left join registered_model_tag tag on tag.name = #{name} + where rm.name = #{name,jdbcType=VARCHAR} + </select> + + <select id="selectAll" resultMap="resultMapWithTag"> + select * + from registered_model rm left join registered_model_tag tag on tag.name = rm.name + </select> + + <insert id="insert" parameterType="org.apache.submarine.server.model.database.entities.RegisteredModelEntity"> + insert into registered_model (name, creation_time, last_updated_time, description) + values (#{name,jdbcType=VARCHAR}, NOW(3), NOW(3), #{description,jdbcType=VARCHAR}); + <if test="tags != null and !tags.isEmpty()"> + insert INTO registered_model_tag (name, tag) values + <foreach collection="tags" item="tag" index="index" separator=","> + (#{name},#{tag}) + </foreach> + </if> + </insert> + + <update id="update" parameterType="org.apache.submarine.server.model.database.entities.RegisteredModelEntity"> + update registered_model + <set> + <if test="description != null"> + description = #{description,jdbcType=VARCHAR}, + </if> + last_updated_time = NOW(3) + </set> + where name = #{name,jdbcType=VARCHAR} + </update> + + <update id="rename"> + update registered_model + <set> + last_updated_time = NOW(3), + name = #{newName,jdbcType=VARCHAR} + </set> + where name = #{name,jdbcType=VARCHAR} + </update> + + <delete id="delete" parameterType="java.lang.String"> + delete from registered_model + where name = #{name,jdbcType=VARCHAR}; + </delete> + + <delete id="deleteAll" parameterType="java.lang.String"> + delete from registered_model; + </delete> + +</mapper> diff --git a/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/RegisteredModelNameMapper.xml b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/RegisteredModelNameMapper.xml deleted file mode 100644 index 1ea332a..0000000 --- a/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/RegisteredModelNameMapper.xml +++ /dev/null @@ -1,68 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. ---> -<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -<mapper namespace="org.apache.submarine.server.model.database.mappers.RegisteredModelNameMapper"> - <resultMap id="resultMap" type="org.apache.submarine.server.model.database.entities.RegisteredModelNameEntity"> - <result column="name" property="name" /> - <result column="creation_time" property="createTime" /> - <result column="last_updated_time" property="lastUpdatedTime" /> - <result column="description" property="description" /> - </resultMap> - - <sql id="Base_Column_List"> - name, creation_time, last_updated_time, description - </sql> - - <select id="selectAll" resultMap="resultMap"> - select - <include refid="Base_Column_List" /> - from registered_models - </select> - - <select id="select" parameterType="java.lang.String" resultMap="resultMap"> - select - <include refid="Base_Column_List" /> - from registered_models - where name = #{name,jdbcType=VARCHAR} - </select> - - <delete id="delete" parameterType="java.lang.String"> - delete from registered_models - where name = #{name,jdbcType=VARCHAR} - </delete> - - <insert id="insert" parameterType="org.apache.submarine.server.model.database.entities.RegisteredModelNameEntity"> - insert into registered_models (name, creation_time, last_updated_time, description) - values (#{name,jdbcType=VARCHAR}, now(), now(), #{description,jdbcType=VARCHAR}) - </insert> - - <update id="update" parameterType="org.apache.submarine.server.model.database.entities.RegisteredModelNameEntity"> - update registered_models - <set> - <if test="description != null"> - description = #{description,jdbcType=VARCHAR}, - </if> - last_updated_time = now() - </set> - where name = #{name,jdbcType=VARCHAR} - </update> - - -</mapper> diff --git a/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/RegisteredModelTagMapper.xml b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/RegisteredModelTagMapper.xml new file mode 100644 index 0000000..b9993c3 --- /dev/null +++ b/submarine-server/server-core/src/main/resources/org/apache/submarine/database/mappers/RegisteredModelTagMapper.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.apache.submarine.server.model.database.mappers.RegisteredModelTagMapper"> + <resultMap id="resultMap" type="org.apache.submarine.server.model.database.entities.RegisteredModelTagEntity"> + <result column="name" property="name" /> + <result column="tag" property="tag" /> + </resultMap> + + <sql id="Base_Column_List"> + name, tag + </sql> + + <delete id="delete" parameterType="org.apache.submarine.server.model.database.entities.RegisteredModelTagEntity"> + delete from registered_model_tag + where name = #{name,jdbcType=VARCHAR} AND tag = #{tag,jdbcType=VARCHAR} + </delete> + + <insert id="insert" parameterType="org.apache.submarine.server.model.database.entities.RegisteredModelTagEntity"> + insert into registered_model_tag (name, tag) + values (#{name,jdbcType=VARCHAR}, #{tag,jdbcType=VARCHAR}) + </insert> + +</mapper> diff --git a/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/ModelVersionTagTest.java b/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/ModelVersionTagTest.java new file mode 100644 index 0000000..16f671a --- /dev/null +++ b/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/ModelVersionTagTest.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.submarine.server.model.database; + +import org.apache.submarine.server.model.database.entities.ModelVersionEntity; +import org.apache.submarine.server.model.database.entities.ModelVersionTagEntity; +import org.apache.submarine.server.model.database.entities.RegisteredModelEntity; +import org.apache.submarine.server.model.database.service.ModelVersionService; +import org.apache.submarine.server.model.database.service.ModelVersionTagService; +import org.apache.submarine.server.model.database.service.RegisteredModelService; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ModelVersionTagTest { + private static final Logger LOG = LoggerFactory.getLogger(ModelVersionTagTest.class); + RegisteredModelService registeredModelService = new RegisteredModelService(); + ModelVersionService modelVersionService = new ModelVersionService(); + ModelVersionTagService modelVersionTagService = new ModelVersionTagService(); + + + @After + public void cleanAll() { + registeredModelService.deleteAll(); + } + + @Test + public void testInsertAndDelete() { + String name = "InsertModelVersionTag"; + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelService.insert(registeredModelEntity); + + Integer version = 1; + ModelVersionEntity modelVersionEntity = new ModelVersionEntity(); + modelVersionEntity.setName(name); + modelVersionEntity.setVersion(version); + modelVersionEntity.setSource("path/to/source"); + modelVersionEntity.setUserId("test"); + modelVersionEntity.setExperimentId("application_1234"); + modelVersionService.insert(modelVersionEntity); + + ModelVersionTagEntity modelVersionTagEntity = new ModelVersionTagEntity(); + modelVersionTagEntity.setName(name); + modelVersionTagEntity.setVersion(version); + modelVersionTagEntity.setTag("tag"); + modelVersionTagService.insert(modelVersionTagEntity); + + ModelVersionEntity modelVersionEntitySelected = modelVersionService.selectWithTag(name, version); + Assert.assertEquals(modelVersionTagEntity.getTag(), modelVersionEntitySelected.getTags().get(0)); + + modelVersionTagService.delete(modelVersionTagEntity); + modelVersionEntitySelected = modelVersionService.selectWithTag(name, version); + Assert.assertEquals(0, modelVersionEntitySelected.getTags().size()); + } +} diff --git a/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/ModelVersionTest.java b/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/ModelVersionTest.java new file mode 100644 index 0000000..98ba37c --- /dev/null +++ b/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/ModelVersionTest.java @@ -0,0 +1,174 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.submarine.server.model.database; + +import org.apache.submarine.server.model.database.entities.ModelVersionEntity; +import org.apache.submarine.server.model.database.entities.RegisteredModelEntity; +import org.apache.submarine.server.model.database.service.ModelVersionService; +import org.apache.submarine.server.model.database.service.RegisteredModelService; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +public class ModelVersionTest { + RegisteredModelService registeredModelService = new RegisteredModelService(); + ModelVersionService modelVersionService = new ModelVersionService(); + + @After + public void cleanAll() { + registeredModelService.deleteAll(); + } + + @Test + public void testSelectAllVersions() { + String name = "selectAllModelVersions"; + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelService.insert(registeredModelEntity); + + Integer version = 1; + List<String> tags = new ArrayList<>(); + tags.add("tag"); + ModelVersionEntity modelVersionEntity = new ModelVersionEntity(); + modelVersionEntity.setName(name); + modelVersionEntity.setVersion(version); + modelVersionEntity.setSource("path/to/source"); + modelVersionEntity.setUserId("test"); + modelVersionEntity.setExperimentId("application_1234"); + modelVersionEntity.setTags(tags); + modelVersionService.insert(modelVersionEntity); + + Integer version2 = 2; + List<String> tags2 = new ArrayList<>(); + tags2.add("tag2"); + ModelVersionEntity modelVersionEntity2 = new ModelVersionEntity(); + modelVersionEntity2.setName(name); + modelVersionEntity2.setVersion(version2); + modelVersionEntity2.setSource("path/to/source2"); + modelVersionEntity2.setUserId("test"); + modelVersionEntity2.setExperimentId("application_1234"); + modelVersionEntity2.setTags(tags2); + modelVersionService.insert(modelVersionEntity2); + + List<ModelVersionEntity> modelVersionEntities = modelVersionService.selectAllVersions(name); + compareModelVersion(modelVersionEntity, modelVersionEntities.get(0)); + compareTags(modelVersionEntity, modelVersionEntities.get(0)); + compareModelVersion(modelVersionEntity2, modelVersionEntities.get(1)); + compareTags(modelVersionEntity2, modelVersionEntities.get(1)); + } + + @Test + public void testInsertAndSelect() { + String name = "insertModelVersion"; + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelService.insert(registeredModelEntity); + + Integer version = 1; + List<String> tags = new ArrayList<>(); + tags.add("tag"); + ModelVersionEntity modelVersionEntity = new ModelVersionEntity(); + modelVersionEntity.setName(name); + modelVersionEntity.setVersion(version); + modelVersionEntity.setSource("path/to/source"); + modelVersionEntity.setUserId("test"); + modelVersionEntity.setExperimentId("application_1234"); + modelVersionEntity.setTags(tags); + modelVersionService.insert(modelVersionEntity); + + ModelVersionEntity modelVersionEntitySelected = modelVersionService.select(name, version); + this.compareModelVersion(modelVersionEntity, modelVersionEntitySelected); + + ModelVersionEntity modelVersionEntitySelectedWithTag = modelVersionService.selectWithTag(name, version); + this.compareModelVersion(modelVersionEntity, modelVersionEntitySelectedWithTag); + this.compareTags(modelVersionEntity, modelVersionEntitySelectedWithTag); + } + + @Test + public void testUpdate() { + String name = "updateModelVersion"; + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelService.insert(registeredModelEntity); + + Integer version = 1; + ModelVersionEntity modelVersionEntity = new ModelVersionEntity(); + modelVersionEntity.setName(name); + modelVersionEntity.setVersion(version); + modelVersionEntity.setSource("path/to/source"); + modelVersionEntity.setUserId("test"); + modelVersionEntity.setExperimentId("application_1234"); + modelVersionService.insert(modelVersionEntity); + + ModelVersionEntity modelVersionEntitySelected = modelVersionService.select(name, version); + this.compareModelVersion(modelVersionEntity, modelVersionEntitySelected); + + String newStage = "Developing"; + String newDataset = "mnist"; + String newDescription = "New description."; + modelVersionEntity.setCurrentStage(newStage); + modelVersionEntity.setDataset(newDataset); + modelVersionEntity.setDescription(newDescription); + modelVersionService.update(modelVersionEntity); + + modelVersionEntitySelected = modelVersionService.select(name, version); + this.compareModelVersion(modelVersionEntity, modelVersionEntitySelected); + } + + @Test + public void testDelete() { + String name = "deleteModelVersion"; + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelService.insert(registeredModelEntity); + + Integer version = 1; + ModelVersionEntity modelVersionEntity = new ModelVersionEntity(); + modelVersionEntity.setName(name); + modelVersionEntity.setVersion(version); + modelVersionEntity.setSource("path/to/source"); + modelVersionEntity.setUserId("test"); + modelVersionEntity.setExperimentId("application_1234"); + modelVersionService.insert(modelVersionEntity); + + modelVersionService.delete(name, version); + + } + + private void compareModelVersion(ModelVersionEntity expected, ModelVersionEntity actual) { + Assert.assertEquals(expected.getName(), actual.getName()); + Assert.assertEquals(expected.getVersion(), actual.getVersion()); + Assert.assertEquals(expected.getSource(), actual.getSource()); + Assert.assertEquals(expected.getUserId(), actual.getUserId()); + Assert.assertEquals(expected.getExperimentId(), actual.getExperimentId()); + Assert.assertEquals(expected.getCurrentStage(), actual.getCurrentStage()); + Assert.assertNotNull(actual.getCreationTime()); + Assert.assertNotNull(actual.getLastUpdatedTime()); + Assert.assertEquals(expected.getDataset(), actual.getDataset()); + Assert.assertEquals(expected.getDescription(), actual.getDescription()); + } + + private void compareTags(ModelVersionEntity expected, ModelVersionEntity actual) { + Assert.assertEquals(expected.getTags(), actual.getTags()); + } +} diff --git a/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/RegisteredModelServiceTest.java b/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/RegisteredModelServiceTest.java new file mode 100644 index 0000000..93322f0 --- /dev/null +++ b/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/RegisteredModelServiceTest.java @@ -0,0 +1,148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.submarine.server.model.database; + +import org.apache.submarine.server.model.database.entities.RegisteredModelEntity; +import org.apache.submarine.server.model.database.service.RegisteredModelService; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +public class RegisteredModelServiceTest { + RegisteredModelService registeredModelService = new RegisteredModelService(); + + @After + public void cleanAll() { + registeredModelService.deleteAll(); + } + + @Test + public void testSelectAll() { + String name = "RegisteredModel1"; + List<String> tags = new ArrayList<>(); + tags.add("tag1"); + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelEntity.setTags(tags); + registeredModelService.insert(registeredModelEntity); + + String name2 = "RegisteredModel2"; + List<String> tags2 = new ArrayList<>(); + tags2.add("tag2"); + RegisteredModelEntity registeredModelEntity2 = new RegisteredModelEntity(); + registeredModelEntity2.setName(name2); + registeredModelEntity2.setTags(tags2); + registeredModelService.insert(registeredModelEntity2); + + List<RegisteredModelEntity> registeredModelEntities = registeredModelService.selectAll(); + compareRegisteredModel(registeredModelEntity, registeredModelEntities.get(0)); + compareTags(registeredModelEntity, registeredModelEntities.get(0)); + compareRegisteredModel(registeredModelEntity2, registeredModelEntities.get(1)); + compareTags(registeredModelEntity2, registeredModelEntities.get(1)); + } + + @Test + public void testInsertAndSelect() { + String name = "RegisteredModel"; + String description = "Description."; + List<String> tags = new ArrayList<>(); + tags.add("tag"); + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelEntity.setDescription(description); + registeredModelEntity.setTags(tags); + registeredModelService.insert(registeredModelEntity); + + RegisteredModelEntity registeredModelEntitySelected = registeredModelService.select(name); + compareRegisteredModel(registeredModelEntity, registeredModelEntitySelected); + + RegisteredModelEntity registeredModelEntitySelectedWithTags = registeredModelService.selectWithTag(name); + compareRegisteredModel(registeredModelEntity, registeredModelEntitySelectedWithTags); + compareTags(registeredModelEntity, registeredModelEntitySelectedWithTags); + } + + @Test + public void testUpdate() { + String name = "RegisteredModel"; + String description = "Description."; + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelEntity.setDescription(description); + registeredModelService.insert(registeredModelEntity); + + RegisteredModelEntity registeredModelEntitySelected = registeredModelService.select(name); + compareRegisteredModel(registeredModelEntity, registeredModelEntitySelected); + + String newDescription = "New description."; + registeredModelEntity.setDescription(newDescription); + registeredModelService.update(registeredModelEntity); + + registeredModelEntitySelected = registeredModelService.select(name); + compareRegisteredModel(registeredModelEntity, registeredModelEntitySelected); + } + + @Test + public void testRename() { + String name = "RegisteredModel"; + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelService.insert(registeredModelEntity); + + RegisteredModelEntity registeredModelEntitySelected = registeredModelService.select(name); + compareRegisteredModel(registeredModelEntity, registeredModelEntitySelected); + + String newName = "newRegisteredModel"; + registeredModelService.rename(name, newName); + + registeredModelEntitySelected = registeredModelService.select(newName); + registeredModelEntity.setName(newName); + compareRegisteredModel(registeredModelEntity, registeredModelEntitySelected); + } + + @Test + public void testDelete() { + String name = "RegisteredModel"; + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelService.insert(registeredModelEntity); + + RegisteredModelEntity registeredModelEntitySelected = registeredModelService.select(name); + compareRegisteredModel(registeredModelEntity, registeredModelEntitySelected); + + registeredModelService.delete(name); + List<RegisteredModelEntity> registeredModelEntities = registeredModelService.selectAll(); + + Assert.assertEquals(0, registeredModelEntities.size()); + } + + private void compareRegisteredModel(RegisteredModelEntity expected, RegisteredModelEntity actual) { + Assert.assertEquals(expected.getName(), actual.getName()); + Assert.assertNotNull(actual.getCreationTime()); + Assert.assertNotNull(actual.getLastUpdatedTime()); + Assert.assertEquals(expected.getDescription(), actual.getDescription()); + } + + private void compareTags(RegisteredModelEntity expected, RegisteredModelEntity actual) { + Assert.assertEquals(true, expected.getTags().equals(actual.getTags())); + } +} diff --git a/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/RegisteredModelTagServiceTest.java b/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/RegisteredModelTagServiceTest.java new file mode 100644 index 0000000..1f59ab2 --- /dev/null +++ b/submarine-server/server-core/src/test/java/org/apache/submarine/server/model/database/RegisteredModelTagServiceTest.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.submarine.server.model.database; + +import org.apache.submarine.server.model.database.entities.RegisteredModelEntity; +import org.apache.submarine.server.model.database.entities.RegisteredModelTagEntity; +import org.apache.submarine.server.model.database.service.RegisteredModelService; +import org.apache.submarine.server.model.database.service.RegisteredModelTagService; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RegisteredModelTagServiceTest { + private static final Logger LOG = LoggerFactory.getLogger(RegisteredModelTagServiceTest.class); + RegisteredModelService registeredModelService = new RegisteredModelService(); + RegisteredModelTagService registeredModelTagService = new RegisteredModelTagService(); + + @After + public void cleanAll() { + registeredModelService.deleteAll(); + } + + @Test + public void testInsertAndDelete() { + String name = "InsertRegisteredModelTag"; + RegisteredModelEntity registeredModelEntity = new RegisteredModelEntity(); + registeredModelEntity.setName(name); + registeredModelService.insert(registeredModelEntity); + + RegisteredModelTagEntity registeredModelTagEntity = new RegisteredModelTagEntity(); + registeredModelTagEntity.setName(name); + registeredModelTagEntity.setTag("tag"); + registeredModelTagService.insert(registeredModelTagEntity); + + RegisteredModelEntity registeredModelEntitySelected = registeredModelService.selectWithTag(name); + Assert.assertEquals(registeredModelTagEntity.getTag(), registeredModelEntitySelected.getTags().get(0)); + + registeredModelTagService.delete(registeredModelTagEntity); + registeredModelEntitySelected = registeredModelService.selectWithTag(name); + Assert.assertEquals(0, registeredModelEntitySelected.getTags().size()); + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@submarine.apache.org For additional commands, e-mail: dev-h...@submarine.apache.org