On 04.04.25 17:13, Markus Armbruster wrote:
Vladimir Sementsov-Ogievskiy <vsementsov(a)yandex-team.ru>
writes:
> On 04.04.25 09:20, Markus Armbruster wrote:
>> Vladimir Sementsov-Ogievskiy <vsementsov(a)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