Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wrr-cat
apollo
提交
0fd48471
apollo
项目概览
wrr-cat
/
apollo
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
apollo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0fd48471
编写于
3月 09, 2017
作者:
L
lepdou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bugfix: do not unlock branch's lock when redo operate
上级
75878e16
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
78 addition
and
21 deletion
+78
-21
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspect.java
...mework/apollo/adminservice/aop/NamespaceUnlockAspect.java
+31
-21
apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspectTest.java
...rk/apollo/adminservice/aop/NamespaceUnlockAspectTest.java
+47
-0
未找到文件。
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspect.java
浏览文件 @
0fd48471
package
com.ctrip.framework.apollo.adminservice.aop
;
package
com.ctrip.framework.apollo.adminservice.aop
;
import
com.google.common.collect.MapDifference
;
import
com.google.common.collect.Maps
;
import
com.google.common.collect.Maps
;
import
com.google.gson.Gson
;
import
com.google.gson.Gson
;
...
@@ -35,7 +36,6 @@ import java.util.Objects;
...
@@ -35,7 +36,6 @@ import java.util.Objects;
* --------------------------------------------
* --------------------------------------------
* First operate: change k1 = v2 (lock namespace)
* First operate: change k1 = v2 (lock namespace)
* Second operate: change k1 = v1 (unlock namespace)
* Second operate: change k1 = v1 (unlock namespace)
*
*/
*/
@Aspect
@Aspect
@Component
@Component
...
@@ -106,42 +106,52 @@ public class NamespaceUnlockAspect {
...
@@ -106,42 +106,52 @@ public class NamespaceUnlockAspect {
}
}
Map
<
String
,
String
>
releasedConfiguration
=
gson
.
fromJson
(
release
.
getConfigurations
(),
GsonType
.
CONFIG
);
Map
<
String
,
String
>
releasedConfiguration
=
gson
.
fromJson
(
release
.
getConfigurations
(),
GsonType
.
CONFIG
);
Map
<
String
,
String
>
configurationFromItems
=
Maps
.
newHashMap
();
Map
<
String
,
String
>
configurationFromItems
=
generateConfigurationFromItems
(
namespace
,
items
);
MapDifference
<
String
,
String
>
difference
=
Maps
.
difference
(
releasedConfiguration
,
configurationFromItems
);
return
!
difference
.
areEqual
();
}
private
boolean
hasNormalItems
(
List
<
Item
>
items
)
{
for
(
Item
item
:
items
)
{
for
(
Item
item
:
items
)
{
String
key
=
item
.
getKey
();
if
(!
StringUtils
.
isEmpty
(
item
.
getKey
()))
{
if
(
StringUtils
.
isBlank
(
key
))
{
continue
;
}
//added
if
(
releasedConfiguration
.
get
(
key
)
==
null
)
{
return
true
;
return
true
;
}
}
configurationFromItems
.
put
(
key
,
item
.
getValue
());
}
}
for
(
Map
.
Entry
<
String
,
String
>
entry
:
releasedConfiguration
.
entrySet
())
{
return
false
;
String
key
=
entry
.
getKey
();
}
String
value
=
entry
.
getValue
();
private
Map
<
String
,
String
>
generateConfigurationFromItems
(
Namespace
namespace
,
List
<
Item
>
namespaceItems
)
{
//deleted or modified
Map
<
String
,
String
>
configurationFromItems
=
Maps
.
newHashMap
();
if
(!
Objects
.
equals
(
configurationFromItems
.
get
(
key
),
value
))
{
return
true
;
}
Namespace
parentNamespace
=
namespaceService
.
findParentNamespace
(
namespace
);
//parent namespace
if
(
parentNamespace
==
null
)
{
generateMapFromItems
(
namespaceItems
,
configurationFromItems
);
}
else
{
//child namespace
List
<
Item
>
parentItems
=
itemService
.
findItems
(
parentNamespace
.
getId
());
generateMapFromItems
(
parentItems
,
configurationFromItems
);
generateMapFromItems
(
namespaceItems
,
configurationFromItems
);
}
}
return
false
;
return
configurationFromItems
;
}
}
private
boolean
hasNormalItems
(
List
<
Item
>
i
tems
)
{
private
Map
<
String
,
String
>
generateMapFromItems
(
List
<
Item
>
items
,
Map
<
String
,
String
>
configurationFromI
tems
)
{
for
(
Item
item
:
items
)
{
for
(
Item
item
:
items
)
{
if
(!
StringUtils
.
isEmpty
(
item
.
getKey
()))
{
String
key
=
item
.
getKey
();
return
true
;
if
(
StringUtils
.
isBlank
(
key
))
{
continue
;
}
}
configurationFromItems
.
put
(
key
,
item
.
getValue
());
}
}
return
false
;
return
configurationFromItems
;
}
}
}
}
apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceUnlockAspectTest.java
浏览文件 @
0fd48471
...
@@ -4,6 +4,7 @@ import com.ctrip.framework.apollo.biz.entity.Item;
...
@@ -4,6 +4,7 @@ import com.ctrip.framework.apollo.biz.entity.Item;
import
com.ctrip.framework.apollo.biz.entity.Namespace
;
import
com.ctrip.framework.apollo.biz.entity.Namespace
;
import
com.ctrip.framework.apollo.biz.entity.Release
;
import
com.ctrip.framework.apollo.biz.entity.Release
;
import
com.ctrip.framework.apollo.biz.service.ItemService
;
import
com.ctrip.framework.apollo.biz.service.ItemService
;
import
com.ctrip.framework.apollo.biz.service.NamespaceService
;
import
com.ctrip.framework.apollo.biz.service.ReleaseService
;
import
com.ctrip.framework.apollo.biz.service.ReleaseService
;
import
org.junit.Assert
;
import
org.junit.Assert
;
...
@@ -26,6 +27,8 @@ public class NamespaceUnlockAspectTest {
...
@@ -26,6 +27,8 @@ public class NamespaceUnlockAspectTest {
private
ReleaseService
releaseService
;
private
ReleaseService
releaseService
;
@Mock
@Mock
private
ItemService
itemService
;
private
ItemService
itemService
;
@Mock
private
NamespaceService
namespaceService
;
@InjectMocks
@InjectMocks
private
NamespaceUnlockAspect
namespaceUnlockAspect
;
private
NamespaceUnlockAspect
namespaceUnlockAspect
;
...
@@ -55,6 +58,7 @@ public class NamespaceUnlockAspectTest {
...
@@ -55,6 +58,7 @@ public class NamespaceUnlockAspectTest {
when
(
releaseService
.
findLatestActiveRelease
(
namespace
)).
thenReturn
(
release
);
when
(
releaseService
.
findLatestActiveRelease
(
namespace
)).
thenReturn
(
release
);
when
(
itemService
.
findItems
(
namespaceId
)).
thenReturn
(
items
);
when
(
itemService
.
findItems
(
namespaceId
)).
thenReturn
(
items
);
when
(
namespaceService
.
findParentNamespace
(
namespace
)).
thenReturn
(
null
);
boolean
isModified
=
namespaceUnlockAspect
.
isModified
(
namespace
);
boolean
isModified
=
namespaceUnlockAspect
.
isModified
(
namespace
);
...
@@ -71,6 +75,7 @@ public class NamespaceUnlockAspectTest {
...
@@ -71,6 +75,7 @@ public class NamespaceUnlockAspectTest {
when
(
releaseService
.
findLatestActiveRelease
(
namespace
)).
thenReturn
(
release
);
when
(
releaseService
.
findLatestActiveRelease
(
namespace
)).
thenReturn
(
release
);
when
(
itemService
.
findItems
(
namespaceId
)).
thenReturn
(
items
);
when
(
itemService
.
findItems
(
namespaceId
)).
thenReturn
(
items
);
when
(
namespaceService
.
findParentNamespace
(
namespace
)).
thenReturn
(
null
);
boolean
isModified
=
namespaceUnlockAspect
.
isModified
(
namespace
);
boolean
isModified
=
namespaceUnlockAspect
.
isModified
(
namespace
);
...
@@ -87,12 +92,54 @@ public class NamespaceUnlockAspectTest {
...
@@ -87,12 +92,54 @@ public class NamespaceUnlockAspectTest {
when
(
releaseService
.
findLatestActiveRelease
(
namespace
)).
thenReturn
(
release
);
when
(
releaseService
.
findLatestActiveRelease
(
namespace
)).
thenReturn
(
release
);
when
(
itemService
.
findItems
(
namespaceId
)).
thenReturn
(
items
);
when
(
itemService
.
findItems
(
namespaceId
)).
thenReturn
(
items
);
when
(
namespaceService
.
findParentNamespace
(
namespace
)).
thenReturn
(
null
);
boolean
isModified
=
namespaceUnlockAspect
.
isModified
(
namespace
);
boolean
isModified
=
namespaceUnlockAspect
.
isModified
(
namespace
);
Assert
.
assertTrue
(
isModified
);
Assert
.
assertTrue
(
isModified
);
}
}
@Test
public
void
testChildNamespaceModified
()
{
long
childNamespaceId
=
1
,
parentNamespaceId
=
2
;
Namespace
childNamespace
=
createNamespace
(
childNamespaceId
);
Namespace
parentNamespace
=
createNamespace
(
childNamespaceId
);
Release
childRelease
=
createRelease
(
"{\"k1\":\"v1\", \"k2\":\"v2\"}"
);
List
<
Item
>
childItems
=
Arrays
.
asList
(
createItem
(
"k1"
,
"v3"
));
List
<
Item
>
parentItems
=
Arrays
.
asList
(
createItem
(
"k1"
,
"v1"
),
createItem
(
"k2"
,
"v2"
));
when
(
releaseService
.
findLatestActiveRelease
(
childNamespace
)).
thenReturn
(
childRelease
);
when
(
itemService
.
findItems
(
childNamespaceId
)).
thenReturn
(
childItems
);
when
(
itemService
.
findItems
(
parentNamespaceId
)).
thenReturn
(
parentItems
);
when
(
namespaceService
.
findParentNamespace
(
parentNamespace
)).
thenReturn
(
parentNamespace
);
boolean
isModified
=
namespaceUnlockAspect
.
isModified
(
parentNamespace
);
Assert
.
assertTrue
(
isModified
);
}
@Test
public
void
testChildNamespaceNotModified
()
{
long
childNamespaceId
=
1
,
parentNamespaceId
=
2
;
Namespace
childNamespace
=
createNamespace
(
childNamespaceId
);
Namespace
parentNamespace
=
createNamespace
(
childNamespaceId
);
Release
childRelease
=
createRelease
(
"{\"k1\":\"v1\", \"k2\":\"v2\"}"
);
List
<
Item
>
childItems
=
Arrays
.
asList
(
createItem
(
"k1"
,
"v1"
));
List
<
Item
>
parentItems
=
Arrays
.
asList
(
createItem
(
"k2"
,
"v2"
));
when
(
releaseService
.
findLatestActiveRelease
(
childNamespace
)).
thenReturn
(
childRelease
);
when
(
itemService
.
findItems
(
childNamespaceId
)).
thenReturn
(
childItems
);
when
(
itemService
.
findItems
(
parentNamespaceId
)).
thenReturn
(
parentItems
);
when
(
namespaceService
.
findParentNamespace
(
parentNamespace
)).
thenReturn
(
parentNamespace
);
boolean
isModified
=
namespaceUnlockAspect
.
isModified
(
parentNamespace
);
Assert
.
assertTrue
(
isModified
);
}
private
Namespace
createNamespace
(
long
namespaceId
)
{
private
Namespace
createNamespace
(
long
namespaceId
)
{
Namespace
namespace
=
new
Namespace
();
Namespace
namespace
=
new
Namespace
();
namespace
.
setId
(
namespaceId
);
namespace
.
setId
(
namespaceId
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录