Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Forever310
druid
提交
06089360
D
druid
项目概览
Forever310
/
druid
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
druid
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
06089360
编写于
1月 28, 2015
作者:
F
fjy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Backport Dynamic configuration fixes for worker select strategy
上级
ecf0895f
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
33 addition
and
24 deletion
+33
-24
indexing-service/src/main/java/io/druid/indexing/overlord/RemoteTaskRunner.java
...ain/java/io/druid/indexing/overlord/RemoteTaskRunner.java
+13
-3
indexing-service/src/main/java/io/druid/indexing/overlord/RemoteTaskRunnerFactory.java
...a/io/druid/indexing/overlord/RemoteTaskRunnerFactory.java
+4
-14
indexing-service/src/main/java/io/druid/indexing/overlord/autoscaling/SimpleResourceManagementStrategy.java
...verlord/autoscaling/SimpleResourceManagementStrategy.java
+1
-1
indexing-service/src/main/java/io/druid/indexing/overlord/setup/WorkerBehaviorConfig.java
...o/druid/indexing/overlord/setup/WorkerBehaviorConfig.java
+8
-0
indexing-service/src/test/java/io/druid/indexing/overlord/RemoteTaskRunnerTest.java
...java/io/druid/indexing/overlord/RemoteTaskRunnerTest.java
+7
-6
未找到文件。
indexing-service/src/main/java/io/druid/indexing/overlord/RemoteTaskRunner.java
浏览文件 @
06089360
...
...
@@ -25,6 +25,7 @@ import com.google.common.base.Joiner;
import
com.google.common.base.Optional
;
import
com.google.common.base.Preconditions
;
import
com.google.common.base.Stopwatch
;
import
com.google.common.base.Supplier
;
import
com.google.common.base.Throwables
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.ImmutableMap
;
...
...
@@ -48,6 +49,7 @@ import io.druid.curator.cache.PathChildrenCacheFactory;
import
io.druid.indexing.common.TaskStatus
;
import
io.druid.indexing.common.task.Task
;
import
io.druid.indexing.overlord.config.RemoteTaskRunnerConfig
;
import
io.druid.indexing.overlord.setup.WorkerBehaviorConfig
;
import
io.druid.indexing.overlord.setup.WorkerSelectStrategy
;
import
io.druid.indexing.worker.TaskAnnouncement
;
import
io.druid.indexing.worker.Worker
;
...
...
@@ -107,7 +109,7 @@ public class RemoteTaskRunner implements TaskRunner, TaskLogStreamer
private
final
PathChildrenCacheFactory
pathChildrenCacheFactory
;
private
final
PathChildrenCache
workerPathCache
;
private
final
HttpClient
httpClient
;
private
final
WorkerSelectStrategy
strategy
;
private
final
Supplier
<
WorkerBehaviorConfig
>
workerConfigRef
;
// all workers that exist in ZK
private
final
ConcurrentMap
<
String
,
ZkWorker
>
zkWorkers
=
new
ConcurrentHashMap
<>();
...
...
@@ -133,7 +135,7 @@ public class RemoteTaskRunner implements TaskRunner, TaskLogStreamer
CuratorFramework
cf
,
PathChildrenCacheFactory
pathChildrenCacheFactory
,
HttpClient
httpClient
,
WorkerSelectStrategy
strategy
Supplier
<
WorkerBehaviorConfig
>
workerConfigRef
)
{
this
.
jsonMapper
=
jsonMapper
;
...
...
@@ -143,7 +145,7 @@ public class RemoteTaskRunner implements TaskRunner, TaskLogStreamer
this
.
pathChildrenCacheFactory
=
pathChildrenCacheFactory
;
this
.
workerPathCache
=
pathChildrenCacheFactory
.
make
(
cf
,
zkPaths
.
getIndexerAnnouncementPath
());
this
.
httpClient
=
httpClient
;
this
.
strategy
=
strategy
;
this
.
workerConfigRef
=
workerConfigRef
;
}
@LifecycleStart
...
...
@@ -529,6 +531,14 @@ public class RemoteTaskRunner implements TaskRunner, TaskLogStreamer
return
true
;
}
else
{
// Nothing running this task, announce it in ZK for a worker to run it
WorkerBehaviorConfig
workerConfig
=
workerConfigRef
.
get
();
WorkerSelectStrategy
strategy
;
if
(
workerConfig
==
null
||
workerConfig
.
getSelectStrategy
()
==
null
)
{
log
.
warn
(
"No worker selections strategy set. Using default."
);
strategy
=
WorkerBehaviorConfig
.
DEFAULT_STRATEGY
;
}
else
{
strategy
=
workerConfig
.
getSelectStrategy
();
}
final
Optional
<
ImmutableZkWorker
>
immutableZkWorker
=
strategy
.
findWorkerForTask
(
config
,
ImmutableMap
.
copyOf
(
...
...
indexing-service/src/main/java/io/druid/indexing/overlord/RemoteTaskRunnerFactory.java
浏览文件 @
06089360
...
...
@@ -41,7 +41,7 @@ public class RemoteTaskRunnerFactory implements TaskRunnerFactory
private
final
ZkPathsConfig
zkPaths
;
private
final
ObjectMapper
jsonMapper
;
private
final
HttpClient
httpClient
;
private
final
WorkerSelectStrategy
strategy
;
private
final
Supplier
<
WorkerBehaviorConfig
>
workerConfigRef
;
@Inject
public
RemoteTaskRunnerFactory
(
...
...
@@ -50,7 +50,7 @@ public class RemoteTaskRunnerFactory implements TaskRunnerFactory
final
ZkPathsConfig
zkPaths
,
final
ObjectMapper
jsonMapper
,
@Global
final
HttpClient
httpClient
,
final
Supplier
<
WorkerBehaviorConfig
>
worker
BehaviourConfigSupplier
final
Supplier
<
WorkerBehaviorConfig
>
worker
ConfigRef
)
{
this
.
curator
=
curator
;
...
...
@@ -58,17 +58,7 @@ public class RemoteTaskRunnerFactory implements TaskRunnerFactory
this
.
zkPaths
=
zkPaths
;
this
.
jsonMapper
=
jsonMapper
;
this
.
httpClient
=
httpClient
;
if
(
workerBehaviourConfigSupplier
!=
null
)
{
// Backwards compatibility
final
WorkerBehaviorConfig
workerBehaviorConfig
=
workerBehaviourConfigSupplier
.
get
();
if
(
workerBehaviorConfig
!=
null
)
{
this
.
strategy
=
workerBehaviorConfig
.
getSelectStrategy
();
}
else
{
this
.
strategy
=
new
FillCapacityWorkerSelectStrategy
();
}
}
else
{
this
.
strategy
=
new
FillCapacityWorkerSelectStrategy
();
}
this
.
workerConfigRef
=
workerConfigRef
;
}
@Override
...
...
@@ -84,7 +74,7 @@ public class RemoteTaskRunnerFactory implements TaskRunnerFactory
.
withCompressed
(
remoteTaskRunnerConfig
.
isCompressZnodes
())
.
build
(),
httpClient
,
strategy
workerConfigRef
);
}
}
indexing-service/src/main/java/io/druid/indexing/overlord/autoscaling/SimpleResourceManagementStrategy.java
浏览文件 @
06089360
...
...
@@ -77,7 +77,7 @@ public class SimpleResourceManagementStrategy implements ResourceManagementStrat
synchronized
(
lock
)
{
boolean
didProvision
=
false
;
final
WorkerBehaviorConfig
workerConfig
=
workerConfigRef
.
get
();
if
(
workerConfig
==
null
)
{
if
(
workerConfig
==
null
||
workerConfig
.
getAutoScaler
()
==
null
)
{
log
.
warn
(
"No workerConfig available, cannot provision new workers."
);
return
false
;
}
...
...
indexing-service/src/main/java/io/druid/indexing/overlord/setup/WorkerBehaviorConfig.java
浏览文件 @
06089360
...
...
@@ -22,12 +22,20 @@ package io.druid.indexing.overlord.setup;
import
com.fasterxml.jackson.annotation.JsonCreator
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
io.druid.indexing.overlord.autoscaling.AutoScaler
;
import
io.druid.indexing.overlord.autoscaling.NoopAutoScaler
;
/**
*/
public
class
WorkerBehaviorConfig
{
public
static
final
String
CONFIG_KEY
=
"worker.config"
;
public
static
WorkerSelectStrategy
DEFAULT_STRATEGY
=
new
FillCapacityWorkerSelectStrategy
();
public
static
AutoScaler
DEFAULT_AUTOSCALER
=
new
NoopAutoScaler
();
public
static
WorkerBehaviorConfig
defaultConfig
()
{
return
new
WorkerBehaviorConfig
(
DEFAULT_STRATEGY
,
DEFAULT_AUTOSCALER
);
}
private
final
WorkerSelectStrategy
selectStrategy
;
private
final
AutoScaler
autoScaler
;
...
...
indexing-service/src/test/java/io/druid/indexing/overlord/RemoteTaskRunnerTest.java
浏览文件 @
06089360
...
...
@@ -40,8 +40,7 @@ import io.druid.indexing.common.TestUtils;
import
io.druid.indexing.common.task.Task
;
import
io.druid.indexing.common.task.TaskResource
;
import
io.druid.indexing.overlord.config.RemoteTaskRunnerConfig
;
import
io.druid.indexing.overlord.setup.FillCapacityWorkerSelectStrategy
;
import
io.druid.indexing.overlord.setup.WorkerSetupData
;
import
io.druid.indexing.overlord.setup.WorkerBehaviorConfig
;
import
io.druid.indexing.worker.TaskAnnouncement
;
import
io.druid.indexing.worker.Worker
;
import
io.druid.jackson.DefaultObjectMapper
;
...
...
@@ -59,6 +58,7 @@ import org.junit.Test;
import
java.util.Set
;
import
java.util.concurrent.Future
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.atomic.AtomicReference
;
public
class
RemoteTaskRunnerTest
...
...
@@ -69,6 +69,7 @@ public class RemoteTaskRunnerTest
private
static
final
String
announcementsPath
=
String
.
format
(
"%s/indexer/announcements/worker"
,
basePath
);
private
static
final
String
tasksPath
=
String
.
format
(
"%s/indexer/tasks/worker"
,
basePath
);
private
static
final
String
statusPath
=
String
.
format
(
"%s/indexer/status/worker"
,
basePath
);
private
static
final
int
TIMEOUT_SECONDS
=
5
;
private
TestingCluster
testingCluster
;
private
CuratorFramework
cf
;
...
...
@@ -285,7 +286,7 @@ public class RemoteTaskRunnerTest
cf
.
delete
().
forPath
(
joiner
.
join
(
statusPath
,
task
.
getId
()));
TaskStatus
status
=
future
.
get
();
TaskStatus
status
=
future
.
get
(
TIMEOUT_SECONDS
,
TimeUnit
.
SECONDS
);
Assert
.
assertEquals
(
status
.
getStatusCode
(),
TaskStatus
.
Status
.
FAILED
);
}
...
...
@@ -338,7 +339,7 @@ public class RemoteTaskRunnerTest
ListenableFuture
<
TaskStatus
>
future
=
remoteTaskRunner
.
run
(
task
);
TaskStatus
status
=
future
.
get
();
TaskStatus
status
=
future
.
get
(
TIMEOUT_SECONDS
,
TimeUnit
.
SECONDS
);
Assert
.
assertEquals
(
TaskStatus
.
Status
.
SUCCESS
,
status
.
getStatusCode
());
}
...
...
@@ -356,7 +357,7 @@ public class RemoteTaskRunnerTest
cf
.
delete
().
forPath
(
announcementsPath
);
TaskStatus
status
=
future
.
get
();
TaskStatus
status
=
future
.
get
(
TIMEOUT_SECONDS
,
TimeUnit
.
SECONDS
);
Assert
.
assertEquals
(
TaskStatus
.
Status
.
FAILED
,
status
.
getStatusCode
());
}
...
...
@@ -407,7 +408,7 @@ public class RemoteTaskRunnerTest
cf
,
new
SimplePathChildrenCacheFactory
.
Builder
().
build
(),
null
,
new
FillCapacityWorkerSelectStrategy
(
)
DSuppliers
.
of
(
new
AtomicReference
<>(
WorkerBehaviorConfig
.
defaultConfig
())
)
);
remoteTaskRunner
.
start
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录