From bc0269046e695599cd96803d89e6aaca91110cf0 Mon Sep 17 00:00:00 2001 From: Yu-Tang Lin Date: Sun, 13 Aug 2017 17:51:33 +0800 Subject: [PATCH] YARN-6885 minor refactor the AllocationFileLoaderService.loadQueue() and AllocationFileLoaderService.reloadAllocations() --- .../fair/AllocationFileLoaderService.java | 238 +++++++++++++++------ 1 file changed, 171 insertions(+), 67 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationFileLoaderService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationFileLoaderService.java index bc204cb..dac48b2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationFileLoaderService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AllocationFileLoaderService.java @@ -286,10 +286,17 @@ public synchronized void reloadAllocations() throws IOException, Node node = elements.item(i); if (node instanceof Element) { Element element = (Element)node; - if ("queue".equals(element.getTagName()) || - "pool".equals(element.getTagName())) { + String tagName = element.getTagName(); + + switch(tagName) { + case "queue": + case "pool": + { queueElements.add(element); - } else if ("user".equals(element.getTagName())) { + break; + } + case "user": + { String userName = element.getAttribute("name"); NodeList fields = element.getChildNodes(); for (int j = 0; j < fields.getLength(); j++) { @@ -299,72 +306,111 @@ public synchronized void reloadAllocations() throws IOException, Element field = (Element) fieldNode; if ("maxRunningApps".equals(field.getTagName())) { String text = ((Text)field.getFirstChild()).getData().trim(); - int val = Integer.parseInt(text); + Integer val = Integer.parseInt(text); userMaxApps.put(userName, val); } } - } else if ("queueMaxResourcesDefault".equals(element.getTagName())) { + } + break; + case "queueMaxResourcesDefault": + { String text = ((Text)element.getFirstChild()).getData().trim(); Resource val = - FairSchedulerConfiguration.parseResourceConfigValue(text); + FairSchedulerConfiguration.parseResourceConfigValue(text); queueMaxResourcesDefault = val; - } else if ("userMaxAppsDefault".equals(element.getTagName())) { + } + break; + case "userMaxAppsDefault": + { String text = ((Text)element.getFirstChild()).getData().trim(); - int val = Integer.parseInt(text); + Integer val = Integer.parseInt(text); userMaxAppsDefault = val; - } else if ("defaultFairSharePreemptionTimeout" - .equals(element.getTagName())) { + } + break; + case "defaultFairSharePreemptionTimeout": + { String text = ((Text)element.getFirstChild()).getData().trim(); - long val = Long.parseLong(text) * 1000L; + Long val = Long.parseLong(text) * 1000L; defaultFairSharePreemptionTimeout = val; - } else if ("fairSharePreemptionTimeout".equals(element.getTagName())) { + } + break; + case "fairSharePreemptionTimeout": + { if (defaultFairSharePreemptionTimeout == Long.MAX_VALUE) { String text = ((Text)element.getFirstChild()).getData().trim(); - long val = Long.parseLong(text) * 1000L; + Long val = Long.parseLong(text) * 1000L; defaultFairSharePreemptionTimeout = val; } - } else if ("defaultMinSharePreemptionTimeout" - .equals(element.getTagName())) { + } + break; + case "defaultMinSharePreemptionTimeout": + { String text = ((Text)element.getFirstChild()).getData().trim(); - long val = Long.parseLong(text) * 1000L; + Long val = Long.parseLong(text) * 1000L; defaultMinSharePreemptionTimeout = val; - } else if ("defaultFairSharePreemptionThreshold" - .equals(element.getTagName())) { + } + break; + case "defaultFairSharePreemptionThreshold": + { String text = ((Text)element.getFirstChild()).getData().trim(); float val = Float.parseFloat(text); val = Math.max(Math.min(val, 1.0f), 0.0f); defaultFairSharePreemptionThreshold = val; - } else if ("queueMaxAppsDefault".equals(element.getTagName())) { + } + break; + case "queueMaxAppsDefault": + { String text = ((Text)element.getFirstChild()).getData().trim(); - int val = Integer.parseInt(text); + Integer val = Integer.parseInt(text); queueMaxAppsDefault = val; - } else if ("queueMaxAMShareDefault".equals(element.getTagName())) { + } + break; + case "queueMaxAMShareDefault": + { String text = ((Text)element.getFirstChild()).getData().trim(); - float val = Float.parseFloat(text); + Float val = Float.parseFloat(text); val = Math.min(val, 1.0f); queueMaxAMShareDefault = val; - } else if ("defaultQueueSchedulingPolicy".equals(element.getTagName()) - || "defaultQueueSchedulingMode".equals(element.getTagName())) { + } + break; + case "defaultQueueSchedulingPolicy": + case "defaultQueueSchedulingMode": + { String text = ((Text)element.getFirstChild()).getData().trim(); if (text.equalsIgnoreCase(FifoPolicy.NAME)) { throw new AllocationConfigurationException("Bad fair scheduler " - + "config file: defaultQueueSchedulingPolicy or " - + "defaultQueueSchedulingMode can't be FIFO."); + + "config file: defaultQueueSchedulingPolicy or " + + "defaultQueueSchedulingMode can't be FIFO."); } defaultSchedPolicy = SchedulingPolicy.parse(text); - } else if ("queuePlacementPolicy".equals(element.getTagName())) { + } + break; + case "queuePlacementPolicy": + { placementPolicyElement = element; - } else if ("reservation-planner".equals(element.getTagName())) { + } + break; + case "reservation-planner": + { String text = ((Text) element.getFirstChild()).getData().trim(); planner = text; - } else if ("reservation-agent".equals(element.getTagName())) { + } + break; + case "reservation-agent": + { String text = ((Text) element.getFirstChild()).getData().trim(); reservationAgent = text; - } else if ("reservation-policy".equals(element.getTagName())) { + } + break; + case "reservation-policy": + { String text = ((Text) element.getFirstChild()).getData().trim(); reservationAdmissionPolicy = text; - } else { + } + break; + default: LOG.warn("Bad element in allocations file: " + element.getTagName()); + break; } } } @@ -493,88 +539,146 @@ private void loadQueue(String parentName, Element element, if (!(fieldNode instanceof Element)) continue; Element field = (Element) fieldNode; - if ("minResources".equals(field.getTagName())) { + String tagName = field.getTagName(); + switch(tagName) { + case "minResources": + { String text = ((Text)field.getFirstChild()).getData().trim(); Resource val = FairSchedulerConfiguration.parseResourceConfigValue(text); minQueueResources.put(queueName, val); - } else if ("maxResources".equals(field.getTagName())) { + } + break; + case "maxResources": + { String text = ((Text)field.getFirstChild()).getData().trim(); Resource val = FairSchedulerConfiguration.parseResourceConfigValue(text); maxQueueResources.put(queueName, val); - } else if ("maxChildResources".equals(field.getTagName())) { + } + break; + case "maxChildResources": + { String text = ((Text)field.getFirstChild()).getData().trim(); Resource val = FairSchedulerConfiguration.parseResourceConfigValue(text); maxChildQueueResources.put(queueName, val); - } else if ("maxRunningApps".equals(field.getTagName())) { + } + break; + case "maxRunningApps": + { String text = ((Text)field.getFirstChild()).getData().trim(); - int val = Integer.parseInt(text); + Integer val = Integer.parseInt(text); queueMaxApps.put(queueName, val); - } else if ("maxAMShare".equals(field.getTagName())) { + } + break; + case "maxAMShare": + { String text = ((Text)field.getFirstChild()).getData().trim(); - float val = Float.parseFloat(text); + Float val = Float.parseFloat(text); val = Math.min(val, 1.0f); - queueMaxAMShares.put(queueName, val); - } else if ("weight".equals(field.getTagName())) { + queueMaxAMShares.put(queueName, (Float)val); + } + break; + case "weight": + { String text = ((Text)field.getFirstChild()).getData().trim(); double val = Double.parseDouble(text); queueWeights.put(queueName, new ResourceWeights((float)val)); - } else if ("minSharePreemptionTimeout".equals(field.getTagName())) { + } + break; + case "minSharePreemptionTimeout": + { String text = ((Text)field.getFirstChild()).getData().trim(); - long val = Long.parseLong(text) * 1000L; + Long val = Long.parseLong(text) * 1000L; minSharePreemptionTimeouts.put(queueName, val); - } else if ("fairSharePreemptionTimeout".equals(field.getTagName())) { + } + break; + case "fairSharePreemptionTimeout": + { String text = ((Text)field.getFirstChild()).getData().trim(); - long val = Long.parseLong(text) * 1000L; + Long val = Long.parseLong(text) * 1000L; fairSharePreemptionTimeouts.put(queueName, val); - } else if ("fairSharePreemptionThreshold".equals(field.getTagName())) { + } + break; + case "fairSharePreemptionThreshold": + { String text = ((Text)field.getFirstChild()).getData().trim(); float val = Float.parseFloat(text); val = Math.max(Math.min(val, 1.0f), 0.0f); fairSharePreemptionThresholds.put(queueName, val); - } else if ("schedulingPolicy".equals(field.getTagName()) - || "schedulingMode".equals(field.getTagName())) { + } + break; + case "schedulingPolicy": + case "schedulingMode": + { String text = ((Text)field.getFirstChild()).getData().trim(); SchedulingPolicy policy = SchedulingPolicy.parse(text); queuePolicies.put(queueName, policy); - } else if ("aclSubmitApps".equals(field.getTagName())) { + } + break; + case "aclSubmitApps": + { String text = ((Text)field.getFirstChild()).getData(); acls.put(AccessType.SUBMIT_APP, new AccessControlList(text)); - } else if ("aclAdministerApps".equals(field.getTagName())) { + } + break; + case "aclAdministerApps": + { String text = ((Text)field.getFirstChild()).getData(); acls.put(AccessType.ADMINISTER_QUEUE, new AccessControlList(text)); - } else if ("aclAdministerReservations".equals(field.getTagName())) { + } + break; + case "aclAdministerReservations": + { String text = ((Text)field.getFirstChild()).getData(); racls.put(ReservationACL.ADMINISTER_RESERVATIONS, - new AccessControlList(text)); - } else if ("aclListReservations".equals(field.getTagName())) { + new AccessControlList(text)); + } + break; + case "aclListReservations": + { String text = ((Text)field.getFirstChild()).getData(); - racls.put(ReservationACL.LIST_RESERVATIONS, new AccessControlList( - text)); - } else if ("aclSubmitReservations".equals(field.getTagName())) { + racls.put(ReservationACL.LIST_RESERVATIONS, + new AccessControlList(text)); + } + break; + case "aclSubmitReservations": + { String text = ((Text)field.getFirstChild()).getData(); racls.put(ReservationACL.SUBMIT_RESERVATIONS, - new AccessControlList(text)); - } else if ("reservation".equals(field.getTagName())) { + new AccessControlList(text)); + } + break; + case "reservation": + { isReservable = true; reservableQueues.add(queueName); configuredQueues.get(FSQueueType.PARENT).add(queueName); - } else if ("allowPreemptionFrom".equals(field.getTagName())) { + } + break; + case "allowPreemptionFrom": + { String text = ((Text)field.getFirstChild()).getData().trim(); if (!Boolean.parseBoolean(text)) { nonPreemptableQueues.add(queueName); } - } else if ("queue".endsWith(field.getTagName()) || - "pool".equals(field.getTagName())) { - loadQueue(queueName, field, minQueueResources, maxQueueResources, - maxChildQueueResources, queueMaxApps, userMaxApps, queueMaxAMShares, - queueWeights, queuePolicies, minSharePreemptionTimeouts, - fairSharePreemptionTimeouts, fairSharePreemptionThresholds, - queueAcls, resAcls, configuredQueues, reservableQueues, - nonPreemptableQueues); - isLeaf = false; + } + break; + default: + { + if ("queue".endsWith(field.getTagName()) || + "pool".equals(field.getTagName())) { + loadQueue(queueName, field, minQueueResources, maxQueueResources, + maxChildQueueResources, queueMaxApps, userMaxApps, + queueMaxAMShares, queueWeights, queuePolicies, + minSharePreemptionTimeouts, fairSharePreemptionTimeouts, + fairSharePreemptionThresholds, queueAcls, resAcls, + configuredQueues, reservableQueues, nonPreemptableQueues); + isLeaf = false; + } + } + break; } } -- 2.10.0