Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Kwan的解忧杂货铺@新空间代码工作室
Rocketmq
提交
e862ac88
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看板
提交
e862ac88
编写于
11月 06, 2021
作者:
D
dongeforever
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add definition for logic queue
上级
4506f34e
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
250 addition
and
0 deletion
+250
-0
broker/src/main/java/org/apache/rocketmq/broker/BrokerPathConfigHelper.java
...va/org/apache/rocketmq/broker/BrokerPathConfigHelper.java
+4
-0
broker/src/main/java/org/apache/rocketmq/broker/topic/TopicQueueMappingManager.java
...pache/rocketmq/broker/topic/TopicQueueMappingManager.java
+86
-0
common/src/main/java/org/apache/rocketmq/common/protocol/body/TopicQueueMappingSerializeWrapper.java
...mmon/protocol/body/TopicQueueMappingSerializeWrapper.java
+45
-0
common/src/main/java/org/apache/rocketmq/common/protocol/route/LogicQueueMappingItem.java
...rocketmq/common/protocol/route/LogicQueueMappingItem.java
+54
-0
common/src/main/java/org/apache/rocketmq/common/protocol/route/TopicQueueMappingInfo.java
...rocketmq/common/protocol/route/TopicQueueMappingInfo.java
+61
-0
未找到文件。
broker/src/main/java/org/apache/rocketmq/broker/BrokerPathConfigHelper.java
浏览文件 @
e862ac88
...
...
@@ -35,6 +35,10 @@ public class BrokerPathConfigHelper {
return
rootDir
+
File
.
separator
+
"config"
+
File
.
separator
+
"topics.json"
;
}
public
static
String
getTopicQueueMappingPath
(
final
String
rootDir
)
{
return
rootDir
+
File
.
separator
+
"config"
+
File
.
separator
+
"topicqueuemapping.json"
;
}
public
static
String
getConsumerOffsetPath
(
final
String
rootDir
)
{
return
rootDir
+
File
.
separator
+
"config"
+
File
.
separator
+
"consumerOffset.json"
;
}
...
...
broker/src/main/java/org/apache/rocketmq/broker/topic/TopicQueueMappingManager.java
0 → 100644
浏览文件 @
e862ac88
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.apache.rocketmq.broker.topic
;
import
com.alibaba.fastjson.JSON
;
import
org.apache.rocketmq.broker.BrokerController
;
import
org.apache.rocketmq.broker.BrokerPathConfigHelper
;
import
org.apache.rocketmq.common.ConfigManager
;
import
org.apache.rocketmq.common.DataVersion
;
import
org.apache.rocketmq.common.constant.LoggerName
;
import
org.apache.rocketmq.common.protocol.body.TopicQueueMappingSerializeWrapper
;
import
org.apache.rocketmq.common.protocol.route.TopicQueueMappingInfo
;
import
org.apache.rocketmq.logging.InternalLogger
;
import
org.apache.rocketmq.logging.InternalLoggerFactory
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentMap
;
import
java.util.concurrent.locks.Lock
;
import
java.util.concurrent.locks.ReentrantLock
;
public
class
TopicQueueMappingManager
extends
ConfigManager
{
private
static
final
InternalLogger
log
=
InternalLoggerFactory
.
getLogger
(
LoggerName
.
BROKER_LOGGER_NAME
);
private
static
final
long
LOCK_TIMEOUT_MILLIS
=
3000
;
private
transient
final
Lock
lock
=
new
ReentrantLock
();
private
final
DataVersion
dataVersion
=
new
DataVersion
();
private
transient
BrokerController
brokerController
;
private
final
ConcurrentMap
<
String
,
TopicQueueMappingInfo
>
topicQueueMappingTable
=
new
ConcurrentHashMap
<>();
public
TopicQueueMappingManager
(
BrokerController
brokerController
)
{
this
.
brokerController
=
brokerController
;
}
@Override
public
String
encode
(
boolean
pretty
)
{
TopicQueueMappingSerializeWrapper
wrapper
=
new
TopicQueueMappingSerializeWrapper
();
wrapper
.
setTopicQueueMappingInfoMap
(
topicQueueMappingTable
);
wrapper
.
setDataVersion
(
this
.
dataVersion
);
return
JSON
.
toJSONString
(
wrapper
,
pretty
);
}
@Override
public
String
encode
()
{
return
encode
(
false
);
}
@Override
public
String
configFilePath
()
{
return
BrokerPathConfigHelper
.
getTopicQueueMappingPath
(
this
.
brokerController
.
getMessageStoreConfig
()
.
getStorePathRootDir
());
}
@Override
public
void
decode
(
String
jsonString
)
{
if
(
jsonString
!=
null
)
{
TopicQueueMappingSerializeWrapper
wrapper
=
TopicQueueMappingSerializeWrapper
.
fromJson
(
jsonString
,
TopicQueueMappingSerializeWrapper
.
class
);
if
(
wrapper
!=
null
)
{
this
.
topicQueueMappingTable
.
putAll
(
wrapper
.
getTopicQueueMappingInfoMap
());
this
.
dataVersion
.
assignNewOne
(
wrapper
.
getDataVersion
());
}
}
}
public
DataVersion
getDataVersion
()
{
return
dataVersion
;
}
}
common/src/main/java/org/apache/rocketmq/common/protocol/body/TopicQueueMappingSerializeWrapper.java
0 → 100644
浏览文件 @
e862ac88
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.apache.rocketmq.common.protocol.body
;
import
org.apache.rocketmq.common.DataVersion
;
import
org.apache.rocketmq.common.protocol.route.TopicQueueMappingInfo
;
import
org.apache.rocketmq.remoting.protocol.RemotingSerializable
;
import
java.util.Map
;
public
class
TopicQueueMappingSerializeWrapper
extends
RemotingSerializable
{
private
Map
<
String
/* topic */
,
TopicQueueMappingInfo
>
topicQueueMappingInfoMap
;
private
DataVersion
dataVersion
=
new
DataVersion
();
public
Map
<
String
,
TopicQueueMappingInfo
>
getTopicQueueMappingInfoMap
()
{
return
topicQueueMappingInfoMap
;
}
public
void
setTopicQueueMappingInfoMap
(
Map
<
String
,
TopicQueueMappingInfo
>
topicQueueMappingInfoMap
)
{
this
.
topicQueueMappingInfoMap
=
topicQueueMappingInfoMap
;
}
public
DataVersion
getDataVersion
()
{
return
dataVersion
;
}
public
void
setDataVersion
(
DataVersion
dataVersion
)
{
this
.
dataVersion
=
dataVersion
;
}
}
common/src/main/java/org/apache/rocketmq/common/protocol/route/LogicQueueMappingItem.java
0 → 100644
浏览文件 @
e862ac88
package
org.apache.rocketmq.common.protocol.route
;
public
class
LogicQueueMappingItem
{
private
int
gen
;
//generation, mutable
private
int
queueId
;
private
String
bname
;
private
long
logicOffset
;
// the start of the logic offset
private
long
startOffset
;
// the start of the physical offset
private
long
timeOfStart
=
-
1
;
//mutable
public
LogicQueueMappingItem
(
int
gen
,
int
queueId
,
String
bname
,
long
logicOffset
,
long
startOffset
,
long
timeOfStart
)
{
this
.
gen
=
gen
;
this
.
queueId
=
queueId
;
this
.
bname
=
bname
;
this
.
logicOffset
=
logicOffset
;
this
.
startOffset
=
startOffset
;
this
.
timeOfStart
=
timeOfStart
;
}
public
int
getGen
()
{
return
gen
;
}
public
void
setGen
(
int
gen
)
{
this
.
gen
=
gen
;
}
public
long
getTimeOfStart
()
{
return
timeOfStart
;
}
public
void
setTimeOfStart
(
long
timeOfStart
)
{
this
.
timeOfStart
=
timeOfStart
;
}
public
int
getQueueId
()
{
return
queueId
;
}
public
String
getBname
()
{
return
bname
;
}
public
long
getLogicOffset
()
{
return
logicOffset
;
}
public
long
getStartOffset
()
{
return
startOffset
;
}
}
common/src/main/java/org/apache/rocketmq/common/protocol/route/TopicQueueMappingInfo.java
0 → 100644
浏览文件 @
e862ac88
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.apache.rocketmq.common.protocol.route
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
public
class
TopicQueueMappingInfo
{
private
int
totalQueues
;
private
String
bname
;
//identify the host name
//the newest mapping is in current broker
private
Map
<
Integer
/*global id*/
,
List
<
LogicQueueMappingItem
>>
hostedQueues
=
new
HashMap
<
Integer
,
List
<
LogicQueueMappingItem
>>();
public
TopicQueueMappingInfo
(
int
totalQueues
,
String
bname
)
{
this
.
totalQueues
=
totalQueues
;
this
.
bname
=
bname
;
}
public
boolean
putMappingInfo
(
Integer
globalId
,
List
<
LogicQueueMappingItem
>
mappingInfo
)
{
if
(
mappingInfo
.
isEmpty
())
{
return
true
;
}
hostedQueues
.
put
(
globalId
,
mappingInfo
);
return
true
;
}
public
List
<
LogicQueueMappingItem
>
getMappingInfo
(
Integer
globalId
)
{
return
hostedQueues
.
get
(
globalId
);
}
public
int
getTotalQueues
()
{
return
totalQueues
;
}
public
void
setTotalQueues
(
int
totalQueues
)
{
this
.
totalQueues
=
totalQueues
;
}
public
String
getBname
()
{
return
bname
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录