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

Reply via email to