On 04.04.25 17:13, Markus Armbruster wrote:
Vladimir Sementsov-Ogievskiy <vsement...@yandex-team.ru> writes:

On 04.04.25 09:20, Markus Armbruster wrote:
Vladimir Sementsov-Ogievskiy <vsement...@yandex-team.ru> writes:

[...]

+
+``block-job-finalize`` (since 10.1)
+''''''''''''''''''''''''''''''''''
+
+Use ``job-finalize`` instead.
+

block-job-finalize's doc comment:

      # Once a job that has manual=true reaches the pending state, it can be
      # instructed to finalize any graph changes and do any necessary
      # cleanup via this command.  [...]

There is no member @manual anywhere in the QAPI schema.  I figure this
should be @auto-finalize.

job-finalize's doc comment:

      # Instructs all jobs in a transaction (or a single job if it is not
      # part of any transaction) to finalize any graph changes and do any
      # necessary cleanup.  This command requires that all involved jobs are
      # in the PENDING state.

Nothing on @auto-finalize.

@auto-finalize defaults to true for jobs that support controlling it.
These are exactly the ones that support @auto-dismiss.

I figure @auto-dismiss is always false for the other jobs, but that
doesn't seem to be documented anywhere.

The only other bits related to @auto-dismiss and @auto-finalize seem to
be two states in JobStatus:

      # @pending: The job has finished its work, but has finalization steps
      #     that it needs to make prior to completing.  These changes will
      #     require manual intervention via @job-finalize if auto-finalize
      #     was set to false.  These pending changes may still fail.
      [...]
      # @concluded: The job has finished all work.  If auto-dismiss was set
      #     to false, the job will remain in the query list until it is
      #     dismissed via @job-dismiss.


Is it possible to observe @concluded via QMP when @auto-dismiss is on?

Seems not.


What about @pending?

Hmm probably, if we have a transaction of several jobs (actually only backups 
may be joined to transactions), where some have auto-finalize and some not, the 
whole transaction would be pending, including jobs that has auto-finalize=true. 
Still, it's a strange case.

So, auto-finalize=true is silently ignored when another job in the same
transaction has auto-finalize=false?

Yes, at least, it looks like so:

static void job_completed_txn_success_locked(Job *job)
{

[...]

    /* If no jobs need manual finalization, automatically do so */
    if (job_txn_apply_locked(job, job_needs_finalize_locked) == 0) {
        job_do_finalize_locked(job);
    }
}


Aside: getting rid of auto-dismiss and auto-finalize some day would be
nice.


Hmm.. You mean, deprecated "true" value, and finally drop the fields, making 
"false" the default? May be.

May or may not be practical.

I'll resend, with additional patch to touch-up the documentation.

Thanks!


--
Best regards,
Vladimir


Reply via email to