hadoop DeSelectFields 源码

  • 2022-10-20
  • 浏览 (253)

haddop DeSelectFields 代码

文件路径:/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/DeSelectFields.java

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.hadoop.yarn.server.resourcemanager.webapp;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.hadoop.yarn.webapp.BadRequestException;

/**
 * DeSelectFields make the <code>/apps</code> api more flexible.
 * It can be used to strip off more fields if there's such use case in future.
 * You can simply extend it via two steps:
 * <br> 1. add a <code>DeSelectType</code> enum with a string literals
 * <br> 2. write your logical based on
 * the return of method contains(DeSelectType)
 */
public class DeSelectFields {
  private static final Logger LOG =
      LoggerFactory.getLogger(DeSelectFields.class.getName());

  private final Set<DeSelectType> types;

  public DeSelectFields() {
    this.types = new HashSet<DeSelectType>();
  }

  /**
   * Initial DeSelectFields with unselected fields.
   * @param unselectedFields a set of unselected field.
   */
  public void initFields(Set<String> unselectedFields) {
    if (unselectedFields == null) {
      return;
    }
    for (String field : unselectedFields) {
      if (!field.trim().isEmpty()) {
        String[] literalsArray = field.split(",");
        for (String literals : literalsArray) {
          if (literals != null && !literals.trim().isEmpty()) {
            DeSelectType type = DeSelectType.obtainType(literals);
            if (type == null) {
              LOG.warn("Invalid deSelects string " + literals.trim());
              DeSelectType[] typeArray = DeSelectType.values();
              String allSuppportLiterals = Arrays.toString(typeArray);
              throw new BadRequestException("Invalid deSelects string "
                  + literals.trim() + " specified. It should be one of "
                  + allSuppportLiterals);
            } else {
              this.types.add(type);
            }
          }
        }
      }
    }
  }

  /**
   * Determine the deselect type should be handled or not.
   * @param type deselected type
   * @return true if the deselect type should be handled
   */
  public boolean contains(DeSelectType type) {
    return types.contains(type);
  }

  /**
   * Deselect field type, can be boost in future.
   */
  public enum DeSelectType {

    /**
     * <code>RESOURCE_REQUESTS</code> is the first
     * supported type from YARN-6280.
     */
    RESOURCE_REQUESTS("resourceRequests"),
    /**
     * <code>APP_TIMEOUTS, APP_NODE_LABEL_EXPRESSION, AM_NODE_LABEL_EXPRESSION,
     * RESOURCE_INFO</code> are additionally supported parameters added in
     * YARN-6871.
     */
    TIMEOUTS("timeouts"),
    APP_NODE_LABEL_EXPRESSION("appNodeLabelExpression"),
    AM_NODE_LABEL_EXPRESSION("amNodeLabelExpression"),
    RESOURCE_INFO("resourceInfo");

    private final String literals;

    DeSelectType(String literals) {
      this.literals = literals;
    }

    /**
     * use literals as toString.
     * @return the literals of this type.
     */
    @Override
    public String toString() {
      return literals;
    }

    /**
     * Obtain the <code>DeSelectType</code> by the literals given behind
     * <code>deSelects</code> in URL.
     * <br> e.g: deSelects="resourceRequests"
     * @param literals e.g: resourceRequests
     * @return <code>DeSelectType</code> e.g: DeSelectType.RESOURCE_REQUESTS
     */
    public static DeSelectType obtainType(String literals) {
      for (DeSelectType type : values()) {
        if (type.literals.equalsIgnoreCase(literals)) {
          return type;
        }
      }
      return null;
    }
  }
}

相关信息

hadoop 源码目录

相关文章

hadoop AboutBlock 源码

hadoop AboutPage 源码

hadoop AppAttemptPage 源码

hadoop AppLogAggregationStatusPage 源码

hadoop AppPage 源码

hadoop ApplicationsRequestBuilder 源码

hadoop AppsBlockWithMetrics 源码

hadoop CapacitySchedulerPage 源码

hadoop ColumnHeader 源码

hadoop ContainerPage 源码

0  赞