Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
pulsar
提交
70b2a352
pulsar
项目概览
apache
/
pulsar
通知
129
Star
40
Fork
3
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Wiki
1
Wiki
分析
仓库
DevOps
项目成员
Pages
pulsar
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Pages
分析
分析
仓库分析
DevOps
Wiki
1
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
提交
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
70b2a352
编写于
6月 16, 2017
作者:
B
Brad McMillen
提交者:
Matteo Merli
6月 16, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove bundle from the ephemeral preallocated map once it is loaded (#481)
上级
c0f8b0d4
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
8 deletion
+42
-8
pulsar-broker/src/main/java/com/yahoo/pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java
...ulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java
+42
-8
未找到文件。
pulsar-broker/src/main/java/com/yahoo/pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java
浏览文件 @
70b2a352
...
...
@@ -182,6 +182,7 @@ public class ModularLoadManagerImpl implements ModularLoadManager, ZooKeeperCach
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"Update Received for path {}"
,
path
);
}
reapDeadBrokerPreallocations
(
data
);
scheduler
.
submit
(
ModularLoadManagerImpl
.
this
::
updateAll
);
}
});
...
...
@@ -244,6 +245,30 @@ public class ModularLoadManagerImpl implements ModularLoadManager, ZooKeeperCach
}
}
// For each broker that we have a recent load report, see if they are still alive
private
void
reapDeadBrokerPreallocations
(
Set
<
String
>
aliveBrokers
)
{
for
(
String
broker
:
loadData
.
getBrokerData
().
keySet
()
)
{
if
(
!
aliveBrokers
.
contains
(
broker
))
{
if
(
log
.
isDebugEnabled
()
)
{
log
.
debug
(
"Broker {} appears to have stopped; now reclaiming any preallocations"
,
broker
);
}
final
Iterator
<
Map
.
Entry
<
String
,
String
>>
iterator
=
preallocatedBundleToBroker
.
entrySet
().
iterator
();
while
(
iterator
.
hasNext
()
)
{
Map
.
Entry
<
String
,
String
>
entry
=
iterator
.
next
();
final
String
preallocatedBundle
=
entry
.
getKey
();
final
String
preallocatedBroker
=
entry
.
getValue
();
if
(
broker
.
equals
(
preallocatedBroker
)
)
{
if
(
log
.
isDebugEnabled
()
)
{
log
.
debug
(
"Removing old preallocation on dead broker {} for bundle {}"
,
preallocatedBroker
,
preallocatedBundle
);
}
iterator
.
remove
();
}
}
}
}
}
private
Set
<
String
>
getAvailableBrokers
()
{
try
{
return
availableActiveBrokers
.
get
();
...
...
@@ -414,15 +439,24 @@ public class ModularLoadManagerImpl implements ModularLoadManager, ZooKeeperCach
// Remove all loaded bundles from the preallocated maps.
final
Map
<
String
,
BundleData
>
preallocatedBundleData
=
brokerData
.
getPreallocatedBundleData
();
// Should not iterate with more than one thread at a time.
synchronized
(
preallocatedBundleData
)
{
final
Iterator
<
Map
.
Entry
<
String
,
BundleData
>>
preallocatedIterator
=
preallocatedBundleData
.
entrySet
()
.
iterator
();
while
(
preallocatedIterator
.
hasNext
())
{
final
String
bundle
=
preallocatedIterator
.
next
().
getKey
();
if
(
bundleData
.
containsKey
(
bundle
))
{
preallocatedIterator
.
remove
();
preallocatedBundleToBroker
.
remove
(
bundle
);
for
(
String
preallocatedBundleName
:
brokerData
.
getPreallocatedBundleData
().
keySet
())
{
if
(
brokerData
.
getLocalData
().
getBundles
().
contains
(
preallocatedBundleName
))
{
final
Iterator
<
Map
.
Entry
<
String
,
BundleData
>>
preallocatedIterator
=
preallocatedBundleData
.
entrySet
()
.
iterator
();
while
(
preallocatedIterator
.
hasNext
())
{
final
String
bundle
=
preallocatedIterator
.
next
().
getKey
();
if
(
bundleData
.
containsKey
(
bundle
))
{
preallocatedIterator
.
remove
();
preallocatedBundleToBroker
.
remove
(
bundle
);
}
}
}
// This is needed too in case a broker which was assigned a bundle dies and comes back up.
if
(
preallocatedBundleToBroker
.
containsKey
(
preallocatedBundleName
)
)
{
preallocatedBundleToBroker
.
remove
(
preallocatedBundleName
);
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录