/** * 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.tools.rumen; /** * {@link MachineNode} represents the configuration of a cluster node. * {@link MachineNode} should be constructed by {@link MachineNode.Builder}. */ public final class MachineNode extends Node { long memory = -1; // in KB int mapSlots = 1; int reduceSlots = 1; long memoryPerMapSlot = -1; // in KB long memoryPerReduceSlot = -1; // in KB int numCores = 1; MachineNode(String name, int level) { super(name, level); } @Override public boolean equals(Object obj) { // name/level sufficient return super.equals(obj); } @Override public int hashCode() { // match equals return super.hashCode(); } /** * Get the available physical RAM of the node. * @return The available physical RAM of the node, in KB. */ public long getMemory() { return memory; } /** * Get the number of map slots of the node. * @return The number of map slots of the node. */ public int getMapSlots() { return mapSlots; } /** * Get the number of reduce slots of the node. * @return The number of reduce slots fo the node. */ public int getReduceSlots() { return reduceSlots; } /** * Get the amount of RAM reserved for each map slot. * @return the amount of RAM reserved for each map slot, in KB. */ public long getMemoryPerMapSlot() { return memoryPerMapSlot; } /** * Get the amount of RAM reserved for each reduce slot. * @return the amount of RAM reserved for each reduce slot, in KB. */ public long getMemoryPerReduceSlot() { return memoryPerReduceSlot; } /** * Get the number of cores of the node. * @return the number of cores of the node. */ public int getNumCores() { return numCores; } /** * Get the rack node that the machine belongs to. * * @return The rack node that the machine belongs to. Returns null if the * machine does not belong to any rack. */ public RackNode getRackNode() { return (RackNode)getParent(); } @Override public synchronized boolean addChild(Node child) { throw new IllegalStateException("Cannot add child to MachineNode"); } /** * Builder for a NodeInfo object */ public static final class Builder { private MachineNode node; /** * Start building a new NodeInfo object. * @param name * Unique name of the node. Typically the fully qualified domain * name. */ public Builder(String name, int level) { node = new MachineNode(name, level); } /** * Set the physical memory of the node. * @param memory Available RAM in KB. */ public Builder setMemory(long memory) { node.memory = memory; return this; } /** * Set the number of map slot for the node. * @param mapSlots The number of map slots for the node. */ public Builder setMapSlots(int mapSlots) { node.mapSlots = mapSlots; return this; } /** * Set the number of reduce slot for the node. * @param reduceSlots The number of reduce slots for the node. */ public Builder setReduceSlots(int reduceSlots) { node.reduceSlots = reduceSlots; return this; } /** * Set the amount of RAM reserved for each map slot. * @param memoryPerMapSlot The amount of RAM reserved for each map slot, in KB. */ public Builder setMemoryPerMapSlot(long memoryPerMapSlot) { node.memoryPerMapSlot = memoryPerMapSlot; return this; } /** * Set the amount of RAM reserved for each reduce slot. * @param memoryPerReduceSlot The amount of RAM reserved for each reduce slot, in KB. */ public Builder setMemoryPerReduceSlot(long memoryPerReduceSlot) { node.memoryPerReduceSlot = memoryPerReduceSlot; return this; } /** * Set the number of cores for the node. * @param numCores Number of cores for the node. */ public Builder setNumCores(int numCores) { node.numCores = numCores; return this; } /** * Clone the settings from a reference {@link MachineNode} object. * @param ref The reference {@link MachineNode} object. */ public Builder cloneFrom(MachineNode ref) { node.memory = ref.memory; node.mapSlots = ref.mapSlots; node.reduceSlots = ref.reduceSlots; node.memoryPerMapSlot = ref.memoryPerMapSlot; node.memoryPerReduceSlot = ref.memoryPerReduceSlot; node.numCores = ref.numCores; return this; } /** * Build the {@link MachineNode} object. * @return The {@link MachineNode} object being built. */ public MachineNode build() { MachineNode retVal = node; node = null; return retVal; } } }