Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Kwan的解忧杂货铺@新空间代码工作室
Rocketmq
提交
e9cafe9f
R
Rocketmq
项目概览
Kwan的解忧杂货铺@新空间代码工作室
/
Rocketmq
与 Fork 源项目一致
Fork自
Apache RocketMQ / Rocketmq
通知
1
Star
0
Fork
0
代码
文件
提交
分支
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看板
提交
e9cafe9f
编写于
11月 18, 2021
作者:
D
dongeforever
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Polish the remapping logic
上级
25a588b8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
38 addition
and
27 deletion
+38
-27
tools/src/main/java/org/apache/rocketmq/tools/command/topic/RemappingStaticTopicSubCommand.java
...q/tools/command/topic/RemappingStaticTopicSubCommand.java
+37
-26
tools/src/main/java/org/apache/rocketmq/tools/command/topic/UpdateStaticTopicSubCommand.java
...etmq/tools/command/topic/UpdateStaticTopicSubCommand.java
+1
-1
未找到文件。
tools/src/main/java/org/apache/rocketmq/tools/command/topic/RemappingStaticTopicSubCommand.java
浏览文件 @
e9cafe9f
...
@@ -194,6 +194,7 @@ public class RemappingStaticTopicSubCommand implements SubCommand {
...
@@ -194,6 +194,7 @@ public class RemappingStaticTopicSubCommand implements SubCommand {
//the check is ok, now do the mapping allocation
//the check is ok, now do the mapping allocation
int
maxNum
=
maxEpochAndNum
.
getValue
();
int
maxNum
=
maxEpochAndNum
.
getValue
();
long
maxEpoch
=
maxEpochAndNum
.
getKey
();
TopicQueueMappingUtils
.
MappingAllocator
allocator
=
TopicQueueMappingUtils
.
buildMappingAllocator
(
new
HashMap
<>(),
brokers
.
stream
().
collect
(
Collectors
.
toMap
(
x
->
x
,
x
->
0
)));
TopicQueueMappingUtils
.
MappingAllocator
allocator
=
TopicQueueMappingUtils
.
buildMappingAllocator
(
new
HashMap
<>(),
brokers
.
stream
().
collect
(
Collectors
.
toMap
(
x
->
x
,
x
->
0
)));
allocator
.
upToNum
(
maxNum
);
allocator
.
upToNum
(
maxNum
);
Map
<
String
,
Integer
>
expectedBrokerNumMap
=
allocator
.
getBrokerNumMap
();
Map
<
String
,
Integer
>
expectedBrokerNumMap
=
allocator
.
getBrokerNumMap
();
...
@@ -217,40 +218,50 @@ public class RemappingStaticTopicSubCommand implements SubCommand {
...
@@ -217,40 +218,50 @@ public class RemappingStaticTopicSubCommand implements SubCommand {
});
});
expectedBrokerNumMap
.
forEach
((
broker
,
queueNum
)
->
{
expectedBrokerNumMap
.
forEach
((
broker
,
queueNum
)
->
{
for
(
int
i
=
0
;
i
<
queueNum
;
i
++)
{
for
(
int
i
=
0
;
i
<
queueNum
;
i
++)
{
expectedIdToBroker
.
put
(
waitAssignQueues
.
poll
(),
broker
);
Integer
queueId
=
waitAssignQueues
.
poll
();
assert
queueId
!=
null
;
expectedIdToBroker
.
put
(
queueId
,
broker
);
}
}
});
});
Set
<
Broker
>
//Now construct the remapping info
//Now construct the remapping info
Set
<
String
>
brokersToMapOut
=
new
HashSet
<>();
//construct the topic configAndMapping
Set
<
String
>
brokersToMapIn
=
new
HashSet
<>();
long
epoch
=
Math
.
max
(
maxEpochAndNum
.
getKey
()
+
1000
,
System
.
currentTimeMillis
());
for
(
Map
.
Entry
<
Integer
,
String
>
mapEntry
:
expectedIdToBroker
.
entrySet
())
{
for
(
Map
.
Entry
<
Integer
,
String
>
e
:
expectedIdToBroker
.
entrySet
())
{
Integer
queueId
=
mapEntry
.
getKey
();
Integer
queueId
=
e
.
getKey
();
String
broker
=
mapEntry
.
getValue
();
String
broker
=
e
.
getValue
(
);
TopicQueueMappingOne
topicQueueMappingOne
=
globalIdMap
.
get
(
queueId
);
if
(
globalIdMap
.
containsKey
(
queueId
))
{
assert
topicQueueMappingOne
!=
null
;
//ignore the exited
if
(
topicQueueMappingOne
.
getBname
().
equals
(
broker
))
{
continue
;
continue
;
}
}
TopicConfigAndQueueMapping
configMapping
;
//remapping
if
(!
existedTopicConfigMap
.
containsKey
(
broker
))
{
String
mapInBroker
=
broker
;
TopicConfig
topicConfig
=
new
TopicConfig
(
topic
,
1
,
1
);
String
mapOutBroker
=
topicQueueMappingOne
.
getBname
();
TopicQueueMappingDetail
mappingDetail
=
new
TopicQueueMappingDetail
(
topic
,
0
,
broker
,
epoch
);
brokersToMapIn
.
add
(
mapInBroker
);
configMapping
=
new
TopicConfigAndQueueMapping
(
topicConfig
,
mappingDetail
);
brokersToMapOut
.
add
(
mapOutBroker
);
existedTopicConfigMap
.
put
(
broker
,
configMapping
);
TopicConfigAndQueueMapping
mapInConfig
=
existedTopicConfigMap
.
get
(
mapInBroker
);
}
else
{
TopicConfigAndQueueMapping
mapOutConfig
=
existedTopicConfigMap
.
get
(
mapOutBroker
);
configMapping
=
existedTopicConfigMap
.
get
(
broker
);
configMapping
.
setWriteQueueNums
(
configMapping
.
getWriteQueueNums
()
+
1
);
mapInConfig
.
setWriteQueueNums
(
mapInConfig
.
getWriteQueueNums
()
+
1
);
configMapping
.
setWriteQueueNums
(
configMapping
.
getWriteQueueNums
()
+
1
);
mapInConfig
.
setWriteQueueNums
(
mapInConfig
.
getWriteQueueNums
()
+
1
);
configMapping
.
getMappingDetail
().
setEpoch
(
epoch
);
configMapping
.
getMappingDetail
().
setTotalQueues
(
0
);
List
<
LogicQueueMappingItem
>
items
=
new
ArrayList
<>(
topicQueueMappingOne
.
getItems
());
}
LogicQueueMappingItem
last
=
items
.
get
(
items
.
size
()
-
1
);
LogicQueueMappingItem
mappingItem
=
new
LogicQueueMappingItem
(
0
,
configMapping
.
getWriteQueueNums
()
-
1
,
broker
,
0
,
0
,
-
1
,
-
1
,
-
1
);
items
.
add
(
new
LogicQueueMappingItem
(
last
.
getGen
()
+
1
,
mapInConfig
.
getWriteQueueNums
()
-
1
,
mapInBroker
,
-
1
,
0
,
-
1
,
-
1
,
-
1
));
configMapping
.
getMappingDetail
().
putMappingInfo
(
queueId
,
ImmutableList
.
of
(
mappingItem
));
ImmutableList
<
LogicQueueMappingItem
>
resultItems
=
ImmutableList
.
copyOf
(
items
);
mapInConfig
.
getMappingDetail
().
putMappingInfo
(
queueId
,
resultItems
);
mapOutConfig
.
getMappingDetail
().
putMappingInfo
(
queueId
,
resultItems
);
}
}
long
epoch
=
Math
.
max
(
maxEpochAndNum
.
getKey
()
+
1000
,
System
.
currentTimeMillis
());
existedTopicConfigMap
.
values
().
forEach
(
configMapping
->
{
configMapping
.
getMappingDetail
().
setEpoch
(
epoch
);
configMapping
.
getMappingDetail
().
setTotalQueues
(
maxNum
);
});
//decide the new offset
//If some succeed, and others fail, it will cause inconsistent data
//If some succeed, and others fail, it will cause inconsistent data
for
(
Map
.
Entry
<
String
,
TopicConfigAndQueueMapping
>
entry
:
existedTopicConfigMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
TopicConfigAndQueueMapping
>
entry
:
existedTopicConfigMap
.
entrySet
())
{
String
broker
=
entry
.
getKey
();
String
broker
=
entry
.
getKey
();
...
...
tools/src/main/java/org/apache/rocketmq/tools/command/topic/UpdateStaticTopicSubCommand.java
浏览文件 @
e9cafe9f
...
@@ -226,7 +226,7 @@ public class UpdateStaticTopicSubCommand implements SubCommand {
...
@@ -226,7 +226,7 @@ public class UpdateStaticTopicSubCommand implements SubCommand {
}
else
{
}
else
{
configMapping
=
existedTopicConfigMap
.
get
(
broker
);
configMapping
=
existedTopicConfigMap
.
get
(
broker
);
configMapping
.
setWriteQueueNums
(
configMapping
.
getWriteQueueNums
()
+
1
);
configMapping
.
setWriteQueueNums
(
configMapping
.
getWriteQueueNums
()
+
1
);
configMapping
.
set
WriteQueueNums
(
configMapping
.
getWrite
QueueNums
()
+
1
);
configMapping
.
set
ReadQueueNums
(
configMapping
.
getRead
QueueNums
()
+
1
);
}
}
LogicQueueMappingItem
mappingItem
=
new
LogicQueueMappingItem
(
0
,
configMapping
.
getWriteQueueNums
()
-
1
,
broker
,
0
,
0
,
-
1
,
-
1
,
-
1
);
LogicQueueMappingItem
mappingItem
=
new
LogicQueueMappingItem
(
0
,
configMapping
.
getWriteQueueNums
()
-
1
,
broker
,
0
,
0
,
-
1
,
-
1
,
-
1
);
configMapping
.
getMappingDetail
().
putMappingInfo
(
queueId
,
ImmutableList
.
of
(
mappingItem
));
configMapping
.
getMappingDetail
().
putMappingInfo
(
queueId
,
ImmutableList
.
of
(
mappingItem
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录