Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Kwan的解忧杂货铺@新空间代码工作室
Rocketmq
提交
8b747f97
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看板
提交
8b747f97
编写于
12月 08, 2021
作者:
D
dongeforever
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Try using the new style to handble get min offset
上级
1d7807bb
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
32 addition
and
24 deletion
+32
-24
broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java
...pache/rocketmq/broker/processor/AdminBrokerProcessor.java
+31
-23
common/src/main/java/org/apache/rocketmq/common/rpc/RpcResponse.java
...main/java/org/apache/rocketmq/common/rpc/RpcResponse.java
+1
-1
未找到文件。
broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java
浏览文件 @
8b747f97
...
...
@@ -20,6 +20,7 @@ import com.alibaba.fastjson.JSON;
import
com.alibaba.fastjson.JSONObject
;
import
io.netty.channel.Channel
;
import
io.netty.channel.ChannelHandlerContext
;
import
io.netty.util.concurrent.CompleteFuture
;
import
org.apache.rocketmq.acl.AccessValidator
;
import
org.apache.rocketmq.acl.plain.PlainAccessValidator
;
import
org.apache.rocketmq.broker.BrokerController
;
...
...
@@ -103,6 +104,8 @@ import org.apache.rocketmq.common.protocol.header.ViewBrokerStatsDataRequestHead
import
org.apache.rocketmq.common.protocol.header.filtersrv.RegisterFilterServerRequestHeader
;
import
org.apache.rocketmq.common.protocol.header.filtersrv.RegisterFilterServerResponseHeader
;
import
org.apache.rocketmq.common.protocol.heartbeat.SubscriptionData
;
import
org.apache.rocketmq.common.rpc.RpcClientUtils
;
import
org.apache.rocketmq.common.rpc.RpcException
;
import
org.apache.rocketmq.common.rpc.RpcRequest
;
import
org.apache.rocketmq.common.rpc.RpcResponse
;
import
org.apache.rocketmq.common.statictopic.LogicQueueMappingItem
;
...
...
@@ -146,7 +149,10 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Properties
;
import
java.util.Set
;
import
java.util.concurrent.CompletableFuture
;
import
java.util.concurrent.ConcurrentMap
;
import
java.util.concurrent.Future
;
import
java.util.function.BiConsumer
;
import
static
org
.
apache
.
rocketmq
.
remoting
.
protocol
.
RemotingCommand
.
buildErrorResponse
;
...
...
@@ -764,15 +770,15 @@ public class AdminBrokerProcessor extends AsyncNettyRequestProcessor implements
return
response
;
}
private
RemotingCommand
rewriteReques
tForStaticTopic
(
GetMinOffsetRequestHeader
requestHeader
,
TopicQueueMappingContext
mappingContext
)
{
private
CompletableFuture
<
RpcResponse
>
handleGetMinOffse
tForStaticTopic
(
GetMinOffsetRequestHeader
requestHeader
,
TopicQueueMappingContext
mappingContext
)
{
if
(
mappingContext
.
getMappingDetail
()
==
null
)
{
return
null
;
}
TopicQueueMappingDetail
mappingDetail
=
mappingContext
.
getMappingDetail
();
if
(!
mappingContext
.
isLeader
())
{
//this may not
return
buildErrorResponse
(
ResponseCode
.
NOT_LEADER_FOR_QUEUE
,
String
.
format
(
"%s-%d does not exit in request process of current broker %s"
,
mappingContext
.
getTopic
(),
mappingContext
.
getGlobalId
(),
mappingDetail
.
getBname
()));
return
CompletableFuture
.
completedFuture
(
new
RpcResponse
(
new
RpcException
(
ResponseCode
.
NOT_LEADER_FOR_QUEUE
,
String
.
format
(
"%s-%d is not leader in current broker %s"
,
mappingContext
.
getTopic
(),
mappingContext
.
getGlobalId
(),
mappingDetail
.
getBname
()))));
};
LogicQueueMappingItem
mappingItem
=
TopicQueueMappingUtils
.
findLogicQueueMappingItem
(
mappingContext
.
getMappingItemList
(),
0L
,
true
);
...
...
@@ -796,38 +802,40 @@ public class AdminBrokerProcessor extends AsyncNettyRequestProcessor implements
}
long
offset
=
mappingItem
.
computeStaticQueueOffsetLoosely
(
physicalOffset
);
final
RemotingCommand
response
=
RemotingCommand
.
createResponseCommand
(
GetMinOffsetResponseHeader
.
class
);
final
GetMinOffsetResponseHeader
responseHeader
=
(
GetMinOffsetResponseHeader
)
response
.
readCustomHeader
();
final
GetMinOffsetResponseHeader
responseHeader
=
new
GetMinOffsetResponseHeader
();
responseHeader
.
setOffset
(
offset
);
response
.
setCode
(
ResponseCode
.
SUCCESS
);
response
.
setRemark
(
null
);
return
response
;
return
CompletableFuture
.
completedFuture
(
new
RpcResponse
(
ResponseCode
.
SUCCESS
,
responseHeader
,
null
));
}
catch
(
Throwable
t
)
{
log
.
error
(
"rewriteRequestForStaticTopic failed"
,
t
);
return
buildErrorResponse
(
ResponseCode
.
SYSTEM_ERROR
,
t
.
getMessage
(
));
return
CompletableFuture
.
completedFuture
(
new
RpcResponse
(
new
RpcException
(
ResponseCode
.
SYSTEM_ERROR
,
t
.
getMessage
(),
t
)
));
}
}
private
RemotingCommand
getMinOffset
(
ChannelHandlerContext
ctx
,
RemotingCommand
request
)
throws
RemotingCommandException
{
final
RemotingCommand
response
=
RemotingCommand
.
createResponseCommand
(
GetMinOffsetResponseHeader
.
class
);
final
GetMinOffsetResponseHeader
responseHeader
=
(
GetMinOffsetResponseHeader
)
response
.
readCustomHeader
();
final
GetMinOffsetRequestHeader
requestHeader
=
(
GetMinOffsetRequestHeader
)
request
.
decodeCommandCustomHeader
(
GetMinOffsetRequestHeader
.
class
);
private
CompletableFuture
<
RpcResponse
>
handleGetMinOffset
(
RpcRequest
request
)
{
assert
request
.
getCode
()
==
RequestCode
.
GET_MIN_OFFSET
;
GetMinOffsetRequestHeader
requestHeader
=
(
GetMinOffsetRequestHeader
)
request
.
getHeader
();
TopicQueueMappingContext
mappingContext
=
this
.
brokerController
.
getTopicQueueMappingManager
().
buildTopicQueueMappingContext
(
requestHeader
,
false
);
RemotingCommand
rewriteResult
=
rewriteReques
tForStaticTopic
(
requestHeader
,
mappingContext
);
CompletableFuture
<
RpcResponse
>
rewriteResult
=
handleGetMinOffse
tForStaticTopic
(
requestHeader
,
mappingContext
);
if
(
rewriteResult
!=
null
)
{
return
rewriteResult
;
}
final
GetMinOffsetResponseHeader
responseHeader
=
new
GetMinOffsetResponseHeader
();
long
offset
=
this
.
brokerController
.
getMessageStore
().
getMinOffsetInQueue
(
requestHeader
.
getTopic
(),
requestHeader
.
getQueueId
());
responseHeader
.
setOffset
(
offset
);
response
.
setCode
(
ResponseCode
.
SUCCESS
);
response
.
setRemark
(
null
);
return
response
;
return
CompletableFuture
.
completedFuture
(
new
RpcResponse
(
ResponseCode
.
SUCCESS
,
responseHeader
,
null
));
}
private
RemotingCommand
getMinOffset
(
ChannelHandlerContext
ctx
,
RemotingCommand
request
)
throws
RemotingCommandException
{
final
GetMinOffsetRequestHeader
requestHeader
=
(
GetMinOffsetRequestHeader
)
request
.
decodeCommandCustomHeader
(
GetMinOffsetRequestHeader
.
class
);
try
{
CompletableFuture
<
RpcResponse
>
responseFuture
=
handleGetMinOffset
(
new
RpcRequest
(
RequestCode
.
GET_MIN_OFFSET
,
requestHeader
,
null
));
RpcResponse
rpcResponse
=
responseFuture
.
get
();
return
RpcClientUtils
.
createCommandForRpcResponse
(
rpcResponse
);
}
catch
(
Throwable
t
)
{
return
buildErrorResponse
(
ResponseCode
.
SYSTEM_ERROR
,
t
.
getMessage
());
}
}
private
RemotingCommand
rewriteRequestForStaticTopic
(
GetEarliestMsgStoretimeRequestHeader
requestHeader
,
TopicQueueMappingContext
mappingContext
)
{
...
...
common/src/main/java/org/apache/rocketmq/common/rpc/RpcResponse.java
浏览文件 @
8b747f97
...
...
@@ -34,7 +34,7 @@ public class RpcResponse {
this
.
body
=
body
;
}
RpcResponse
(
RpcException
rpcException
)
{
public
RpcResponse
(
RpcException
rpcException
)
{
this
.
code
=
rpcException
.
getErrorCode
();
this
.
exception
=
rpcException
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录