void Proceed()

in api/src/gmsa_service.cpp [982:1028]


        void Proceed()
        {
            if ( cookie.compare( CLASS_NAME_CallDataRenewKerberosArnLease ) != 0 )
            {
                return;
            }
            std::cerr << Util::getCurrentTime() << '\t' << "INFO: RenewKerberosArnLease " << this
                      << "status: " << status_ << std::endl;

            if ( status_ == CREATE )
            {
                // Make this instance progress to the PROCESS state.
                status_ = PROCESS;

                // As part of the initial CREATE state, we *request* that the system
                // start processing RequestHandleNonDomainJoinedKerberosLease requests. In this
                // request, "this" acts are the tag uniquely identifying the request (so that
                // different CallData instances can serve different requests concurrently), in this
                // case the memory address of this CallData instance.

                service_->RequestRenewKerberosArnLease( &add_krb_ctx_, &renew_krb_arn_request_,
                                                        &handle_krb_responder_, cq_, cq_, this );
            }
            else if ( status_ == PROCESS )
            {
                // Spawn a new CallData instance to serve new clients while we process
                // the one for this CallData. The instance will deallocate itself as
                // part of its FINISH state.
                new CallDataRenewKerberosArnLease( service_, cq_ );
                // The actual processing.
                renew_krb_arn_reply_.set_status( "Successful" );

                // And we are done! Let the gRPC runtime know we've finished, using the
                // memory address of this instance as the uniquely identifying tag for
                // the event.
                status_ = FINISH;
                handle_krb_responder_.Finish( renew_krb_arn_reply_, grpc::Status::OK, this );
            }
            else
            {
                GPR_ASSERT( status_ == FINISH );
                // Once in the FINISH state, deallocate ourselves (CallData).
                delete this;
            }

            return;
        }