Skip to content

Commit 0dc3da4

Browse files
authored
Merge branch 'master' into fix/align-database-field-lengths
2 parents 3206532 + fe0ac3d commit 0dc3da4

File tree

11 files changed

+289
-48
lines changed

11 files changed

+289
-48
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Apollo 2.4.0
1616
* [Feature: Add ConfigService cache record stats function](https://github.com/apolloconfig/apollo/pull/5247)
1717
* [RefreshAdminServerAddressTask supports dynamic configuration of time interval](https://github.com/apolloconfig/apollo/pull/5248)
1818
* [Refactor: Configuration files uniformly use Kebab style](https://github.com/apolloconfig/apollo/pull/5262)
19+
* [Feature: openapi query namespace support not fill item](https://github.com/apolloconfig/apollo/pull/5249)
1920
* [Refactor: align database ClusterName and NamespaceName fields lengths](https://github.com/apolloconfig/apollo/pull/5263)
2021

2122
------------------

apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/server/service/ServerNamespaceOpenApiService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,20 @@ public ServerNamespaceOpenApiService(
5858

5959
@Override
6060
public OpenNamespaceDTO getNamespace(String appId, String env, String clusterName,
61-
String namespaceName) {
61+
String namespaceName, boolean fillItemDetail) {
6262
NamespaceBO namespaceBO = namespaceService.loadNamespaceBO(appId, Env.valueOf
63-
(env), clusterName, namespaceName, false);
63+
(env), clusterName, namespaceName, fillItemDetail, false);
6464
if (namespaceBO == null) {
6565
return null;
6666
}
6767
return OpenApiBeanUtils.transformFromNamespaceBO(namespaceBO);
6868
}
6969

7070
@Override
71-
public List<OpenNamespaceDTO> getNamespaces(String appId, String env, String clusterName) {
71+
public List<OpenNamespaceDTO> getNamespaces(String appId, String env, String clusterName, boolean fillItemDetail) {
7272
return OpenApiBeanUtils
7373
.batchTransformFromNamespaceBOs(namespaceService.findNamespaceBOs(appId, Env
74-
.valueOf(env), clusterName, false));
74+
.valueOf(env), clusterName, fillItemDetail, false));
7575
}
7676

7777
@Override

apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/NamespaceController.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.springframework.web.bind.annotation.PathVariable;
3131
import org.springframework.web.bind.annotation.PostMapping;
3232
import org.springframework.web.bind.annotation.RequestBody;
33+
import org.springframework.web.bind.annotation.RequestParam;
3334
import org.springframework.web.bind.annotation.RestController;
3435

3536
import javax.servlet.http.HttpServletRequest;
@@ -81,21 +82,22 @@ public OpenAppNamespaceDTO createNamespace(@PathVariable String appId,
8182

8283
@GetMapping(value = "/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces")
8384
public List<OpenNamespaceDTO> findNamespaces(@PathVariable String appId, @PathVariable String env,
84-
@PathVariable String clusterName) {
85-
return this.namespaceOpenApiService.getNamespaces(appId, env, clusterName);
85+
@PathVariable String clusterName,
86+
@RequestParam(defaultValue = "true") boolean fillItemDetail) {
87+
return this.namespaceOpenApiService.getNamespaces(appId, env, clusterName, fillItemDetail);
8688
}
8789

8890
@GetMapping(value = "/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName:.+}")
8991
public OpenNamespaceDTO loadNamespace(@PathVariable String appId, @PathVariable String env,
90-
@PathVariable String clusterName, @PathVariable String
91-
namespaceName) {
92-
return this.namespaceOpenApiService.getNamespace(appId, env, clusterName, namespaceName);
92+
@PathVariable String clusterName, @PathVariable String namespaceName,
93+
@RequestParam(defaultValue = "true") boolean fillItemDetail) {
94+
return this.namespaceOpenApiService.getNamespace(appId, env, clusterName, namespaceName, fillItemDetail);
9395
}
9496

9597
@GetMapping(value = "/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/lock")
9698
public OpenNamespaceLockDTO getNamespaceLock(@PathVariable String appId, @PathVariable String env,
9799
@PathVariable String clusterName, @PathVariable
98-
String namespaceName) {
100+
String namespaceName) {
99101
return this.namespaceOpenApiService.getNamespaceLock(appId, env, clusterName, namespaceName);
100102
}
101103

apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ConfigsExportController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void exportItems(@PathVariable String appId, @PathVariable String env,
9393
}
9494

9595
NamespaceBO namespaceBO = namespaceService.loadNamespaceBO(appId, Env.valueOf
96-
(env), clusterName, namespaceName, false);
96+
(env), clusterName, namespaceName, true, false);
9797

9898
//generate a file.
9999
res.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + fileName);

apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ConfigsExportService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ private void exportNamespaces(final Env env, final App exportApp, final ClusterD
235235
ZipOutputStream zipOutputStream) {
236236
String clusterName = exportCluster.getName();
237237

238-
List<NamespaceBO> namespaceBOS = namespaceService.findNamespaceBOs(exportApp.getAppId(), env, clusterName, false);
238+
List<NamespaceBO> namespaceBOS = namespaceService.findNamespaceBOs(exportApp.getAppId(), env, clusterName, true, false);
239239

240240
if (CollectionUtils.isEmpty(namespaceBOS)) {
241241
return;

apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public NamespaceDTO loadNamespaceBaseInfo(String appId, Env env, String clusterN
186186
/**
187187
* load cluster all namespace info with items
188188
*/
189-
public List<NamespaceBO> findNamespaceBOs(String appId, Env env, String clusterName, boolean includeDeletedItems) {
189+
public List<NamespaceBO> findNamespaceBOs(String appId, Env env, String clusterName, boolean fillItemDetail, boolean includeDeletedItems) {
190190

191191
List<NamespaceDTO> namespaces = namespaceAPI.findNamespaceByCluster(appId, env, clusterName);
192192
if (namespaces == null || namespaces.size() == 0) {
@@ -200,7 +200,7 @@ public List<NamespaceBO> findNamespaceBOs(String appId, Env env, String clusterN
200200
executorService.submit(() -> {
201201
NamespaceBO namespaceBO;
202202
try {
203-
namespaceBO = transformNamespace2BO(env, namespace, includeDeletedItems);
203+
namespaceBO = transformNamespace2BO(env, namespace, fillItemDetail, includeDeletedItems);
204204
namespaceBOs.add(namespaceBO);
205205
} catch (Exception e) {
206206
LOGGER.error("parse namespace error. app id:{}, env:{}, clusterName:{}, namespace:{}",
@@ -229,7 +229,7 @@ public List<NamespaceBO> findNamespaceBOs(String appId, Env env, String clusterN
229229
}
230230

231231
public List<NamespaceBO> findNamespaceBOs(String appId, Env env, String clusterName) {
232-
return findNamespaceBOs(appId, env, clusterName, true);
232+
return findNamespaceBOs(appId, env, clusterName, true, true);
233233
}
234234

235235
public List<NamespaceDTO> findNamespaces(String appId, Env env, String clusterName) {
@@ -250,17 +250,17 @@ public List<NamespaceDTO> getPublicAppNamespaceAllNamespaces(Env env, String pub
250250
}
251251

252252
public NamespaceBO loadNamespaceBO(String appId, Env env, String clusterName,
253-
String namespaceName, boolean includeDeletedItems) {
253+
String namespaceName, boolean fillItemDetail, boolean includeDeletedItems) {
254254
NamespaceDTO namespace = namespaceAPI.loadNamespace(appId, env, clusterName, namespaceName);
255255
if (namespace == null) {
256256
throw BadRequestException.namespaceNotExists(appId, clusterName, namespaceName);
257257
}
258-
return transformNamespace2BO(env, namespace, includeDeletedItems);
258+
return transformNamespace2BO(env, namespace, fillItemDetail, includeDeletedItems);
259259
}
260260

261261
public NamespaceBO loadNamespaceBO(String appId, Env env, String clusterName,
262262
String namespaceName) {
263-
return loadNamespaceBO(appId, env, clusterName, namespaceName, true);
263+
return loadNamespaceBO(appId, env, clusterName, namespaceName, true, true);
264264
}
265265

266266
public boolean publicAppNamespaceHasAssociatedNamespace(String publicNamespaceName, Env env) {
@@ -293,7 +293,7 @@ public Map<String, Map<String, Boolean>> getNamespacesPublishInfo(String appId)
293293
return result;
294294
}
295295

296-
private NamespaceBO transformNamespace2BO(Env env, NamespaceDTO namespace, boolean includeDeletedItems) {
296+
private NamespaceBO transformNamespace2BO(Env env, NamespaceDTO namespace, boolean fillItemDetail, boolean includeDeletedItems) {
297297
NamespaceBO namespaceBO = new NamespaceBO();
298298
namespaceBO.setBaseInfo(namespace);
299299

@@ -306,6 +306,10 @@ private NamespaceBO transformNamespace2BO(Env env, NamespaceDTO namespace, boole
306306
List<ItemBO> itemBOs = new LinkedList<>();
307307
namespaceBO.setItems(itemBOs);
308308

309+
if (!fillItemDetail) {
310+
return namespaceBO;
311+
}
312+
309313
//latest Release
310314
ReleaseDTO latestRelease;
311315
Map<String, String> releaseItems = new HashMap<>();
@@ -347,7 +351,7 @@ private NamespaceBO transformNamespace2BO(Env env, NamespaceDTO namespace, boole
347351
}
348352

349353
private NamespaceBO transformNamespace2BO(Env env, NamespaceDTO namespace) {
350-
return transformNamespace2BO(env, namespace, true);
354+
return transformNamespace2BO(env, namespace, true, true);
351355
}
352356

353357
private void fillAppNamespaceProperties(NamespaceBO namespace) {

apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/ConfigsExportServiceTest.java

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,18 @@ public class ConfigsExportServiceTest extends AbstractUnitTest {
8383

8484
@Test
8585
public void testNamespaceExportImport() throws FileNotFoundException {
86+
// Test with fillItemDetail = true
87+
testExportImportScenario(true);
88+
}
89+
90+
@Test
91+
public void testNamespaceExportImportWithFillItemDetail() throws FileNotFoundException {
92+
// Test with fillItemDetail = false
93+
testExportImportScenario(false);
94+
}
95+
96+
private void testExportImportScenario(boolean fillItemDetail) throws FileNotFoundException {
97+
8698
File temporaryFolder = Files.newTemporaryFolder();
8799
temporaryFolder.deleteOnExit();
88100
String filePath = temporaryFolder + File.separator + "export.zip";
@@ -146,10 +158,10 @@ public void testNamespaceExportImport() throws FileNotFoundException {
146158
when(permissionValidator.isAppAdmin(any())).thenReturn(true);
147159
when(clusterService.findClusters(env, appId1)).thenReturn(app1Clusters);
148160
when(clusterService.findClusters(env, appId2)).thenReturn(app2Clusters);
149-
when(namespaceService.findNamespaceBOs(appId1, Env.DEV, clusterName1, false)).thenReturn(app1Cluster1Namespace);
150-
when(namespaceService.findNamespaceBOs(appId1, Env.DEV, clusterName2, false)).thenReturn(app1Cluster2Namespace);
151-
when(namespaceService.findNamespaceBOs(appId2, Env.DEV, clusterName1, false)).thenReturn(app2Cluster1Namespace);
152-
when(namespaceService.findNamespaceBOs(appId2, Env.DEV, clusterName2, false)).thenReturn(app2Cluster2Namespace);
161+
when(namespaceService.findNamespaceBOs(appId1, Env.DEV, clusterName1, fillItemDetail, false)).thenReturn(app1Cluster1Namespace);
162+
when(namespaceService.findNamespaceBOs(appId1, Env.DEV, clusterName2, fillItemDetail, false)).thenReturn(app1Cluster2Namespace);
163+
when(namespaceService.findNamespaceBOs(appId2, Env.DEV, clusterName1, fillItemDetail, false)).thenReturn(app2Cluster1Namespace);
164+
when(namespaceService.findNamespaceBOs(appId2, Env.DEV, clusterName2, fillItemDetail, false)).thenReturn(app2Cluster2Namespace);
153165

154166
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
155167

@@ -186,10 +198,12 @@ public void testNamespaceExportImport() throws FileNotFoundException {
186198

187199
verify(clusterService, times(4)).createCluster(any(), any());
188200

189-
verify(namespaceService, times(6)).createNamespace(any(), any());
190-
verify(roleInitializationService,times(6)).initNamespaceRoles(any(), any(), anyString());
191-
verify(roleInitializationService,times(6)).initNamespaceEnvRoles(any(), any(), anyString());
192-
verify(itemService, times(12)).createItem(any(), any(), any(), any(), any());
201+
if(fillItemDetail){
202+
verify(namespaceService, times(6)).createNamespace(any(), any());
203+
verify(roleInitializationService,times(6)).initNamespaceRoles(any(), any(), anyString());
204+
verify(roleInitializationService,times(6)).initNamespaceEnvRoles(any(), any(), anyString());
205+
verify(itemService, times(12)).createItem(any(), any(), any(), any(), any());
206+
}
193207
}
194208

195209
private App genApp(String name, String appId, String orgId, String orgName) {

apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/NamespaceServiceTest.java

Lines changed: 55 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -227,14 +227,60 @@ public void testDeleteEmptyNamespace() {
227227

228228
@Test
229229
public void testLoadNamespaceBO() {
230-
String branchName = "branch";
231-
NamespaceDTO namespaceDTO = createNamespace(testAppId, branchName, testNamespaceName);
232-
when(namespaceAPI.loadNamespace(any(), any(), any(), any())).thenReturn(namespaceDTO);
230+
boolean fillItemDetail = true;
231+
NamespaceBO namespaceBO = loadNamespaceBO(fillItemDetail);
232+
233+
List<String> namespaceKey2 = namespaceBO.getItems().stream().map(s -> s.getItem().getKey()).collect(Collectors.toList());
234+
assertThat(namespaceBO.getItemModifiedCnt()).isEqualTo(2);
235+
assertThat(namespaceBO.getItems().size()).isEqualTo(2);
236+
assertThat(namespaceKey2).isEqualTo(Arrays.asList("k1", "k2"));
237+
}
238+
239+
@Test
240+
public void testLoadNamespaceBOWithoutItemDetail() {
241+
boolean fillItemDetail = false;
242+
NamespaceBO namespaceBO = loadNamespaceBO(fillItemDetail);
243+
244+
assertThat(namespaceBO.getItems().size()).isEqualTo(0);
245+
}
233246

247+
private NamespaceBO loadNamespaceBO(boolean fillItemDetail) {
248+
when(namespaceAPI.loadNamespace(any(), any(), any(), any())).thenReturn(createNamespace(testAppId, "branch", testNamespaceName));
249+
when(releaseService.loadLatestRelease(any(), any(), any(), any())).thenReturn(createReleaseDTO());
250+
when(itemService.findItems(any(), any(), any(), any())).thenReturn(createItems());
251+
when(itemService.findDeletedItems(any(), any(), any(), any())).thenReturn(createDeletedItems());
252+
253+
NamespaceBO namespaceBO1 = namespaceService.loadNamespaceBO(testAppId, testEnv, testClusterName, testNamespaceName);
254+
List<String> namespaceKey1 = namespaceBO1.getItems().stream().map(s -> s.getItem().getKey()).collect(Collectors.toList());
255+
assertThat(namespaceBO1.getItemModifiedCnt()).isEqualTo(3);
256+
assertThat(namespaceBO1.getItems().size()).isEqualTo(3);
257+
assertThat(namespaceKey1).isEqualTo(Arrays.asList("k1", "k2", "k3"));
258+
259+
return namespaceService.loadNamespaceBO(testAppId, testEnv, testClusterName, testNamespaceName, fillItemDetail, false);
260+
}
261+
262+
@Test
263+
public void testFindPublicNamespaceForAssociatedNamespace() {
264+
when(namespaceAPI.findPublicNamespaceForAssociatedNamespace(any(), any(), any(), any())).thenReturn(createNamespace(testAppId, "branch", testNamespaceName));
265+
when(releaseService.loadLatestRelease(any(), any(), any(), any())).thenReturn(createReleaseDTO());
266+
when(itemService.findItems(any(), any(), any(), any())).thenReturn(createItems());
267+
when(itemService.findDeletedItems(any(), any(), any(), any())).thenReturn(createDeletedItems());
268+
269+
NamespaceBO namespaceBO = namespaceService.findPublicNamespaceForAssociatedNamespace(testEnv, testAppId, testClusterName, testNamespaceName);
270+
271+
List<String> namespaceKey2 = namespaceBO.getItems().stream().map(s -> s.getItem().getKey()).collect(Collectors.toList());
272+
assertThat(namespaceBO.getItemModifiedCnt()).isEqualTo(3);
273+
assertThat(namespaceBO.getItems().size()).isEqualTo(3);
274+
assertThat(namespaceKey2).isEqualTo(Arrays.asList("k1", "k2", "k3"));
275+
}
276+
277+
private ReleaseDTO createReleaseDTO() {
234278
ReleaseDTO releaseDTO = new ReleaseDTO();
235279
releaseDTO.setConfigurations("{\"k1\":\"k1\",\"k2\":\"k2\", \"k3\":\"\"}");
236-
when(releaseService.loadLatestRelease(any(), any(), any(), any())).thenReturn(releaseDTO);
280+
return releaseDTO;
281+
}
237282

283+
private List<ItemDTO> createItems() {
238284
List<ItemDTO> itemDTOList = Lists.newArrayList();
239285
ItemDTO itemDTO1 = new ItemDTO();
240286
itemDTO1.setId(1);
@@ -249,27 +295,18 @@ public void testLoadNamespaceBO() {
249295
itemDTO2.setKey("k2");
250296
itemDTO2.setValue(String.valueOf(2));
251297
itemDTOList.add(itemDTO2);
252-
when(itemService.findItems(any(), any(), any(), any())).thenReturn(itemDTOList);
253298

299+
return itemDTOList;
300+
}
301+
302+
private List<ItemDTO> createDeletedItems() {
254303
List<ItemDTO> deletedItemDTOList = Lists.newArrayList();
255304
ItemDTO deletedItemDTO = new ItemDTO();
256305
deletedItemDTO.setId(3);
257306
deletedItemDTO.setNamespaceId(3);
258307
deletedItemDTO.setKey("k3");
259308
deletedItemDTOList.add(deletedItemDTO);
260-
when(itemService.findDeletedItems(any(), any(), any(), any())).thenReturn(deletedItemDTOList);
261-
262-
NamespaceBO namespaceBO1 = namespaceService.loadNamespaceBO(testAppId, testEnv, testClusterName, testNamespaceName);
263-
List<String> namespaceKey1 = namespaceBO1.getItems().stream().map(s -> s.getItem().getKey()).collect(Collectors.toList());
264-
assertThat(namespaceBO1.getItemModifiedCnt()).isEqualTo(3);
265-
assertThat(namespaceBO1.getItems().size()).isEqualTo(3);
266-
assertThat(namespaceKey1).isEqualTo(Arrays.asList("k1", "k2", "k3"));
267-
268-
NamespaceBO namespaceBO2 = namespaceService.loadNamespaceBO(testAppId, testEnv, testClusterName, testNamespaceName, false);
269-
List<String> namespaceKey2 = namespaceBO2.getItems().stream().map(s -> s.getItem().getKey()).collect(Collectors.toList());
270-
assertThat(namespaceBO2.getItemModifiedCnt()).isEqualTo(2);
271-
assertThat(namespaceBO2.getItems().size()).isEqualTo(2);
272-
assertThat(namespaceKey2).isEqualTo(Arrays.asList("k1", "k2"));
309+
return deletedItemDTOList;
273310
}
274311

275312
private AppNamespace createAppNamespace(String appId, String name, boolean isPublic) {

0 commit comments

Comments
 (0)