|
@@ -519,6 +519,11 @@ public class LeafQueue extends AbstractCSQueue {
|
|
|
return usersManager.getUser(userName);
|
|
|
}
|
|
|
|
|
|
+ @VisibleForTesting
|
|
|
+ public User getOrCreateUser(String userName) {
|
|
|
+ return usersManager.getUserAndAddIfAbsent(userName);
|
|
|
+ }
|
|
|
+
|
|
|
@Private
|
|
|
public List<AppPriorityACLGroup> getPriorityACLs() {
|
|
|
readLock.lock();
|
|
@@ -2007,7 +2012,12 @@ public class LeafQueue extends AbstractCSQueue {
|
|
|
|
|
|
public void incAMUsedResource(String nodeLabel, Resource resourceToInc,
|
|
|
SchedulerApplicationAttempt application) {
|
|
|
- getUser(application.getUser()).getResourceUsage().incAMUsed(nodeLabel,
|
|
|
+ User user = getUser(application.getUser());
|
|
|
+ if (user == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ user.getResourceUsage().incAMUsed(nodeLabel,
|
|
|
resourceToInc);
|
|
|
// ResourceUsage has its own lock, no addition lock needs here.
|
|
|
usageTracker.getQueueUsage().incAMUsed(nodeLabel, resourceToInc);
|
|
@@ -2015,7 +2025,12 @@ public class LeafQueue extends AbstractCSQueue {
|
|
|
|
|
|
public void decAMUsedResource(String nodeLabel, Resource resourceToDec,
|
|
|
SchedulerApplicationAttempt application) {
|
|
|
- getUser(application.getUser()).getResourceUsage().decAMUsed(nodeLabel,
|
|
|
+ User user = getUser(application.getUser());
|
|
|
+ if (user == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ user.getResourceUsage().decAMUsed(nodeLabel,
|
|
|
resourceToDec);
|
|
|
// ResourceUsage has its own lock, no addition lock needs here.
|
|
|
usageTracker.getQueueUsage().decAMUsed(nodeLabel, resourceToDec);
|
|
@@ -2103,7 +2118,7 @@ public class LeafQueue extends AbstractCSQueue {
|
|
|
for (FiCaSchedulerApp app : getApplications()) {
|
|
|
String userName = app.getUser();
|
|
|
if (!userNameToHeadroom.containsKey(userName)) {
|
|
|
- User user = getUser(userName);
|
|
|
+ User user = getUsersManager().getUserAndAddIfAbsent(userName);
|
|
|
Resource headroom = Resources.subtract(
|
|
|
getResourceLimitForActiveUsers(app.getUser(), clusterResources,
|
|
|
partition, SchedulingMode.RESPECT_PARTITION_EXCLUSIVITY),
|