Uncaught exception when pulp task isnt created from dynflow step
Description of problem:
When a Content Host:
- installs package (or does any other activity that triggers Actions::Katello::Host::UploadPackageProfile task)
- and promptly unregisters itself,
the UploadPackageProfile task can fail on Actions::Pulp::Consumer::GenerateApplicability step as pulp returns "Pulp consumer 8b042949-3daa-49a2-9827-21ccd982227b not found" instead of task ID for the regenerate_applicability task. This is not further handled properly by katello or foreman tasks, since:
- task itself raises uncaught exception (see below)
- sometimes the task ends up in paused/error state (this is bit tricky to reproduce)
Please improve this error handling.
Version-Release number of selected component (if applicable):
100% (the error)
20% (the stuck task)
Steps to Reproduce:
1. Register a system to Satellite, attach a subscription
2. Artificially send package profile (just for the sake of speeding up the reproducer; it is a race condition; the real use case behind involves package removal at this state, what triggers one profile upload that might repro the bug)
for i in $(seq 1 20); do katello-package-upload --force & done
3. Few seconds after that, unregister the system
4. Optionally, for reproducing also the paused/error tasks, restart foreman-tasks service few seconds after system unregistered. (this step isnt required for the uncaught exception)
5. Check tasks with error result, optionally in paused/error state/result.
5. There will be always error-result tasks (that's OK) with exception (that's not OK):
undefined method `each' for true:TrueClass
`block (3 levels) in execute_run'"
Optionally, if you are unlucky enough, such a task is paused and hangs paused forever.
Provide better error text (i.e. pass the "Pulp consumer 8b042949-3daa-49a2-9827-21ccd982227b not found." error text) in the dynflow external task error text.
Ensure such task is not paused when foreman-tasks is being restarted while processing this task.