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.protocolrecords; 020 021 import java.nio.ByteBuffer; 022 import java.util.List; 023 import java.util.Map; 024 025 import org.apache.hadoop.classification.InterfaceAudience.Private; 026 import org.apache.hadoop.classification.InterfaceAudience.Public; 027 import org.apache.hadoop.classification.InterfaceStability.Stable; 028 import org.apache.hadoop.classification.InterfaceStability.Unstable; 029 import org.apache.hadoop.yarn.api.ApplicationMasterProtocol; 030 import org.apache.hadoop.yarn.api.records.ApplicationAccessType; 031 import org.apache.hadoop.yarn.api.records.Container; 032 import org.apache.hadoop.yarn.api.records.NMToken; 033 import org.apache.hadoop.yarn.api.records.Resource; 034 import org.apache.hadoop.yarn.util.Records; 035 036 /** 037 * <p>The response sent by the <code>ResourceManager</code> to a new 038 * <code>ApplicationMaster</code> on registration.</p> 039 * 040 * <p>The response contains critical details such as: 041 * <ul> 042 * <li>Maximum capability for allocated resources in the cluster.</li> 043 * <li><code>ApplicationACL</code>s for the application.</li> 044 * <li>ClientToAMToken master key.</li> 045 * </ul> 046 * </p> 047 * 048 * @see ApplicationMasterProtocol#registerApplicationMaster(RegisterApplicationMasterRequest) 049 */ 050 @Public 051 @Stable 052 public abstract class RegisterApplicationMasterResponse { 053 054 @Private 055 @Unstable 056 public static RegisterApplicationMasterResponse newInstance( 057 Resource minCapability, Resource maxCapability, 058 Map<ApplicationAccessType, String> acls, ByteBuffer key, 059 List<Container> containersFromPreviousAttempt, String queue, 060 List<NMToken> nmTokensFromPreviousAttempts) { 061 RegisterApplicationMasterResponse response = 062 Records.newRecord(RegisterApplicationMasterResponse.class); 063 response.setMaximumResourceCapability(maxCapability); 064 response.setApplicationACLs(acls); 065 response.setClientToAMTokenMasterKey(key); 066 response.setContainersFromPreviousAttempts(containersFromPreviousAttempt); 067 response.setNMTokensFromPreviousAttempts(nmTokensFromPreviousAttempts); 068 response.setQueue(queue); 069 return response; 070 } 071 072 /** 073 * Get the maximum capability for any {@link Resource} allocated by the 074 * <code>ResourceManager</code> in the cluster. 075 * @return maximum capability of allocated resources in the cluster 076 */ 077 @Public 078 @Stable 079 public abstract Resource getMaximumResourceCapability(); 080 081 @Private 082 @Unstable 083 public abstract void setMaximumResourceCapability(Resource capability); 084 085 /** 086 * Get the <code>ApplicationACL</code>s for the application. 087 * @return all the <code>ApplicationACL</code>s 088 */ 089 @Public 090 @Stable 091 public abstract Map<ApplicationAccessType, String> getApplicationACLs(); 092 093 /** 094 * Set the <code>ApplicationACL</code>s for the application. 095 * @param acls 096 */ 097 @Private 098 @Unstable 099 public abstract void setApplicationACLs(Map<ApplicationAccessType, String> acls); 100 101 /** 102 * <p>Get ClientToAMToken master key.</p> 103 * <p>The ClientToAMToken master key is sent to <code>ApplicationMaster</code> 104 * by <code>ResourceManager</code> via {@link RegisterApplicationMasterResponse} 105 * , used to verify corresponding ClientToAMToken.</p> 106 */ 107 @Public 108 @Stable 109 public abstract ByteBuffer getClientToAMTokenMasterKey(); 110 111 /** 112 * Set ClientToAMToken master key. 113 */ 114 @Public 115 @Stable 116 public abstract void setClientToAMTokenMasterKey(ByteBuffer key); 117 118 /** 119 * <p>Get the queue that the application was placed in.<p> 120 */ 121 @Public 122 @Stable 123 public abstract String getQueue(); 124 125 /** 126 * <p>Set the queue that the application was placed in.<p> 127 */ 128 @Public 129 @Stable 130 public abstract void setQueue(String queue); 131 132 /** 133 * <p> 134 * Get the list of running containers as viewed by 135 * <code>ResourceManager</code> from previous application attempts. 136 * </p> 137 * 138 * @return the list of running containers as viewed by 139 * <code>ResourceManager</code> from previous application attempts 140 * @see RegisterApplicationMasterResponse#getNMTokensFromPreviousAttempts() 141 */ 142 @Public 143 @Unstable 144 public abstract List<Container> getContainersFromPreviousAttempts(); 145 146 /** 147 * Set the list of running containers as viewed by 148 * <code>ResourceManager</code> from previous application attempts. 149 * 150 * @param containersFromPreviousAttempt 151 * the list of running containers as viewed by 152 * <code>ResourceManager</code> from previous application attempts. 153 */ 154 @Private 155 @Unstable 156 public abstract void setContainersFromPreviousAttempts( 157 List<Container> containersFromPreviousAttempt); 158 159 /** 160 * Get the list of NMTokens for communicating with the NMs where the 161 * containers of previous application attempts are running. 162 * 163 * @return the list of NMTokens for communicating with the NMs where the 164 * containers of previous application attempts are running. 165 * 166 * @see RegisterApplicationMasterResponse#getContainersFromPreviousAttempts() 167 */ 168 @Public 169 @Stable 170 public abstract List<NMToken> getNMTokensFromPreviousAttempts(); 171 172 /** 173 * Set the list of NMTokens for communicating with the NMs where the the 174 * containers of previous application attempts are running. 175 * 176 * @param nmTokens 177 * the list of NMTokens for communicating with the NMs where the 178 * containers of previous application attempts are running. 179 */ 180 @Private 181 @Unstable 182 public abstract void setNMTokensFromPreviousAttempts(List<NMToken> nmTokens); 183 }