bool ApplicationMaster::finishApplicationMaster(string &diagnostics,
        string &trackingUrl, FinalApplicationStatus finalstatus) {
    ApplicationMasterProtocol* rmClientAlias = (ApplicationMasterProtocol*) rmClient;

    FinishApplicationMasterRequest request;
    request.setDiagnostics(diagnostics);
    request.setTrackingUrl(trackingUrl);
    request.setFinalApplicationStatus(finalstatus);

    FinishApplicationMasterResponse response = rmClientAlias->finishApplicationMaster(request);

    return response.getIsUnregistered();
}
bool ApplicationMaster::finishApplicationMaster(string &diagnostics,
        string &trackingUrl, FinalApplicationStatus finalstatus) {
    FinishApplicationMasterRequest request;
    FinishApplicationMasterResponse response;
    request.setDiagnostics(diagnostics);
    request.setTrackingUrl(trackingUrl);
    request.setFinalApplicationStatus(finalstatus);

    RESOURCEMANAGER_SCHEDULER_HA_RETRY_BEGIN();
    response = appMasterProto->finishApplicationMaster(request);
    RESOURCEMANAGER_SCHEDULER_HA_RETRY_END();
    return response.getIsUnregistered();
}
FinishApplicationMasterResponse ApplicationMasterProtocol::finishApplicationMaster(
        FinishApplicationMasterRequest &request) {
    try {
        FinishApplicationMasterRequestProto requestProto = request.getProto();
        FinishApplicationMasterResponseProto responseProto;
        invoke(RpcCall(true, "finishApplicationMaster", &requestProto, &responseProto));
        return FinishApplicationMasterResponse(responseProto);
    } catch (const YarnRpcServerException & e) {
        UnWrapper<ApplicationMasterNotRegisteredException, YarnIOException> unwrapper(e);
        unwrapper.unwrap(__FILE__, __LINE__);
    }
}