@@ -41,8 +41,10 @@ import (
41
41
)
42
42
43
43
const (
44
+ CPUS_PER_EXECUTOR = 0.01
44
45
CPUS_PER_TASK = 1
45
- MEM_PER_TASK = 128
46
+ MEM_PER_EXECUTOR = 64
47
+ MEM_PER_TASK = 64
46
48
defaultArtifactPort = 12345
47
49
)
48
50
@@ -132,6 +134,12 @@ func (sched *ExampleScheduler) ResourceOffers(driver sched.SchedulerDriver, offe
132
134
remainingCpus := cpus
133
135
remainingMems := mems
134
136
137
+ // account for executor resources if there's not an executor already running on the slave
138
+ if len (offer .ExecutorIds ) == 0 {
139
+ remainingCpus -= CPUS_PER_EXECUTOR
140
+ remainingMems -= MEM_PER_EXECUTOR
141
+ }
142
+
135
143
var tasks []* mesos.TaskInfo
136
144
for sched .tasksLaunched < sched .totalTasks &&
137
145
CPUS_PER_TASK <= remainingCpus &&
@@ -168,6 +176,7 @@ func (sched *ExampleScheduler) StatusUpdate(driver sched.SchedulerDriver, status
168
176
log .Infoln ("Status update: task" , status .TaskId .GetValue (), " is in state " , status .State .Enum ().String ())
169
177
if status .GetState () == mesos .TaskState_TASK_FINISHED {
170
178
sched .tasksFinished ++
179
+ driver .ReviveOffers () // TODO(jdef) rate-limit this
171
180
}
172
181
173
182
if sched .tasksFinished >= sched .totalTasks {
@@ -263,6 +272,10 @@ func prepareExecutorInfo() *mesos.ExecutorInfo {
263
272
Value : proto .String (executorCommand ),
264
273
Uris : executorUris ,
265
274
},
275
+ Resources : []* mesos.Resource {
276
+ util .NewScalarResource ("cpus" , CPUS_PER_EXECUTOR ),
277
+ util .NewScalarResource ("mem" , MEM_PER_EXECUTOR ),
278
+ },
266
279
}
267
280
}
268
281
0 commit comments