synchronized(OFFERS_LOCK) {
Map<OfferID, List<TaskInfo>> toLaunch = new HashMap();
for(String topologyId: slots.keySet()) {
for(WorkerSlot slot: slots.get(topologyId)) {
OfferID id = findOffer(slot);
Offer offer = _offers.get(id);
if(id!=null) {
if(!toLaunch.containsKey(id)) {
toLaunch.put(id, new ArrayList());
}
TopologyDetails details = topologies.getById(topologyId);
int cpu = MesosCommon.topologyCpu(_conf, details);
int mem = MesosCommon.topologyMem(_conf, details);
Map executorData = new HashMap();
executorData.put(MesosCommon.SUPERVISOR_ID, slot.getNodeId() + "-" + details.getId());
executorData.put(MesosCommon.ASSIGNMENT_ID, slot.getNodeId());
String executorDataStr = JSONValue.toJSONString(executorData);
LOG.info("Launching task with executor data: <" + executorDataStr + ">");
TaskInfo task = TaskInfo.newBuilder()
.setName("worker " + slot.getNodeId() + ":" + slot.getPort())
.setTaskId(TaskID.newBuilder()
.setValue(MesosCommon.taskId(slot.getNodeId(), slot.getPort())))
.setSlaveId(offer.getSlaveId())
.setExecutor(ExecutorInfo.newBuilder()
.setExecutorId(ExecutorID.newBuilder().setValue(details.getId()))
.setData(ByteString.copyFromUtf8(executorDataStr))
.setCommand(CommandInfo.newBuilder()
.addUris(URI.newBuilder().setValue((String) _conf.get(CONF_EXECUTOR_URI)))