This is an automated email from the ASF dual-hosted git repository. liyang pushed a commit to branch kylin5 in repository https://gitbox.apache.org/repos/asf/kylin.git
commit 51c2df947547e0ea9158bd49435c282b6741c615 Author: Yinghao Lin <39019287+yhca...@users.noreply.github.com> AuthorDate: Fri Nov 10 11:35:37 2023 +0800 KYLIN-5871 Fix OpenAPI on broken model deletion --- .../rest/controller/open/OpenModelController.java | 2 +- .../rest/controller/open/OpenModelControllerTest.java | 18 ++++++++++++++++++ .../org/apache/kylin/rest/service/ModelService.java | 12 ++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/open/OpenModelController.java b/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/open/OpenModelController.java index 97ebc4d038..cdda976d91 100644 --- a/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/open/OpenModelController.java +++ b/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/open/OpenModelController.java @@ -307,7 +307,7 @@ public class OpenModelController extends NBasicController { public EnvelopeResponse<String> deleteModel(@PathVariable("model_name") String modelAlias, @RequestParam("project") String project) { String projectName = checkProjectName(project); - String modelId = modelService.getModel(modelAlias, projectName).getId(); + String modelId = modelService.getModelWithoutBrokenCheck(modelAlias, projectName).getId(); return modelController.deleteModel(modelId, projectName); } diff --git a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenModelControllerTest.java b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenModelControllerTest.java index 0dfe0e122b..840050132f 100644 --- a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenModelControllerTest.java +++ b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenModelControllerTest.java @@ -658,4 +658,22 @@ public class OpenModelControllerTest extends NLocalFileMetadataTestCase { .andExpect(MockMvcResultMatchers.status().isOk()); Mockito.verify(openModelController).commentsSynchronization(modelRequest); } + + @Test + public void testDeleteModel() throws Exception { + String project = "default"; + String modelName = "model1"; + NDataModel model = Mockito.mock(NDataModel.class); + + + Mockito.when(nModelController.deleteModel(Mockito.anyString(), Mockito.anyString())) + .thenReturn(new EnvelopeResponse<String>(KylinException.CODE_SUCCESS, "", "")); + Mockito.when(modelService.getModelWithoutBrokenCheck(Mockito.anyString(), Mockito.anyString())) + .thenReturn(model); + Mockito.when(model.getId()).thenReturn("123"); + mockMvc.perform(MockMvcRequestBuilders.delete(String.format("/api/models/%s?project=%s", modelName, project)).contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON))) + .andExpect(MockMvcResultMatchers.status().isOk()); + Mockito.verify(openModelController).deleteModel(modelName, project); + } } diff --git a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java index eadc2bebef..6e31ef05e1 100644 --- a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java +++ b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java @@ -387,6 +387,18 @@ public class ModelService extends AbstractModelService return model; } + public NDataModel getModelWithoutBrokenCheck(String modelAliasOrUuid, String project) { + NDataModel model = getManager(NDataModelManager.class, project).listAllModels().stream() // + .filter(dataModel -> dataModel.getUuid().equals(modelAliasOrUuid) // + || dataModel.getAlias().equalsIgnoreCase(modelAliasOrUuid)) + .findFirst().orElse(null); + + if (model == null) { + throw new KylinException(MODEL_NAME_NOT_EXIST, modelAliasOrUuid); + } + return model; + } + public List<String> getModelNamesByFuzzyName(String fuzzyName, String project, boolean exact) { if (StringUtils.isNotEmpty(project)) { NDataModelManager modelManager = getManager(NDataModelManager.class, project);