Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Apache RocketMQ
Rocketmq
提交
db77463b
R
Rocketmq
项目概览
Apache RocketMQ
/
Rocketmq
上一次同步 大约 3 年
通知
267
Star
16139
Fork
68
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rocketmq
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
db77463b
编写于
8月 29, 2019
作者:
H
huzongtang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[ISSUE#1429]Update Broker's Topic Read or Write Perm failed.
上级
74ffae6d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
64 addition
and
15 deletion
+64
-15
tools/src/main/java/org/apache/rocketmq/tools/command/topic/UpdateTopicPermSubCommand.java
...cketmq/tools/command/topic/UpdateTopicPermSubCommand.java
+64
-15
未找到文件。
tools/src/main/java/org/apache/rocketmq/tools/command/topic/UpdateTopicPermSubCommand.java
浏览文件 @
db77463b
...
...
@@ -16,12 +16,16 @@
*/
package
org.apache.rocketmq.tools.command.topic
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
org.apache.commons.cli.CommandLine
;
import
org.apache.commons.cli.Option
;
import
org.apache.commons.cli.Options
;
import
org.apache.rocketmq.common.MixAll
;
import
org.apache.rocketmq.common.TopicConfig
;
import
org.apache.rocketmq.common.protocol.route.BrokerData
;
import
org.apache.rocketmq.common.protocol.route.QueueData
;
import
org.apache.rocketmq.common.protocol.route.TopicRouteData
;
import
org.apache.rocketmq.remoting.RPCHook
;
...
...
@@ -67,46 +71,91 @@ public class UpdateTopicPermSubCommand implements SubCommand {
@Override
public
void
execute
(
final
CommandLine
commandLine
,
final
Options
options
,
RPCHook
rpcHook
)
throws
SubCommandException
{
DefaultMQAdminExt
defaultMQAdminExt
=
new
DefaultMQAdminExt
(
rpcHook
);
defaultMQAdminExt
.
setInstanceName
(
Long
.
toString
(
System
.
currentTimeMillis
()));
try
{
defaultMQAdminExt
.
start
();
TopicConfig
topicConfig
=
new
TopicConfig
();
String
topic
=
commandLine
.
getOptionValue
(
't'
).
trim
();
TopicConfig
topicConfig
=
new
TopicConfig
();
String
topic
;
if
(
commandLine
.
hasOption
(
't'
))
{
topic
=
commandLine
.
getOptionValue
(
't'
).
trim
();
}
else
{
System
.
out
.
printf
(
"topic paramter value must be need.%n"
);
return
;
}
TopicRouteData
topicRouteData
=
defaultMQAdminExt
.
examineTopicRouteInfo
(
topic
);
assert
topicRouteData
!=
null
;
List
<
QueueData
>
queueDatas
=
topicRouteData
.
getQueueDatas
();
assert
queueDatas
!=
null
&&
queueDatas
.
size
()
>
0
;
QueueData
queueData
=
queueDatas
.
get
(
0
);
topicConfig
.
setTopicName
(
topic
);
topicConfig
.
setWriteQueueNums
(
queueData
.
getWriteQueueNums
());
topicConfig
.
setReadQueueNums
(
queueData
.
getReadQueueNums
());
topicConfig
.
setPerm
(
queueData
.
getPerm
());
topicConfig
.
setTopicSysFlag
(
queueData
.
getTopicSynFlag
());
//new perm
int
perm
=
Integer
.
parseInt
(
commandLine
.
getOptionValue
(
'p'
).
trim
());
int
oldPerm
=
topicConfig
.
getPerm
();
if
(
perm
==
oldPerm
)
{
System
.
out
.
printf
(
"new perm equals to the old one!%n"
);
int
perm
;
if
(
commandLine
.
hasOption
(
'p'
))
{
perm
=
Integer
.
parseInt
(
commandLine
.
getOptionValue
(
'p'
).
trim
());
}
else
{
System
.
out
.
printf
(
"perm paramter value must be need.%n"
);
return
;
}
topicConfig
.
setPerm
(
perm
);
if
(
commandLine
.
hasOption
(
'b'
))
{
String
addr
=
commandLine
.
getOptionValue
(
'b'
).
trim
();
defaultMQAdminExt
.
createAndUpdateTopicConfig
(
addr
,
topicConfig
);
System
.
out
.
printf
(
"update topic perm from %s to %s in %s success.%n"
,
oldPerm
,
perm
,
addr
);
System
.
out
.
printf
(
"%s%n"
,
topicConfig
);
return
;
String
brokerAddr
=
commandLine
.
getOptionValue
(
'b'
).
trim
();
List
<
BrokerData
>
brokerDatas
=
topicRouteData
.
getBrokerDatas
();
boolean
isBrokerLegal
=
false
;
String
brokerName
=
null
;
for
(
BrokerData
data
:
brokerDatas
)
{
HashMap
<
Long
,
String
>
brokerAddrs
=
data
.
getBrokerAddrs
();
if
(
brokerAddrs
==
null
||
brokerAddrs
.
size
()
==
0
)
{
continue
;
}
for
(
Map
.
Entry
<
Long
,
String
>
entry
:
brokerAddrs
.
entrySet
())
{
if
(
brokerAddr
.
equals
(
entry
.
getValue
())
&&
MixAll
.
MASTER_ID
==
entry
.
getKey
())
{
isBrokerLegal
=
true
;
brokerName
=
data
.
getBrokerName
();
break
;
}
}
if
(
isBrokerLegal
)
{
break
;
}
}
if
(
isBrokerLegal
&&
brokerName
!=
null
)
{
List
<
QueueData
>
queueDataList
=
topicRouteData
.
getQueueDatas
();
assert
queueDataList
!=
null
&&
queueDataList
.
size
()
>
0
;
int
oldPerm
=
0
;
for
(
QueueData
data
:
queueDataList
)
{
if
(
brokerName
.
equals
(
data
.
getBrokerName
()))
{
oldPerm
=
data
.
getPerm
();
if
(
perm
==
oldPerm
)
{
System
.
out
.
printf
(
"new perm equals to the old one!%n"
);
return
;
}
break
;
}
}
defaultMQAdminExt
.
createAndUpdateTopicConfig
(
brokerAddr
,
topicConfig
);
System
.
out
.
printf
(
"update topic perm from %s to %s in %s success.%n"
,
oldPerm
,
perm
,
brokerAddr
);
System
.
out
.
printf
(
"%s.%n"
,
topicConfig
);
return
;
}
else
{
System
.
out
.
printf
(
"updateTopicPerm error broker not exit or broker is not master!.%n"
);
return
;
}
}
else
if
(
commandLine
.
hasOption
(
'c'
))
{
String
clusterName
=
commandLine
.
getOptionValue
(
'c'
).
trim
();
Set
<
String
>
masterSet
=
CommandUtil
.
fetchMasterAddrByClusterName
(
defaultMQAdminExt
,
clusterName
);
for
(
String
addr
:
masterSet
)
{
defaultMQAdminExt
.
createAndUpdateTopicConfig
(
addr
,
topicConfig
);
System
.
out
.
printf
(
"update topic perm from %s to %s in %s success.%n"
,
oldPerm
,
perm
,
addr
);
System
.
out
.
printf
(
"update topic perm from %s to %s in %s success.%n"
,
queueData
.
getPerm
()
,
perm
,
addr
);
}
return
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录