/** * Escalate operation as triggered by external timer. * @return a (usually empty) list of cancel/request operations. */ public List<AbstractRMOperation> cancelOutstandingAARequests() { return outstandingRequests.cancelOutstandingAARequests(); }
/** * Escalate operation as triggered by external timer. * @return a (usually empty) list of cancel/request operations. */ public synchronized List<AbstractRMOperation> escalateOutstandingRequests() { return outstandingRequests.escalateOutstandingRequests(now()); } /**
/** * Get a snapshot of the outstanding placed request list * @return a list of the requests outstanding at the time of requesting */ @VisibleForTesting public List<OutstandingRequest> listOpenRequests() { return outstandingRequests.listOpenRequests(); }
/** * Build the list of requests to cancel from the outstanding list. * @param role role * @param toCancel number to cancel * @return a list of cancellable operations. */ private synchronized List<AbstractRMOperation> cancelRequestsForSimpleRole(RoleStatus role, int toCancel) { Preconditions.checkArgument(toCancel > 0, "trying to cancel invalid number of requests: " + toCancel); List<AbstractRMOperation> results = new ArrayList<>(toCancel); // first scan through the unplaced request list to find all of a role int roleId = role.getKey(); List<OutstandingRequest> requests = outstandingRequests.extractOpenRequestsForRole(roleId, toCancel); // are there any left? int remaining = toCancel - requests.size(); // ask for some placed nodes requests.addAll(outstandingRequests.extractPlacedRequestsForRole(roleId, remaining)); // build cancellations for (OutstandingRequest request : requests) { results.add(request.createCancelOperation()); } return results; }
/** * A container has been allocated on a node -update the data structures * @param container container * @param desiredCount desired #of instances * @param actualCount current count of instances * @return The allocation outcome */ public synchronized ContainerAllocationResults onContainerAllocated(Container container, long desiredCount, long actualCount) { int role = ContainerPriority.extractRole(container); String hostname = RoleHistoryUtils.hostnameOf(container); List<NodeInstance> nodeInstances = listRecentNodesForRoleId(role); ContainerAllocationResults outcome = outstandingRequests.onContainerAllocated(role, hostname, container); if (desiredCount <= actualCount) { // all outstanding requests have been satisfied // clear all the lists, so returning nodes to the available set List<NodeInstance> hosts = outstandingRequests.resetOutstandingRequests(role); if (!hosts.isEmpty()) { //add the list log.info("Adding {} hosts for role {}", hosts.size(), role); nodeInstances.addAll(hosts); sortRecentNodeList(role); } } return outcome; }
/** * Get a snapshot of the outstanding placed request list * @return a list of the requests outstanding at the time of requesting */ @VisibleForTesting public List<OutstandingRequest> listPlacedRequests() { return outstandingRequests.listPlacedRequests(); }
/** * Reset the variables -this does not adjust the fixed attributes * of the history, but the nodemap and failed node map are cleared. */ protected synchronized void reset() throws BadConfigException { nodemap = new NodeMap(roleSize); resetAvailableNodeLists(); outstandingRequests = new OutstandingRequestTracker(); }
/** * Find a node for an AA role and request an instance on that (or a location-less * instance) * @param role role status * @return a request ready to go, or null if no location can be found. */ public synchronized OutstandingRequest requestContainerForAARole(RoleStatus role) { List<NodeInstance> nodes = findNodeForNewAAInstance(role); if (!nodes.isEmpty()) { OutstandingRequest outstanding = outstandingRequests.newAARequest( role.getKey(), nodes, role.getLabelExpression()); Resource resource = recordFactory.newResource(); role.copyResourceRequirements(resource); outstanding.buildContainerRequest(resource, role, now()); return outstanding; } else { log.warn("No suitable location for {}", role.getName()); return null; } } /**
/** * Request an instance on a given node. * An outstanding request is created & tracked, with the * relevant node entry for that role updated. *<p> * The role status entries will also be tracked * <p> * Returns the request that is now being tracked. * If the node instance is not null, it's details about the role is incremented * * @param node node to target or null for "any" * @param role role to request * @return the request */ public synchronized OutstandingRequest requestInstanceOnNode( NodeInstance node, RoleStatus role, Resource resource) { OutstandingRequest outstanding = outstandingRequests.newRequest(node, role.getKey()); outstanding.buildContainerRequest(resource, role, now()); return outstanding; }
/** * Build the list of requests to cancel from the outstanding list. * @param role role * @param toCancel number to cancel * @return a list of cancellable operations. */ private synchronized List<AbstractRMOperation> cancelRequestsForSimpleRole(RoleStatus role, int toCancel) { Preconditions.checkArgument(toCancel > 0, "trying to cancel invalid number of requests: " + toCancel); List<AbstractRMOperation> results = new ArrayList<>(toCancel); // first scan through the unplaced request list to find all of a role int roleId = role.getKey(); List<OutstandingRequest> requests = outstandingRequests.extractOpenRequestsForRole(roleId, toCancel); // are there any left? int remaining = toCancel - requests.size(); // ask for some placed nodes requests.addAll(outstandingRequests.extractPlacedRequestsForRole(roleId, remaining)); // build cancellations for (OutstandingRequest request : requests) { results.add(request.createCancelOperation()); } return results; }
/** * A container has been allocated on a node -update the data structures * @param container container * @param desiredCount desired #of instances * @param actualCount current count of instances * @return The allocation outcome */ public synchronized ContainerAllocationResults onContainerAllocated(Container container, long desiredCount, long actualCount) { int role = ContainerPriority.extractRole(container); String hostname = RoleHistoryUtils.hostnameOf(container); List<NodeInstance> nodeInstances = listRecentNodesForRoleId(role); ContainerAllocationResults outcome = outstandingRequests.onContainerAllocated(role, hostname, container); if (desiredCount <= actualCount) { // all outstanding requests have been satisfied // clear all the lists, so returning nodes to the available set List<NodeInstance> hosts = outstandingRequests.resetOutstandingRequests(role); if (!hosts.isEmpty()) { //add the list log.info("Adding {} hosts for role {}", hosts.size(), role); nodeInstances.addAll(hosts); sortRecentNodeList(role); } } return outcome; }
/** * Get a snapshot of the outstanding placed request list * @return a list of the requests outstanding at the time of requesting */ @VisibleForTesting public List<OutstandingRequest> listPlacedRequests() { return outstandingRequests.listPlacedRequests(); }
/** * Reset the variables -this does not adjust the fixed attributes * of the history, but the nodemap and failed node map are cleared. */ protected synchronized void reset() throws BadConfigException { nodemap = new NodeMap(roleSize); resetAvailableNodeLists(); outstandingRequests = new OutstandingRequestTracker(); }
/** * Find a node for an AA role and request an instance on that (or a location-less * instance) * @param role role status * @return a request ready to go, or null if no location can be found. */ public synchronized OutstandingRequest requestContainerForAARole(RoleStatus role) { List<NodeInstance> nodes = findNodeForNewAAInstance(role); if (!nodes.isEmpty()) { OutstandingRequest outstanding = outstandingRequests.newAARequest( role.getKey(), nodes, role.getLabelExpression()); Resource resource = recordFactory.newResource(); role.copyResourceRequirements(resource); outstanding.buildContainerRequest(resource, role, now()); return outstanding; } else { log.warn("No suitable location for {}", role.getName()); return null; } } /**
/** * Request an instance on a given node. * An outstanding request is created & tracked, with the * relevant node entry for that role updated. *<p> * The role status entries will also be tracked * <p> * Returns the request that is now being tracked. * If the node instance is not null, it's details about the role is incremented * * @param node node to target or null for "any" * @param role role to request * @return the request */ public synchronized OutstandingRequest requestInstanceOnNode( NodeInstance node, RoleStatus role, Resource resource) { OutstandingRequest outstanding = outstandingRequests.newRequest(node, role.getKey()); outstanding.buildContainerRequest(resource, role, now()); return outstanding; }
requests = outstandingRequests.extractOpenRequestsForRole(roleId, toCancel); role.cancelOutstandingAARequest(); toCancel--; requests.addAll(outstandingRequests.extractPlacedRequestsForRole(roleId, toCancel));
/** * Get a snapshot of the outstanding placed request list * @return a list of the requests outstanding at the time of requesting */ @VisibleForTesting public List<OutstandingRequest> listOpenRequests() { return outstandingRequests.listOpenRequests(); }
/** * Escalate operation as triggered by external timer. * @return a (usually empty) list of cancel/request operations. */ public List<AbstractRMOperation> cancelOutstandingAARequests() { return outstandingRequests.cancelOutstandingAARequests(); }
/** * Escalate operation as triggered by external timer. * @return a (usually empty) list of cancel/request operations. */ public synchronized List<AbstractRMOperation> escalateOutstandingRequests() { return outstandingRequests.escalateOutstandingRequests(now()); } /**
requests = outstandingRequests.extractOpenRequestsForRole(roleId, toCancel); role.cancelOutstandingAARequest(); toCancel--; requests.addAll(outstandingRequests.extractPlacedRequestsForRole(roleId, toCancel));