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 7cd3fd0ecc8ce95ef4f21a84abd1ed251d4e54a4 Author: Yu Gan <yu....@kyligence.io> AuthorDate: Thu Jun 29 19:00:05 2023 +0800 KYLIN-5741 change all epoch when empty projects request --- .../kylin/rest/controller/NEpochController.java | 9 ++++++++- .../kylin/rest/controller/NEpochControllerTest.java | 19 ++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NEpochController.java b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NEpochController.java index 7f9f1ff00b..ac194caa73 100644 --- a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NEpochController.java +++ b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NEpochController.java @@ -36,6 +36,9 @@ import org.springframework.web.bind.annotation.ResponseBody; import io.swagger.annotations.ApiOperation; +import java.util.ArrayList; +import java.util.Objects; + @Controller @RequestMapping(value = "/api/epoch", produces = { HTTP_VND_APACHE_KYLIN_JSON }) public class NEpochController extends NBasicController { @@ -48,7 +51,11 @@ public class NEpochController extends NBasicController { @PostMapping(value = "", produces = { HTTP_VND_APACHE_KYLIN_JSON, HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON }) @ResponseBody public EnvelopeResponse<String> updateEpochOwner(@RequestBody EpochRequest epochRequest) { - checkCollectionRequiredArg("projects", epochRequest.getProjects()); + if (Objects.isNull(epochRequest.getProjects())) { + // Avoid following NPEs. + epochRequest.setProjects(new ArrayList<>(0)); + } + // Empty projects has specified meanings: all projects do change epoch. epochRequest.getProjects().forEach(this::checkProjectName); checkRequiredArg("force", epochRequest.getForce()); epochService.updateEpoch(epochRequest.getProjects(), epochRequest.getForce(), epochRequest.isClient()); diff --git a/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java b/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java index 80e0b3bf04..523d95e2c8 100644 --- a/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java +++ b/src/common-server/src/test/java/org/apache/kylin/rest/controller/NEpochControllerTest.java @@ -96,17 +96,12 @@ public class NEpochControllerTest extends NLocalFileMetadataTestCase { mockMvc.perform(MockMvcRequestBuilders.post("/api/epoch") .content(JsonUtil.writeValueAsString(mapRequest2)) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON))) - .andExpect(MockMvcResultMatchers.status().is5xxServerError()); - request.setProjects(Lists.newArrayList()); - mockMvc.perform(MockMvcRequestBuilders.post("/api/epoch") - .content(JsonUtil.writeValueAsString(request)) - .contentType(MediaType.APPLICATION_JSON).accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON))) - .andExpect(MockMvcResultMatchers.status().is5xxServerError()); + .andExpect(MockMvcResultMatchers.status().isOk()); request.setProjects(Lists.newArrayList()); mockMvc.perform(MockMvcRequestBuilders.post("/api/epoch") .content(JsonUtil.writeValueAsString(request)) .contentType(MediaType.APPLICATION_JSON).accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON))) - .andExpect(MockMvcResultMatchers.status().is5xxServerError()); + .andExpect(MockMvcResultMatchers.status().isOk()); request.setProjects(Arrays.asList("DEFAULT")); mockMvc.perform(MockMvcRequestBuilders.post("/api/epoch") .content(JsonUtil.writeValueAsString(request)) @@ -114,6 +109,16 @@ public class NEpochControllerTest extends NLocalFileMetadataTestCase { .andExpect(MockMvcResultMatchers.status().isOk()); } + @Test + public void testUpdateEpochOwnerWithEmptyProjects() throws Exception { + val request = new EpochRequest(); + request.setForce(false); + mockMvc.perform(MockMvcRequestBuilders.post("/api/epoch") + .content(JsonUtil.writeValueAsString(request)) + .contentType(MediaType.APPLICATION_JSON).accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON))) + .andExpect(MockMvcResultMatchers.status().isOk()); + } + @Test public void testUpdateAllEpochOwner() throws Exception { val request = mockStreamingEpochRequest();