diff --git a/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspect.java b/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspect.java index 24f531208f4d447dc3d23442ca0d46451b135cc6..bdeef591cf48d4e172f9cf3855a5d9e8af047175 100644 --- a/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspect.java +++ b/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspect.java @@ -133,9 +133,10 @@ public class NamespaceUnlockAspect { if (parentNamespace == null) { generateMapFromItems(namespaceItems, configurationFromItems); } else {//child namespace - List parentItems = itemService.findItems(parentNamespace.getId()); - - generateMapFromItems(parentItems, configurationFromItems); + Release parentRelease = releaseService.findLatestActiveRelease(parentNamespace); + if (parentRelease != null) { + configurationFromItems = gson.fromJson(parentRelease.getConfigurations(), GsonType.CONFIG); + } generateMapFromItems(namespaceItems, configurationFromItems); } diff --git a/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspectTest.java b/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspectTest.java index cc3f4d2ddd87ee7334e18d0860ff6e48ca77b020..28ff81320ec9fb43d89cc8043273a4351de60907 100644 --- a/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspectTest.java +++ b/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspectTest.java @@ -103,18 +103,18 @@ public class NamespaceUnlockAspectTest { public void testChildNamespaceModified() { long childNamespaceId = 1, parentNamespaceId = 2; Namespace childNamespace = createNamespace(childNamespaceId); - Namespace parentNamespace = createNamespace(childNamespaceId); + Namespace parentNamespace = createNamespace(parentNamespaceId); Release childRelease = createRelease("{\"k1\":\"v1\", \"k2\":\"v2\"}"); List childItems = Arrays.asList(createItem("k1", "v3")); - List parentItems = Arrays.asList(createItem("k1", "v1"), createItem("k2", "v2")); + Release parentRelease = createRelease("{\"k1\":\"v1\", \"k2\":\"v2\"}"); when(releaseService.findLatestActiveRelease(childNamespace)).thenReturn(childRelease); + when(releaseService.findLatestActiveRelease(parentNamespace)).thenReturn(parentRelease); when(itemService.findItems(childNamespaceId)).thenReturn(childItems); - when(itemService.findItems(parentNamespaceId)).thenReturn(parentItems); - when(namespaceService.findParentNamespace(parentNamespace)).thenReturn(parentNamespace); + when(namespaceService.findParentNamespace(childNamespace)).thenReturn(parentNamespace); - boolean isModified = namespaceUnlockAspect.isModified(parentNamespace); + boolean isModified = namespaceUnlockAspect.isModified(childNamespace); Assert.assertTrue(isModified); } @@ -123,18 +123,37 @@ public class NamespaceUnlockAspectTest { public void testChildNamespaceNotModified() { long childNamespaceId = 1, parentNamespaceId = 2; Namespace childNamespace = createNamespace(childNamespaceId); - Namespace parentNamespace = createNamespace(childNamespaceId); + Namespace parentNamespace = createNamespace(parentNamespaceId); - Release childRelease = createRelease("{\"k1\":\"v1\", \"k2\":\"v2\"}"); - List childItems = Arrays.asList(createItem("k1", "v1")); - List parentItems = Arrays.asList(createItem("k2", "v2")); + Release childRelease = createRelease("{\"k1\":\"v3\", \"k2\":\"v2\"}"); + List childItems = Arrays.asList(createItem("k1", "v3")); + Release parentRelease = createRelease("{\"k1\":\"v1\", \"k2\":\"v2\"}"); + + when(releaseService.findLatestActiveRelease(childNamespace)).thenReturn(childRelease); + when(releaseService.findLatestActiveRelease(parentNamespace)).thenReturn(parentRelease); + when(itemService.findItems(childNamespaceId)).thenReturn(childItems); + when(namespaceService.findParentNamespace(childNamespace)).thenReturn(parentNamespace); + + boolean isModified = namespaceUnlockAspect.isModified(childNamespace); + + Assert.assertFalse(isModified); + } + + @Test + public void testParentNamespaceNotReleased() { + long childNamespaceId = 1, parentNamespaceId = 2; + Namespace childNamespace = createNamespace(childNamespaceId); + Namespace parentNamespace = createNamespace(parentNamespaceId); + + Release childRelease = createRelease("{\"k1\":\"v3\", \"k2\":\"v2\"}"); + List childItems = Arrays.asList(createItem("k1", "v2"), createItem("k2", "v2")); when(releaseService.findLatestActiveRelease(childNamespace)).thenReturn(childRelease); + when(releaseService.findLatestActiveRelease(parentNamespace)).thenReturn(null); when(itemService.findItems(childNamespaceId)).thenReturn(childItems); - when(itemService.findItems(parentNamespaceId)).thenReturn(parentItems); - when(namespaceService.findParentNamespace(parentNamespace)).thenReturn(parentNamespace); + when(namespaceService.findParentNamespace(childNamespace)).thenReturn(parentNamespace); - boolean isModified = namespaceUnlockAspect.isModified(parentNamespace); + boolean isModified = namespaceUnlockAspect.isModified(childNamespace); Assert.assertTrue(isModified); }