001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    
019    package org.apache.hadoop.yarn.api.records;
020    
021    import org.apache.hadoop.classification.InterfaceAudience.Public;
022    import org.apache.hadoop.yarn.util.Records;
023    
024    /**
025     * Used by Application Master, send a container resource increase request to
026     * Resource Manager
027     */
028    @Public
029    public abstract class ContainerResourceIncreaseRequest {
030      @Public
031      public static ContainerResourceIncreaseRequest newInstance(
032          ContainerId existingContainerId, Resource targetCapability) {
033        ContainerResourceIncreaseRequest context = Records
034            .newRecord(ContainerResourceIncreaseRequest.class);
035        context.setContainerId(existingContainerId);
036        context.setCapability(targetCapability);
037        return context;
038      }
039    
040      @Public
041      public abstract ContainerId getContainerId();
042    
043      @Public
044      public abstract void setContainerId(ContainerId containerId);
045    
046      @Public
047      public abstract Resource getCapability();
048    
049      @Public
050      public abstract void setCapability(Resource capability);
051    
052      @Override
053      public int hashCode() {
054        return getCapability().hashCode() + getContainerId().hashCode();
055      }
056      
057      @Override
058      public boolean equals(Object other) {
059        if (other instanceof ContainerResourceIncreaseRequest) {
060          ContainerResourceIncreaseRequest ctx =
061              (ContainerResourceIncreaseRequest) other;
062          
063          if (getContainerId() == null && ctx.getContainerId() != null) {
064            return false;
065          } else if (!getContainerId().equals(ctx.getContainerId())) {
066            return false;
067          }
068          
069          if (getCapability() == null && ctx.getCapability() != null) {
070            return false;
071          } else if (!getCapability().equals(ctx.getCapability())) {
072            return false;
073          }
074          
075          return true;
076        } else {
077          return false;
078        }
079      }
080    }