@RpcMethod public void failSlot(final ResourceID taskManagerId, final AllocationID allocationId, final UUID leaderId, final Exception cause) throws Exception { validateLeaderSessionId(leaderSessionID); if (!registeredTaskManagers.containsKey(taskManagerId)) { throw new Exception("Unknown TaskManager " + taskManagerId); } slotPoolGateway.failAllocation(allocationId, cause); }
@Override public boolean returnAllocatedSlot(Slot slot) { gateway.returnAllocatedSlot(slot); return true; }
@RpcMethod public void disconnectTaskManager(final ResourceID resourceID, final Exception cause) { taskManagerHeartbeatManager.unmonitorTarget(resourceID); slotPoolGateway.releaseTaskManager(resourceID); Tuple2<TaskManagerLocation, TaskExecutorGateway> taskManagerConnection = registeredTaskManagers.remove(resourceID); if (taskManagerConnection != null) { taskManagerConnection.f1.disconnectJobManager(jobGraph.getJobID(), cause); } }
@Override public Future<SimpleSlot> allocateSlot(ScheduledUnit task, boolean allowQueued) { Iterable<TaskManagerLocation> locationPreferences = task.getTaskToExecute().getVertex().getPreferredLocations(); return gateway.allocateSlot(task, ResourceProfile.UNKNOWN, locationPreferences, timeout); } }
private void establishResourceManagerConnection(final JobMasterRegistrationSuccess success) { final UUID resourceManagerLeaderId = success.getResourceManagerLeaderId(); // verify the response with current connection if (resourceManagerConnection != null && resourceManagerConnection.getTargetLeaderId().equals(resourceManagerLeaderId)) { log.info("JobManager successfully registered at ResourceManager, leader id: {}.", resourceManagerLeaderId); final ResourceManagerGateway resourceManagerGateway = resourceManagerConnection.getTargetGateway(); slotPoolGateway.connectToResourceManager(resourceManagerLeaderId, resourceManagerGateway); resourceManagerHeartbeatManager.monitorTarget(success.getResourceManagerResourceId(), new HeartbeatTarget<Void>() { @Override public void receiveHeartbeat(ResourceID resourceID, Void payload) { resourceManagerGateway.heartbeatFromJobManager(resourceID); } @Override public void requestHeartbeat(ResourceID resourceID, Void payload) { // request heartbeat will never be called on the job manager side } }); } }
private void closeResourceManagerConnection(Exception cause) { if (resourceManagerConnection != null) { log.info("Close ResourceManager connection {}.", resourceManagerConnection.getResourceManagerResourceID(), cause); resourceManagerHeartbeatManager.unmonitorTarget(resourceManagerConnection.getResourceManagerResourceID()); ResourceManagerGateway resourceManagerGateway = resourceManagerConnection.getTargetGateway(); resourceManagerGateway.disconnectJobManager(resourceManagerConnection.getJobID(), cause); resourceManagerConnection.close(); resourceManagerConnection = null; } slotPoolGateway.disconnectResourceManager(); }
slotPoolGateway.suspend();
@RpcMethod public Future<Iterable<SlotOffer>> offerSlots( final ResourceID taskManagerId, final Iterable<SlotOffer> slots, final UUID leaderId) throws Exception { validateLeaderSessionId(leaderId); Tuple2<TaskManagerLocation, TaskExecutorGateway> taskManager = registeredTaskManagers.get(taskManagerId); if (taskManager == null) { throw new Exception("Unknown TaskManager " + taskManagerId); } final JobID jid = jobGraph.getJobID(); final TaskManagerLocation taskManagerLocation = taskManager.f0; final TaskExecutorGateway taskExecutorGateway = taskManager.f1; final ArrayList<Tuple2<AllocatedSlot, SlotOffer>> slotsAndOffers = new ArrayList<>(); final RpcTaskManagerGateway rpcTaskManagerGateway = new RpcTaskManagerGateway(taskExecutorGateway, leaderId); for (SlotOffer slotOffer : slots) { final AllocatedSlot slot = new AllocatedSlot( slotOffer.getAllocationId(), jid, taskManagerLocation, slotOffer.getSlotIndex(), slotOffer.getResourceProfile(), rpcTaskManagerGateway); slotsAndOffers.add(new Tuple2<>(slot, slotOffer)); } return slotPoolGateway.offerSlots(slotsAndOffers); }