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; 020 021 import java.io.IOException; 022 023 import org.apache.hadoop.classification.InterfaceAudience.Private; 024 import org.apache.hadoop.classification.InterfaceAudience.Public; 025 import org.apache.hadoop.classification.InterfaceStability.Stable; 026 import org.apache.hadoop.classification.InterfaceStability.Unstable; 027 import org.apache.hadoop.io.retry.Idempotent; 028 import org.apache.hadoop.yarn.api.protocolrecords.CancelDelegationTokenRequest; 029 import org.apache.hadoop.yarn.api.protocolrecords.CancelDelegationTokenResponse; 030 import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportRequest; 031 import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportResponse; 032 import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsRequest; 033 import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsResponse; 034 import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest; 035 import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportResponse; 036 import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest; 037 import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse; 038 import org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsRequest; 039 import org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsResponse; 040 import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsRequest; 041 import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse; 042 import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesRequest; 043 import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesResponse; 044 import org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportRequest; 045 import org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportResponse; 046 import org.apache.hadoop.yarn.api.protocolrecords.GetContainersRequest; 047 import org.apache.hadoop.yarn.api.protocolrecords.GetContainersResponse; 048 import org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenRequest; 049 import org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenResponse; 050 import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationRequest; 051 import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationResponse; 052 import org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsRequest; 053 import org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsResponse; 054 import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest; 055 import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse; 056 import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest; 057 import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; 058 import org.apache.hadoop.yarn.api.protocolrecords.KillApplicationRequest; 059 import org.apache.hadoop.yarn.api.protocolrecords.KillApplicationResponse; 060 import org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesRequest; 061 import org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesResponse; 062 import org.apache.hadoop.yarn.api.protocolrecords.RenewDelegationTokenRequest; 063 import org.apache.hadoop.yarn.api.protocolrecords.RenewDelegationTokenResponse; 064 import org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteRequest; 065 import org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteResponse; 066 import org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionRequest; 067 import org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionResponse; 068 import org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateRequest; 069 import org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateResponse; 070 import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest; 071 import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationResponse; 072 import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; 073 import org.apache.hadoop.yarn.api.records.ApplicationAttemptReport; 074 import org.apache.hadoop.yarn.api.records.ApplicationId; 075 import org.apache.hadoop.yarn.api.records.ApplicationReport; 076 import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext; 077 import org.apache.hadoop.yarn.api.records.ContainerId; 078 import org.apache.hadoop.yarn.api.records.ContainerLaunchContext; 079 import org.apache.hadoop.yarn.api.records.ContainerReport; 080 import org.apache.hadoop.yarn.api.records.NodeReport; 081 import org.apache.hadoop.yarn.api.records.ReservationId; 082 import org.apache.hadoop.yarn.api.records.Resource; 083 import org.apache.hadoop.yarn.api.records.ResourceRequest; 084 import org.apache.hadoop.yarn.api.records.Token; 085 import org.apache.hadoop.yarn.api.records.YarnClusterMetrics; 086 import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException; 087 import org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException; 088 import org.apache.hadoop.yarn.exceptions.YarnException; 089 090 /** 091 * <p>The protocol between clients and the <code>ResourceManager</code> 092 * to submit/abort jobs and to get information on applications, cluster metrics, 093 * nodes, queues and ACLs.</p> 094 */ 095 @Public 096 @Stable 097 public interface ApplicationClientProtocol { 098 /** 099 * <p>The interface used by clients to obtain a new {@link ApplicationId} for 100 * submitting new applications.</p> 101 * 102 * <p>The <code>ResourceManager</code> responds with a new, monotonically 103 * increasing, {@link ApplicationId} which is used by the client to submit 104 * a new application.</p> 105 * 106 * <p>The <code>ResourceManager</code> also responds with details such 107 * as maximum resource capabilities in the cluster as specified in 108 * {@link GetNewApplicationResponse}.</p> 109 * 110 * @param request request to get a new <code>ApplicationId</code> 111 * @return response containing the new <code>ApplicationId</code> to be used 112 * to submit an application 113 * @throws YarnException 114 * @throws IOException 115 * @see #submitApplication(SubmitApplicationRequest) 116 */ 117 @Public 118 @Stable 119 @Idempotent 120 public GetNewApplicationResponse getNewApplication( 121 GetNewApplicationRequest request) 122 throws YarnException, IOException; 123 124 /** 125 * <p>The interface used by clients to submit a new application to the 126 * <code>ResourceManager.</code></p> 127 * 128 * <p>The client is required to provide details such as queue, 129 * {@link Resource} required to run the <code>ApplicationMaster</code>, 130 * the equivalent of {@link ContainerLaunchContext} for launching 131 * the <code>ApplicationMaster</code> etc. via the 132 * {@link SubmitApplicationRequest}.</p> 133 * 134 * <p>Currently the <code>ResourceManager</code> sends an immediate (empty) 135 * {@link SubmitApplicationResponse} on accepting the submission and throws 136 * an exception if it rejects the submission. However, this call needs to be 137 * followed by {@link #getApplicationReport(GetApplicationReportRequest)} 138 * to make sure that the application gets properly submitted - obtaining a 139 * {@link SubmitApplicationResponse} from ResourceManager doesn't guarantee 140 * that RM 'remembers' this application beyond failover or restart. If RM 141 * failover or RM restart happens before ResourceManager saves the 142 * application's state successfully, the subsequent 143 * {@link #getApplicationReport(GetApplicationReportRequest)} will throw 144 * a {@link ApplicationNotFoundException}. The Clients need to re-submit 145 * the application with the same {@link ApplicationSubmissionContext} when 146 * it encounters the {@link ApplicationNotFoundException} on the 147 * {@link #getApplicationReport(GetApplicationReportRequest)} call.</p> 148 * 149 * <p>During the submission process, it checks whether the application 150 * already exists. If the application exists, it will simply return 151 * SubmitApplicationResponse</p> 152 * 153 * <p> In secure mode,the <code>ResourceManager</code> verifies access to 154 * queues etc. before accepting the application submission.</p> 155 * 156 * @param request request to submit a new application 157 * @return (empty) response on accepting the submission 158 * @throws YarnException 159 * @throws IOException 160 * @throws InvalidResourceRequestException 161 * The exception is thrown when a {@link ResourceRequest} is out of 162 * the range of the configured lower and upper resource boundaries. 163 * @see #getNewApplication(GetNewApplicationRequest) 164 */ 165 @Public 166 @Stable 167 @Idempotent 168 public SubmitApplicationResponse submitApplication( 169 SubmitApplicationRequest request) 170 throws YarnException, IOException; 171 172 /** 173 * <p>The interface used by clients to request the 174 * <code>ResourceManager</code> to abort submitted application.</p> 175 * 176 * <p>The client, via {@link KillApplicationRequest} provides the 177 * {@link ApplicationId} of the application to be aborted.</p> 178 * 179 * <p> In secure mode,the <code>ResourceManager</code> verifies access to the 180 * application, queue etc. before terminating the application.</p> 181 * 182 * <p>Currently, the <code>ResourceManager</code> returns an empty response 183 * on success and throws an exception on rejecting the request.</p> 184 * 185 * @param request request to abort a submitted application 186 * @return <code>ResourceManager</code> returns an empty response 187 * on success and throws an exception on rejecting the request 188 * @throws YarnException 189 * @throws IOException 190 * @see #getQueueUserAcls(GetQueueUserAclsInfoRequest) 191 */ 192 @Public 193 @Stable 194 @Idempotent 195 public KillApplicationResponse forceKillApplication( 196 KillApplicationRequest request) 197 throws YarnException, IOException; 198 199 /** 200 * <p>The interface used by clients to get a report of an Application from 201 * the <code>ResourceManager</code>.</p> 202 * 203 * <p>The client, via {@link GetApplicationReportRequest} provides the 204 * {@link ApplicationId} of the application.</p> 205 * 206 * <p> In secure mode,the <code>ResourceManager</code> verifies access to the 207 * application, queue etc. before accepting the request.</p> 208 * 209 * <p>The <code>ResourceManager</code> responds with a 210 * {@link GetApplicationReportResponse} which includes the 211 * {@link ApplicationReport} for the application.</p> 212 * 213 * <p>If the user does not have <code>VIEW_APP</code> access then the 214 * following fields in the report will be set to stubbed values: 215 * <ul> 216 * <li>host - set to "N/A"</li> 217 * <li>RPC port - set to -1</li> 218 * <li>client token - set to "N/A"</li> 219 * <li>diagnostics - set to "N/A"</li> 220 * <li>tracking URL - set to "N/A"</li> 221 * <li>original tracking URL - set to "N/A"</li> 222 * <li>resource usage report - all values are -1</li> 223 * </ul></p> 224 * 225 * @param request request for an application report 226 * @return application report 227 * @throws YarnException 228 * @throws IOException 229 */ 230 @Public 231 @Stable 232 @Idempotent 233 public GetApplicationReportResponse getApplicationReport( 234 GetApplicationReportRequest request) 235 throws YarnException, IOException; 236 237 /** 238 * <p>The interface used by clients to get metrics about the cluster from 239 * the <code>ResourceManager</code>.</p> 240 * 241 * <p>The <code>ResourceManager</code> responds with a 242 * {@link GetClusterMetricsResponse} which includes the 243 * {@link YarnClusterMetrics} with details such as number of current 244 * nodes in the cluster.</p> 245 * 246 * @param request request for cluster metrics 247 * @return cluster metrics 248 * @throws YarnException 249 * @throws IOException 250 */ 251 @Public 252 @Stable 253 @Idempotent 254 public GetClusterMetricsResponse getClusterMetrics( 255 GetClusterMetricsRequest request) 256 throws YarnException, IOException; 257 258 /** 259 * <p>The interface used by clients to get a report of Applications 260 * matching the filters defined by {@link GetApplicationsRequest} 261 * in the cluster from the <code>ResourceManager</code>.</p> 262 * 263 * <p>The <code>ResourceManager</code> responds with a 264 * {@link GetApplicationsResponse} which includes the 265 * {@link ApplicationReport} for the applications.</p> 266 * 267 * <p>If the user does not have <code>VIEW_APP</code> access for an 268 * application then the corresponding report will be filtered as 269 * described in {@link #getApplicationReport(GetApplicationReportRequest)}. 270 * </p> 271 * 272 * @param request request for report on applications 273 * @return report on applications matching the given application types 274 * defined in the request 275 * @throws YarnException 276 * @throws IOException 277 * @see GetApplicationsRequest 278 */ 279 @Public 280 @Stable 281 @Idempotent 282 public GetApplicationsResponse getApplications( 283 GetApplicationsRequest request) 284 throws YarnException, IOException; 285 286 /** 287 * <p>The interface used by clients to get a report of all nodes 288 * in the cluster from the <code>ResourceManager</code>.</p> 289 * 290 * <p>The <code>ResourceManager</code> responds with a 291 * {@link GetClusterNodesResponse} which includes the 292 * {@link NodeReport} for all the nodes in the cluster.</p> 293 * 294 * @param request request for report on all nodes 295 * @return report on all nodes 296 * @throws YarnException 297 * @throws IOException 298 */ 299 @Public 300 @Stable 301 @Idempotent 302 public GetClusterNodesResponse getClusterNodes( 303 GetClusterNodesRequest request) 304 throws YarnException, IOException; 305 306 /** 307 * <p>The interface used by clients to get information about <em>queues</em> 308 * from the <code>ResourceManager</code>.</p> 309 * 310 * <p>The client, via {@link GetQueueInfoRequest}, can ask for details such 311 * as used/total resources, child queues, running applications etc.</p> 312 * 313 * <p> In secure mode,the <code>ResourceManager</code> verifies access before 314 * providing the information.</p> 315 * 316 * @param request request to get queue information 317 * @return queue information 318 * @throws YarnException 319 * @throws IOException 320 */ 321 @Public 322 @Stable 323 @Idempotent 324 public GetQueueInfoResponse getQueueInfo( 325 GetQueueInfoRequest request) 326 throws YarnException, IOException; 327 328 /** 329 * <p>The interface used by clients to get information about <em>queue 330 * acls</em> for <em>current user</em> from the <code>ResourceManager</code>. 331 * </p> 332 * 333 * <p>The <code>ResourceManager</code> responds with queue acls for all 334 * existing queues.</p> 335 * 336 * @param request request to get queue acls for <em>current user</em> 337 * @return queue acls for <em>current user</em> 338 * @throws YarnException 339 * @throws IOException 340 */ 341 @Public 342 @Stable 343 @Idempotent 344 public GetQueueUserAclsInfoResponse getQueueUserAcls( 345 GetQueueUserAclsInfoRequest request) 346 throws YarnException, IOException; 347 348 /** 349 * <p>The interface used by clients to get delegation token, enabling the 350 * containers to be able to talk to the service using those tokens. 351 * 352 * <p> The <code>ResourceManager</code> responds with the delegation 353 * {@link Token} that can be used by the client to speak to this 354 * service. 355 * @param request request to get a delegation token for the client. 356 * @return delegation token that can be used to talk to this service 357 * @throws YarnException 358 * @throws IOException 359 */ 360 @Public 361 @Stable 362 @Idempotent 363 public GetDelegationTokenResponse getDelegationToken( 364 GetDelegationTokenRequest request) 365 throws YarnException, IOException; 366 367 /** 368 * Renew an existing delegation {@link Token}. 369 * 370 * @param request the delegation token to be renewed. 371 * @return the new expiry time for the delegation token. 372 * @throws YarnException 373 * @throws IOException 374 */ 375 @Private 376 @Unstable 377 @Idempotent 378 public RenewDelegationTokenResponse renewDelegationToken( 379 RenewDelegationTokenRequest request) throws YarnException, 380 IOException; 381 382 /** 383 * Cancel an existing delegation {@link Token}. 384 * 385 * @param request the delegation token to be cancelled. 386 * @return an empty response. 387 * @throws YarnException 388 * @throws IOException 389 */ 390 @Private 391 @Unstable 392 @Idempotent 393 public CancelDelegationTokenResponse cancelDelegationToken( 394 CancelDelegationTokenRequest request) throws YarnException, 395 IOException; 396 397 /** 398 * Move an application to a new queue. 399 * 400 * @param request the application ID and the target queue 401 * @return an empty response 402 * @throws YarnException 403 * @throws IOException 404 */ 405 @Public 406 @Unstable 407 @Idempotent 408 public MoveApplicationAcrossQueuesResponse moveApplicationAcrossQueues( 409 MoveApplicationAcrossQueuesRequest request) throws YarnException, IOException; 410 411 /** 412 * <p> 413 * The interface used by clients to get a report of an Application Attempt 414 * from the <code>ResourceManager</code> 415 * </p> 416 * 417 * <p> 418 * The client, via {@link GetApplicationAttemptReportRequest} provides the 419 * {@link ApplicationAttemptId} of the application attempt. 420 * </p> 421 * 422 * <p> 423 * In secure mode,the <code>ResourceManager</code> verifies access to 424 * the method before accepting the request. 425 * </p> 426 * 427 * <p> 428 * The <code>ResourceManager</code> responds with a 429 * {@link GetApplicationAttemptReportResponse} which includes the 430 * {@link ApplicationAttemptReport} for the application attempt. 431 * </p> 432 * 433 * <p> 434 * If the user does not have <code>VIEW_APP</code> access then the following 435 * fields in the report will be set to stubbed values: 436 * <ul> 437 * <li>host</li> 438 * <li>RPC port</li> 439 * <li>client token</li> 440 * <li>diagnostics - set to "N/A"</li> 441 * <li>tracking URL</li> 442 * </ul> 443 * </p> 444 * 445 * @param request 446 * request for an application attempt report 447 * @return application attempt report 448 * @throws YarnException 449 * @throws IOException 450 */ 451 @Public 452 @Unstable 453 @Idempotent 454 public GetApplicationAttemptReportResponse getApplicationAttemptReport( 455 GetApplicationAttemptReportRequest request) throws YarnException, 456 IOException; 457 458 /** 459 * <p> 460 * The interface used by clients to get a report of all Application attempts 461 * in the cluster from the <code>ResourceManager</code> 462 * </p> 463 * 464 * <p> 465 * The <code>ResourceManager</code> responds with a 466 * {@link GetApplicationAttemptsRequest} which includes the 467 * {@link ApplicationAttemptReport} for all the applications attempts of a 468 * specified application attempt. 469 * </p> 470 * 471 * <p> 472 * If the user does not have <code>VIEW_APP</code> access for an application 473 * then the corresponding report will be filtered as described in 474 * {@link #getApplicationAttemptReport(GetApplicationAttemptReportRequest)}. 475 * </p> 476 * 477 * @param request 478 * request for reports on all application attempts of an application 479 * @return reports on all application attempts of an application 480 * @throws YarnException 481 * @throws IOException 482 */ 483 @Public 484 @Unstable 485 @Idempotent 486 public GetApplicationAttemptsResponse getApplicationAttempts( 487 GetApplicationAttemptsRequest request) throws YarnException, IOException; 488 489 /** 490 * <p> 491 * The interface used by clients to get a report of an Container from the 492 * <code>ResourceManager</code> 493 * </p> 494 * 495 * <p> 496 * The client, via {@link GetContainerReportRequest} provides the 497 * {@link ContainerId} of the container. 498 * </p> 499 * 500 * <p> 501 * In secure mode,the <code>ResourceManager</code> verifies access to the 502 * method before accepting the request. 503 * </p> 504 * 505 * <p> 506 * The <code>ResourceManager</code> responds with a 507 * {@link GetContainerReportResponse} which includes the 508 * {@link ContainerReport} for the container. 509 * </p> 510 * 511 * @param request 512 * request for a container report 513 * @return container report 514 * @throws YarnException 515 * @throws IOException 516 */ 517 @Public 518 @Unstable 519 @Idempotent 520 public GetContainerReportResponse getContainerReport( 521 GetContainerReportRequest request) throws YarnException, IOException; 522 523 /** 524 * <p> 525 * The interface used by clients to get a report of Containers for an 526 * application attempt from the <code>ResourceManager</code> 527 * </p> 528 * 529 * <p> 530 * The client, via {@link GetContainersRequest} provides the 531 * {@link ApplicationAttemptId} of the application attempt. 532 * </p> 533 * 534 * <p> 535 * In secure mode,the <code>ResourceManager</code> verifies access to the 536 * method before accepting the request. 537 * </p> 538 * 539 * <p> 540 * The <code>ResourceManager</code> responds with a 541 * {@link GetContainersResponse} which includes a list of 542 * {@link ContainerReport} for all the containers of a specific application 543 * attempt. 544 * </p> 545 * 546 * @param request 547 * request for a list of container reports of an application attempt. 548 * @return reports on all containers of an application attempt 549 * @throws YarnException 550 * @throws IOException 551 */ 552 @Public 553 @Unstable 554 @Idempotent 555 public GetContainersResponse getContainers(GetContainersRequest request) 556 throws YarnException, IOException; 557 558 /** 559 * <p> 560 * The interface used by clients to submit a new reservation to the 561 * {@code ResourceManager}. 562 * </p> 563 * 564 * <p> 565 * The client packages all details of its request in a 566 * {@link ReservationSubmissionRequest} object. This contains information 567 * about the amount of capacity, temporal constraints, and concurrency needs. 568 * Furthermore, the reservation might be composed of multiple stages, with 569 * ordering dependencies among them. 570 * </p> 571 * 572 * <p> 573 * In order to respond, a new admission control component in the 574 * {@code ResourceManager} performs an analysis of the resources that have 575 * been committed over the period of time the user is requesting, verify that 576 * the user requests can be fulfilled, and that it respect a sharing policy 577 * (e.g., {@code CapacityOverTimePolicy}). Once it has positively determined 578 * that the ReservationSubmissionRequest is satisfiable the 579 * {@code ResourceManager} answers with a 580 * {@link ReservationSubmissionResponse} that include a non-null 581 * {@link ReservationId}. Upon failure to find a valid allocation the response 582 * is an exception with the reason. 583 * 584 * On application submission the client can use this {@link ReservationId} to 585 * obtain access to the reserved resources. 586 * </p> 587 * 588 * <p> 589 * The system guarantees that during the time-range specified by the user, the 590 * reservationID will be corresponding to a valid reservation. The amount of 591 * capacity dedicated to such queue can vary overtime, depending of the 592 * allocation that has been determined. But it is guaranteed to satisfy all 593 * the constraint expressed by the user in the 594 * {@link ReservationSubmissionRequest}. 595 * </p> 596 * 597 * @param request the request to submit a new Reservation 598 * @return response the {@link ReservationId} on accepting the submission 599 * @throws YarnException if the request is invalid or reservation cannot be 600 * created successfully 601 * @throws IOException 602 * 603 */ 604 @Public 605 @Unstable 606 public ReservationSubmissionResponse submitReservation( 607 ReservationSubmissionRequest request) throws YarnException, IOException; 608 609 /** 610 * <p> 611 * The interface used by clients to update an existing Reservation. This is 612 * referred to as a re-negotiation process, in which a user that has 613 * previously submitted a Reservation. 614 * </p> 615 * 616 * <p> 617 * The allocation is attempted by virtually substituting all previous 618 * allocations related to this Reservation with new ones, that satisfy the new 619 * {@link ReservationUpdateRequest}. Upon success the previous allocation is 620 * substituted by the new one, and on failure (i.e., if the system cannot find 621 * a valid allocation for the updated request), the previous allocation 622 * remains valid. 623 * 624 * The {@link ReservationId} is not changed, and applications currently 625 * running within this reservation will automatically receive the resources 626 * based on the new allocation. 627 * </p> 628 * 629 * @param request to update an existing Reservation (the ReservationRequest 630 * should refer to an existing valid {@link ReservationId}) 631 * @return response empty on successfully updating the existing reservation 632 * @throws YarnException if the request is invalid or reservation cannot be 633 * updated successfully 634 * @throws IOException 635 * 636 */ 637 @Public 638 @Unstable 639 public ReservationUpdateResponse updateReservation( 640 ReservationUpdateRequest request) throws YarnException, IOException; 641 642 /** 643 * <p> 644 * The interface used by clients to remove an existing Reservation. 645 * 646 * Upon deletion of a reservation applications running with this reservation, 647 * are automatically downgraded to normal jobs running without any dedicated 648 * reservation. 649 * </p> 650 * 651 * @param request to remove an existing Reservation (the ReservationRequest 652 * should refer to an existing valid {@link ReservationId}) 653 * @return response empty on successfully deleting the existing reservation 654 * @throws YarnException if the request is invalid or reservation cannot be 655 * deleted successfully 656 * @throws IOException 657 * 658 */ 659 @Public 660 @Unstable 661 public ReservationDeleteResponse deleteReservation( 662 ReservationDeleteRequest request) throws YarnException, IOException; 663 664 /** 665 * <p> 666 * The interface used by client to get node to labels mappings in existing cluster 667 * </p> 668 * 669 * @param request 670 * @return node to labels mappings 671 * @throws YarnException 672 * @throws IOException 673 */ 674 @Public 675 @Unstable 676 public GetNodesToLabelsResponse getNodeToLabels( 677 GetNodesToLabelsRequest request) throws YarnException, IOException; 678 679 /** 680 * <p> 681 * The interface used by client to get node labels in the cluster 682 * </p> 683 * 684 * @param request to get node labels collection of this cluster 685 * @return node labels collection of this cluster 686 * @throws YarnException 687 * @throws IOException 688 */ 689 @Public 690 @Unstable 691 public GetClusterNodeLabelsResponse getClusterNodeLabels( 692 GetClusterNodeLabelsRequest request) throws YarnException, IOException; 693 }