/*********************************************************************************************************************** * Copyright (C) 2010-2013 by the Stratosphere project (http://stratosphere.eu) * * Licensed 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 eu.stratosphere.nephele.instance; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import eu.stratosphere.core.io.IOReadableWritable; import eu.stratosphere.core.io.StringRecord; /** * An instance type describes the hardware resources a task manager runs on. According * to its type an instance has a specific number of CPU cores, computation units, a certain * amount of main memory and disk space. In addition, it has a specific price per hour. * */ public final class InstanceType implements IOReadableWritable { /** * The identifier for this instance type. */ private String identifier; /** * The number of computational units of this instance type. * A computational unit is a virtual compute capacity. A host with a * single-core 2 GHz CPU may possess 20 compute units (1*20), while a * dual-core 2.5 GHz CPU may possess 50 compute units (2*25). The * specified number of compute units expresses the fraction of the * CPU capacity promised to a user. */ private int numberOfComputeUnits = 0; /** * The number of CPU cores of this instance type. */ private int numberOfCores = 0; /** * The amount of main memory of this instance type (in MB). */ private int memorySize = 0; /** * The disk capacity of this instance type (in GB). */ private int diskCapacity = 0; /** * The price per hour that is charged for running instances of this type. */ private int pricePerHour = 0; /** * Public constructor required for the serialization process. */ public InstanceType() { } /** * Creates a new instance type. * * @param identifier * identifier for this instance type * @param numberOfComputeUnits * number of computational units of this instance type * @param numberOfCores * number of CPU cores of this instance type * @param memorySize * amount of main memory of this instance type (in MB) * @param diskCapacity * disk capacity of this instance type (in GB) * @param pricePerHour * price per hour that is charged for running instances of this type */ InstanceType(final String identifier, final int numberOfComputeUnits, final int numberOfCores, final int memorySize, final int diskCapacity, final int pricePerHour) { this.identifier = identifier; this.numberOfComputeUnits = numberOfComputeUnits; this.numberOfCores = numberOfCores; this.memorySize = memorySize; this.diskCapacity = diskCapacity; this.pricePerHour = pricePerHour; } /** * Returns the instance type's number of computational units. * * @return the instance type's number of computational units */ public int getNumberOfComputeUnits() { return this.numberOfComputeUnits; } /** * Returns the instance type's number of CPU cores. * * @return the instance type's number of CPU cores */ public int getNumberOfCores() { return this.numberOfCores; } /** * Returns the instance type's amount of main memory. * * @return the instance type's amount of main memory */ public int getMemorySize() { return this.memorySize; } /** * Returns the instance type's disk capacity. * * @return the instance type's disk capacity */ public int getDiskCapacity() { return this.diskCapacity; } /** * Returns the instance type's price per hour. * * @return the instance type's price per hour */ public int getPricePerHour() { return this.pricePerHour; } /** * Returns the instance type's identifier. * * @return the instance type's identifier */ public String getIdentifier() { return this.identifier; } @Override public String toString() { final StringBuilder bld = new StringBuilder(32); bld.append(this.identifier); bld.append(' '); bld.append('('); bld.append(this.numberOfComputeUnits); bld.append(','); bld.append(this.numberOfCores); bld.append(','); bld.append(this.memorySize); bld.append(','); bld.append(this.diskCapacity); bld.append(','); bld.append(this.pricePerHour); bld.append(')'); return bld.toString(); } @Override public void write(final DataOutput out) throws IOException { StringRecord.writeString(out, this.identifier); out.writeInt(this.numberOfComputeUnits); out.writeInt(this.numberOfCores); out.writeInt(this.memorySize); out.writeInt(this.diskCapacity); out.writeInt(this.pricePerHour); } @Override public void read(final DataInput in) throws IOException { this.identifier = StringRecord.readString(in); this.numberOfComputeUnits = in.readInt(); this.numberOfCores = in.readInt(); this.memorySize = in.readInt(); this.diskCapacity = in.readInt(); this.pricePerHour = in.readInt(); } }