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

Reply via email to