[Pulp-dev] Tasking System Changes in 3.0

Brian Bouterse bbouters at redhat.com
Fri Sep 16 14:45:55 UTC 2016

I'll incorporate the structured saving of a PulpCodedException. That is 
a good idea. I'll move all the language to "failed" which sounds natural 
instead of "Errored".

Other suggestions are welcome.


On 09/15/2016 09:04 PM, Michael Hrivnak wrote:
> Those sound like great improvements!
> For both fatal and non-fatal errors, in the case where the error raised
> is a PulpCodedException, it would be valuable to capture the extra
> user-facing data in a standard structure so it could be rendered in a
> user-friendly way.
> In the diff, I see a mix of using the words "failed" and "errored".
> Assuming there's not an intentional difference, perhaps we should take
> this opportunity to standardize on one. "Errored" is a bit awkward to
> read and more awkward to say, so I'd lean toward going back to the pulp
> 2 state of just "error", or go with "failed". But my reasoning is only
> aesthetic, so really any of the choices would be fine.
> Michael
> On Thu, Sep 15, 2016 at 5:46 PM, Brian Bouterse <bbouters at redhat.com
> <mailto:bbouters at redhat.com>> wrote:
>     In porting the tasking system to work with the new models I have
>     made some adjustments that I think are improvements. Please send
>     feedback or leave it directly on the PR. I plan to turn this into
>     documentation at some point as a separate effort. This applies to
>     methods we will mark in the plugin API such as sync(), publish()
>     which are run inside of a pulp task dedicated to calling into the
>     plugin code.
>     Here is a recap so everyone is aware and can give feedback:
>     == Improvements over Fatal vs Non Fatal Exceptions in Tasking System ==
>     - The tasking system allows non_fatal_errors to be recorded as the
>     task runs. This is different than before which required any error
>     recording to be done using the task result. @dkliban pointed out
>     that recording as you go is better in case you later experience an
>     unexpected, fatal exception. See the new plugin controller here[0].
>     - Fatal exceptions are any exception raised during Task execution.
>     This is roughly what we did before but we did a poor job of
>     documenting it.
>     - Fatal exceptions are recorded with the exception traceback in the
>     'result' attribute. Previously this was recorded in the 'errors'
>     attribute which caused mixing/overwriting problems between fatal and
>     non-fatal exceptions. In this new code, if you experience a fatal
>     error the result *is* your exception. See the implementation here [1]
>     - The errors field is renamed to non_fatal_errors to clearly
>     indicate its semantic purpose to collect non_fatal_errors[2]. It is
>     still a JSON field but it is now structured due to the use of the
>     plugin controller [0]. It probably could be more structured, or
>     less. Input would be great here.
>     == Less work for plugin writers ==
>     - spawned_tasks are now populated as you dispatch tasks from within
>     a task. Previously it was the plugin writer's job to name any
>     spawned tasks. This is one more responsibility moved to platform.
>     See the implementation wherever this method is used [3]. If you want
>     to dispatch tasks and not have them in the spawned_tasks list making
>     it inherit from PulpTask[4] directly will do that.
>     == Less code to Maintain ==
>     - We no longer support sigterm handlers and are going to assume that
>     a task can be killed at any moment. We deprecated this part of the
>     old Plugin API on the 2.y line even. On 2.y, the tasking system used
>     to have code which would "install" a sigterm handler callback for
>     that specific task. That installation code is now deleted [5].
>     - The Task.results field is a JSON field and it stores anything
>     returned by the task [6]. We used to maintain an object called
>     TaskResult which no longer has value with all the changes ^. Plugin
>     writers can just return a JSON serializable python object as a task
>     result.
>     [0]:
>     https://github.com/pulp/pulp/pull/2752/files#diff-d378ced2dc71e64a3ff4985690c331b4R5
>     <https://github.com/pulp/pulp/pull/2752/files#diff-d378ced2dc71e64a3ff4985690c331b4R5>
>     [1]:
>     https://github.com/pulp/pulp/pull/2752/files#diff-a5f1119f1229212c0027870093b9356cR418
>     <https://github.com/pulp/pulp/pull/2752/files#diff-a5f1119f1229212c0027870093b9356cR418>
>     [2]:
>     https://github.com/pulp/pulp/pull/2752/files#diff-f2e147f346d6cb888f808c77a58e84bdR134
>     <https://github.com/pulp/pulp/pull/2752/files#diff-f2e147f346d6cb888f808c77a58e84bdR134>
>     [3]:
>     https://github.com/pulp/pulp/pull/2752/files#diff-a5f1119f1229212c0027870093b9356cR426
>     <https://github.com/pulp/pulp/pull/2752/files#diff-a5f1119f1229212c0027870093b9356cR426>
>     [4]:
>     https://github.com/pulp/pulp/pull/2752/files#diff-a5f1119f1229212c0027870093b9356cR33
>     <https://github.com/pulp/pulp/pull/2752/files#diff-a5f1119f1229212c0027870093b9356cR33>
>     [5]:
>     https://github.com/pulp/pulp/pull/2752/files#diff-abee42f9c3a1b498c07cb513ca7cb974L629
>     <https://github.com/pulp/pulp/pull/2752/files#diff-abee42f9c3a1b498c07cb513ca7cb974L629>
>     [6]:
>     https://github.com/pulp/pulp/pull/2752/files#diff-a5f1119f1229212c0027870093b9356cR366
>     <https://github.com/pulp/pulp/pull/2752/files#diff-a5f1119f1229212c0027870093b9356cR366>
>     -Brian
>     _______________________________________________
>     Pulp-dev mailing list
>     Pulp-dev at redhat.com <mailto:Pulp-dev at redhat.com>
>     https://www.redhat.com/mailman/listinfo/pulp-dev
>     <https://www.redhat.com/mailman/listinfo/pulp-dev>

More information about the Pulp-dev mailing list