pulpcore 3.83.2__tar.gz → 3.84.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pulpcore might be problematic. Click here for more details.

Files changed (559) hide show
  1. {pulpcore-3.83.2 → pulpcore-3.84.0}/CHANGES.md +33 -0
  2. {pulpcore-3.83.2 → pulpcore-3.84.0}/PKG-INFO +5 -5
  3. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/app/__init__.py +1 -1
  4. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/__init__.py +1 -1
  5. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/apps.py +1 -1
  6. pulpcore-3.84.0/pulpcore/app/migrations/0134_task_insert_trigger.py +81 -0
  7. pulpcore-3.84.0/pulpcore/app/migrations/0135_task_pulp_task_resources_index.py +25 -0
  8. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/task.py +7 -0
  9. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/settings.py +10 -2
  10. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/purge.py +8 -5
  11. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/constants.py +4 -0
  12. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tasking/entrypoint.py +12 -2
  13. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tasking/tasks.py +5 -30
  14. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tasking/worker.py +77 -39
  15. pulpcore-3.84.0/pulpcore/tests/functional/api/test_login.py +139 -0
  16. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore.egg-info/PKG-INFO +5 -5
  17. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore.egg-info/SOURCES.txt +2 -0
  18. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore.egg-info/requires.txt +4 -4
  19. {pulpcore-3.83.2 → pulpcore-3.84.0}/pyproject.toml +6 -6
  20. pulpcore-3.83.2/pulpcore/tests/functional/api/test_login.py +0 -109
  21. {pulpcore-3.83.2 → pulpcore-3.84.0}/CODE_OF_CONDUCT.md +0 -0
  22. {pulpcore-3.83.2 → pulpcore-3.84.0}/COMMITMENT +0 -0
  23. {pulpcore-3.83.2 → pulpcore-3.84.0}/CONTRIBUTING.md +0 -0
  24. {pulpcore-3.83.2 → pulpcore-3.84.0}/COPYRIGHT +0 -0
  25. {pulpcore-3.83.2 → pulpcore-3.84.0}/LICENSE +0 -0
  26. {pulpcore-3.83.2 → pulpcore-3.84.0}/MANIFEST.in +0 -0
  27. {pulpcore-3.83.2 → pulpcore-3.84.0}/README.md +0 -0
  28. {pulpcore-3.83.2 → pulpcore-3.84.0}/ci_requirements.txt +0 -0
  29. {pulpcore-3.83.2 → pulpcore-3.84.0}/functest_requirements.txt +0 -0
  30. {pulpcore-3.83.2 → pulpcore-3.84.0}/manage.py +0 -0
  31. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/__init__.py +0 -0
  32. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/app/migrations/0001_initial.py +0 -0
  33. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
  34. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/app/migrations/__init__.py +0 -0
  35. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/app/models.py +0 -0
  36. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/app/serializers.py +0 -0
  37. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/app/utils.py +0 -0
  38. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/app/viewsets.py +0 -0
  39. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/pytest_plugin.py +0 -0
  40. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/__init__.py +0 -0
  41. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/__init__.py +0 -0
  42. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/api/__init__.py +0 -0
  43. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
  44. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
  45. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
  46. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
  47. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
  48. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
  49. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
  50. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
  51. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
  52. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
  53. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
  54. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
  55. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
  56. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
  57. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
  58. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
  59. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
  60. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
  61. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
  62. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
  63. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
  64. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
  65. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
  66. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
  67. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
  68. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
  69. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
  70. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
  71. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
  72. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
  73. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
  74. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/conftest.py +0 -0
  75. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/functional/constants.py +0 -0
  76. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/unit/__init__.py +0 -0
  77. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_certguard/tests/unit/test_models.py +0 -0
  78. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/__init__.py +0 -0
  79. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0001_initial.py +0 -0
  80. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py +0 -0
  81. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0002_file_related_names.py +0 -0
  82. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0003_auto_20191014_1721.py +0 -0
  83. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0004_filefilesystemexporter.py +0 -0
  84. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0005_filerepository.py +0 -0
  85. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0006_delete_filefilesystemexporter.py +0 -0
  86. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0007_filefilesystemexporter.py +0 -0
  87. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0008_add_manifest_field.py +0 -0
  88. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0009_move_data_to_new_master_distribution_model.py +0 -0
  89. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0010_auto_publish.py +0 -0
  90. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0011_fix_auto_publish.py +0 -0
  91. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0012_delete_filefilesystemexporter.py +0 -0
  92. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0013_file_acs.py +0 -0
  93. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0014_new_rbac_permissions.py +0 -0
  94. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0015_allow_null_manifest.py +0 -0
  95. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0016_add_domain.py +0 -0
  96. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
  97. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/migrations/__init__.py +0 -0
  98. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/modelresource.py +0 -0
  99. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/models.py +0 -0
  100. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/replica.py +0 -0
  101. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/serializers.py +0 -0
  102. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/tasks/__init__.py +0 -0
  103. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/tasks/publishing.py +0 -0
  104. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/tasks/synchronizing.py +0 -0
  105. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/app/viewsets.py +0 -0
  106. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/manifest.py +0 -0
  107. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/pytest_plugin.py +0 -0
  108. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/__init__.py +0 -0
  109. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/__init__.py +0 -0
  110. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/__init__.py +0 -0
  111. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_acs.py +0 -0
  112. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
  113. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
  114. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_content_labels.py +0 -0
  115. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
  116. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
  117. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_domains.py +0 -0
  118. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_download_policies.py +0 -0
  119. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
  120. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_labels.py +0 -0
  121. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
  122. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_publish.py +0 -0
  123. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
  124. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_rbac.py +0 -0
  125. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
  126. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/functional/api/test_sync.py +0 -0
  127. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/unit/__init__.py +0 -0
  128. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/unit/test_safe_paths.py +0 -0
  129. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulp_file/tests/unit/test_serializers.py +0 -0
  130. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/__init__.py +0 -0
  131. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/__init__.py +0 -0
  132. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/access_policy.py +0 -0
  133. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/authentication.py +0 -0
  134. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/checks.py +0 -0
  135. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/entrypoint.py +0 -0
  136. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/files.py +0 -0
  137. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/global_access_conditions.py +0 -0
  138. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/importexport.py +0 -0
  139. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/loggers.py +0 -0
  140. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/manage.py +0 -0
  141. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/__init__.py +0 -0
  142. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/__init__.py +0 -0
  143. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/add-signing-service.py +0 -0
  144. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/analyze-publication.py +0 -0
  145. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/clean-up-progress-reports.py +0 -0
  146. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
  147. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/dump-permissions.py +0 -0
  148. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
  149. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
  150. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/migrationstat.py +0 -0
  151. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/openapi.py +0 -0
  152. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/rebasemigrations.py +0 -0
  153. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/remove-plugin.py +0 -0
  154. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
  155. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/repository-size.py +0 -0
  156. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
  157. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
  158. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0001_initial.py +0 -0
  159. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0001_squashed_0090_char_to_text_field.py +0 -0
  160. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0002_increase_artifact_size_field.py +0 -0
  161. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0003_remove_upload_completed.py +0 -0
  162. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0004_add_duplicated_reserved_resources.py +0 -0
  163. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0005_progressreport_code.py +0 -0
  164. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0006_repository_plugin_managed.py +0 -0
  165. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0007_delete_progress_proxies.py +0 -0
  166. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0008_published_metadata_as_content.py +0 -0
  167. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0009_remove_task_non_fatal_errors.py +0 -0
  168. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0010_pulp_fields.py +0 -0
  169. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0011_relative_path.py +0 -0
  170. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0012_auto_20191104_2000.py +0 -0
  171. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0013_repository_pulp_type.py +0 -0
  172. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0014_remove_repository_plugin_managed.py +0 -0
  173. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0015_auto_20191112_1426.py +0 -0
  174. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0016_charfield_to_textfield.py +0 -0
  175. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0017_remove_task_parent.py +0 -0
  176. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0018_auto_20191127_2350.py +0 -0
  177. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0019_add_signing_service_model.py +0 -0
  178. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0020_change_publishedartifact_constraints.py +0 -0
  179. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0021_add_signing_service_foreign_key.py +0 -0
  180. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0022_rename_last_version.py +0 -0
  181. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0023_change_exporter_models.py +0 -0
  182. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0024_use_local_storage_for_uploads.py +0 -0
  183. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0025_task_parent_task.py +0 -0
  184. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0026_task_group.py +0 -0
  185. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0027_export_backend.py +0 -0
  186. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0028_import_importer_pulpimporter_pulpimporterrepository.py +0 -0
  187. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0029_export_delete.py +0 -0
  188. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0030_taskgroup_all_tasks_dispatched.py +0 -0
  189. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0031_import_export_validate_params.py +0 -0
  190. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0032_export_to_chunks.py +0 -0
  191. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0033_increase_remote_artifact_size_field.py +0 -0
  192. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0034_groupprogressreport.py +0 -0
  193. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0035_content_upstream_id.py +0 -0
  194. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0036_unprotect_last_export.py +0 -0
  195. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0037_pulptemporaryfile.py +0 -0
  196. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0038_repository_remote.py +0 -0
  197. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0039_change_download_concurrency.py +0 -0
  198. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0040_set_admin_is_staff.py +0 -0
  199. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0041_accesspolicy.py +0 -0
  200. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0042_rbac_for_tasks.py +0 -0
  201. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0043_toc_attribute.py +0 -0
  202. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0044_temp_file_artifact_field.py +0 -0
  203. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0045_accesspolicy_permissions_allow_null.py +0 -0
  204. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0046_task__resource_job_id.py +0 -0
  205. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0047_improve_orphan_cleanup.py +0 -0
  206. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0048_fips_checksums.py +0 -0
  207. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0049_add_file_field_to_uploadchunk.py +0 -0
  208. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0050_namespace_access_policies.py +0 -0
  209. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0051_timeoutfields.py +0 -0
  210. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0052_tasking_logging_cid.py +0 -0
  211. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0053_remote_headers.py +0 -0
  212. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0054_add_public_key.py +0 -0
  213. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0055_label.py +0 -0
  214. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0056_remote_rate_limit.py +0 -0
  215. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0057_add_label_indexes.py +0 -0
  216. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0058_accesspolicy_customized.py +0 -0
  217. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0059_proxy_creds.py +0 -0
  218. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0060_data_migration_proxy_creds.py +0 -0
  219. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0061_call_handle_artifact_checksums_command.py +0 -0
  220. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0062_add_new_distribution_mastermodel.py +0 -0
  221. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0063_repository_retained_versions.py +0 -0
  222. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0064_add_new_style_task_columns.py +0 -0
  223. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0064_repository_user_hidden.py +0 -0
  224. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0065_merge_20210615_1211.py +0 -0
  225. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0066_download_concurrency_and_retry_changes.py +0 -0
  226. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0067_add_protect_to_task_reservation.py +0 -0
  227. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0068_add_timestamp_of_interest.py +0 -0
  228. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0069_update_json_fields.py +0 -0
  229. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0070_rename_retained_versions.py +0 -0
  230. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0071_filesystemexport_filesystemexporter.py +0 -0
  231. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0072_add_method_to_filesystem_exporter.py +0 -0
  232. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0073_encrypt_remote_fields.py +0 -0
  233. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0074_acs.py +0 -0
  234. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0075_rbaccontentguard.py +0 -0
  235. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0076_remove_reserved_resource.py +0 -0
  236. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0077_move_remote_url_credentials.py +0 -0
  237. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0078_grouprole_role_userrole.py +0 -0
  238. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0079_rename_permissions_assignment_accesspolicy_creation_hooks.py +0 -0
  239. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0080_proxy_group_model.py +0 -0
  240. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0081_reapplabel_group_permissions.py +0 -0
  241. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0082_add_manage_roles_permissions.py +0 -0
  242. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0083_alter_group_options.py +0 -0
  243. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0084_alter_rbaccontentguard_options.py +0 -0
  244. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0085_contentredirectcontentguard.py +0 -0
  245. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0086_task_json_fields.py +0 -0
  246. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0087_taskschedule.py +0 -0
  247. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0088_accesspolicy_queryset_scoping.py +0 -0
  248. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0089_alter_contentredirectcontentguard_options.py +0 -0
  249. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0090_char_to_text_field.py +0 -0
  250. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0091_systemid.py +0 -0
  251. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
  252. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
  253. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
  254. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
  255. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
  256. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
  257. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
  258. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0099_versions_field.py +0 -0
  259. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
  260. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0101_add_domain.py +0 -0
  261. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
  262. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
  263. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0104_delete_label.py +0 -0
  264. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
  265. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
  266. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
  267. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0108_task_versions.py +0 -0
  268. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
  269. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
  270. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
  271. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
  272. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
  273. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
  274. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
  275. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
  276. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
  277. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0118_task_core_task_unblock_2276a4_idx_and_more.py +0 -0
  278. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0119_grouprole_core_groupr_object__250e22_idx_and_more.py +0 -0
  279. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0120_get_url_removal.py +0 -0
  280. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0121_add_profile_artifacts_table.py +0 -0
  281. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0122_record_last_replication_timestamp.py +0 -0
  282. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0123_upstreampulp_q_select.py +0 -0
  283. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0124_task_deferred_task_immediate.py +0 -0
  284. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0125_openpgpdistribution_openpgpkeyring_openpgppublickey_and_more.py +0 -0
  285. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0126_remoteartifact_failed_at.py +0 -0
  286. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0127_remove_upstreampulp_pulp_label_select.py +0 -0
  287. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0128_domain_pulp_labels.py +0 -0
  288. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0129_content_pulp_labels.py +0 -0
  289. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0130_upstreampulp_policy.py +0 -0
  290. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py +0 -0
  291. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0132_alter_content_options.py +0 -0
  292. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0132_task_profile_options.py +0 -0
  293. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/0133_repositoryversion_content_ids.py +0 -0
  294. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/migrations/__init__.py +0 -0
  295. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/mime_types.py +0 -0
  296. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/modelresource.py +0 -0
  297. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/__init__.py +0 -0
  298. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/access_policy.py +0 -0
  299. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/acs.py +0 -0
  300. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/analytics.py +0 -0
  301. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/base.py +0 -0
  302. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/content.py +0 -0
  303. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/domain.py +0 -0
  304. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/exporter.py +0 -0
  305. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/fields.py +0 -0
  306. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/generic.py +0 -0
  307. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/importer.py +0 -0
  308. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/openpgp.py +0 -0
  309. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/progress.py +0 -0
  310. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/publication.py +0 -0
  311. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/replica.py +0 -0
  312. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/repository.py +0 -0
  313. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/role.py +0 -0
  314. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/status.py +0 -0
  315. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/storage.py +0 -0
  316. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/models/upload.py +0 -0
  317. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/netutil.py +0 -0
  318. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/openpgp.py +0 -0
  319. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/protobuf/__init__.py +0 -0
  320. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
  321. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/pulp_hashlib.py +0 -0
  322. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
  323. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/redis_connection.py +0 -0
  324. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/replica.py +0 -0
  325. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/response.py +0 -0
  326. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/role_util.py +0 -0
  327. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/__init__.py +0 -0
  328. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/access_policy.py +0 -0
  329. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/acs.py +0 -0
  330. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/base.py +0 -0
  331. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/content.py +0 -0
  332. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/domain.py +0 -0
  333. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/exporter.py +0 -0
  334. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/fields.py +0 -0
  335. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/importer.py +0 -0
  336. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/openpgp.py +0 -0
  337. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/orphans.py +0 -0
  338. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/progress.py +0 -0
  339. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/publication.py +0 -0
  340. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/purge.py +0 -0
  341. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/reclaim.py +0 -0
  342. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/repair.py +0 -0
  343. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/replica.py +0 -0
  344. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/repository.py +0 -0
  345. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/status.py +0 -0
  346. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/task.py +0 -0
  347. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/upload.py +0 -0
  348. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/serializers/user.py +0 -0
  349. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/__init__.py +0 -0
  350. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/analytics.py +0 -0
  351. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/base.py +0 -0
  352. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/export.py +0 -0
  353. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/importer.py +0 -0
  354. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/migrate.py +0 -0
  355. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/orphan.py +0 -0
  356. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/reclaim_space.py +0 -0
  357. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/replica.py +0 -0
  358. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/repository.py +0 -0
  359. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/telemetry.py +0 -0
  360. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/test.py +0 -0
  361. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/tasks/upload.py +0 -0
  362. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/templates/rest_framework/api.html +0 -0
  363. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/templatetags/__init__.py +0 -0
  364. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/templatetags/pulp_urls.py +0 -0
  365. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/urls.py +0 -0
  366. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/util.py +0 -0
  367. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/views/__init__.py +0 -0
  368. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/views/importer.py +0 -0
  369. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/views/orphans.py +0 -0
  370. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/views/repair.py +0 -0
  371. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/views/status.py +0 -0
  372. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/__init__.py +0 -0
  373. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/access_policy.py +0 -0
  374. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/acs.py +0 -0
  375. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/base.py +0 -0
  376. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/content.py +0 -0
  377. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/custom_filters.py +0 -0
  378. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/domain.py +0 -0
  379. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/exporter.py +0 -0
  380. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/importer.py +0 -0
  381. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/openpgp.py +0 -0
  382. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/orphans.py +0 -0
  383. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/publication.py +0 -0
  384. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/reclaim.py +0 -0
  385. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/replica.py +0 -0
  386. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/repository.py +0 -0
  387. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/task.py +0 -0
  388. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/upload.py +0 -0
  389. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/viewsets/user.py +0 -0
  390. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/app/wsgi.py +0 -0
  391. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/backends.py +0 -0
  392. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/cache/__init__.py +0 -0
  393. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/cache/cache.py +0 -0
  394. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/content/__init__.py +0 -0
  395. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/content/authentication.py +0 -0
  396. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/content/entrypoint.py +0 -0
  397. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/content/handler.py +0 -0
  398. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/content/instrumentation.py +0 -0
  399. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/download/__init__.py +0 -0
  400. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/download/base.py +0 -0
  401. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/download/factory.py +0 -0
  402. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/download/file.py +0 -0
  403. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/download/http.py +0 -0
  404. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/exceptions/__init__.py +0 -0
  405. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/exceptions/base.py +0 -0
  406. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/exceptions/plugin.py +0 -0
  407. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/exceptions/validation.py +0 -0
  408. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/filters.py +0 -0
  409. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/metrics.py +0 -0
  410. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/middleware.py +0 -0
  411. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/migrations.py +0 -0
  412. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/openapi/__init__.py +0 -0
  413. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/openapi/hooks.py +0 -0
  414. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/__init__.py +0 -0
  415. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/access_policy.py +0 -0
  416. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/actions.py +0 -0
  417. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/apps.py +0 -0
  418. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/authentication/__init__.py +0 -0
  419. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/cache/__init__.py +0 -0
  420. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/constants.py +0 -0
  421. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/content.py +0 -0
  422. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/download/__init__.py +0 -0
  423. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/exceptions.py +0 -0
  424. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/files.py +0 -0
  425. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/importexport.py +0 -0
  426. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/migrations.py +0 -0
  427. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/modelresources.py +0 -0
  428. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/models/__init__.py +0 -0
  429. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/models/role.py +0 -0
  430. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/publication_utils.py +0 -0
  431. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/pulp_hashlib.py +0 -0
  432. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/replica.py +0 -0
  433. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/repo_version_utils.py +0 -0
  434. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/responses.py +0 -0
  435. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/serializers/__init__.py +0 -0
  436. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/serializers/content.py +0 -0
  437. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/stages/__init__.py +0 -0
  438. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/stages/api.py +0 -0
  439. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/stages/artifact_stages.py +0 -0
  440. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/stages/content_stages.py +0 -0
  441. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/stages/declarative_version.py +0 -0
  442. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/stages/models.py +0 -0
  443. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/storage.py +0 -0
  444. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/sync.py +0 -0
  445. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/tasking.py +0 -0
  446. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/util.py +0 -0
  447. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/viewsets/__init__.py +0 -0
  448. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/plugin/viewsets/content.py +0 -0
  449. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/pytest_plugin.py +0 -0
  450. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/responses.py +0 -0
  451. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tasking/__init__.py +0 -0
  452. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tasking/_util.py +0 -0
  453. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tasking/kafka.py +0 -0
  454. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tasking/storage.py +0 -0
  455. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/__init__.py +0 -0
  456. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/__init__.py +0 -0
  457. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/__init__.py +0 -0
  458. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
  459. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
  460. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_api_root_rewrite.py +0 -0
  461. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
  462. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_auth.py +0 -0
  463. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
  464. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
  465. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
  466. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_filter.py +0 -0
  467. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
  468. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_openpgp.py +0 -0
  469. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_replication.py +0 -0
  470. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_repos.py +0 -0
  471. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_role.py +0 -0
  472. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
  473. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_scoping.py +0 -0
  474. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
  475. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_status.py +0 -0
  476. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_task_purge.py +0 -0
  477. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_tasking.py +0 -0
  478. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_upload.py +0 -0
  479. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
  480. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/test_workers.py +0 -0
  481. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
  482. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_checkpoint.py +0 -0
  483. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
  484. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
  485. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
  486. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
  487. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
  488. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
  489. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
  490. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
  491. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +0 -0
  492. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -0
  493. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
  494. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_migrate.py +0 -0
  495. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
  496. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
  497. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_prn.py +0 -0
  498. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
  499. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -0
  500. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
  501. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
  502. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
  503. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
  504. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
  505. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/assets/__init__.py +0 -0
  506. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/content_with_coverage.py +0 -0
  507. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/functional/utils.py +0 -0
  508. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/performance/__init__.py +0 -0
  509. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/performance/test_performance.py +0 -0
  510. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/__init__.py +0 -0
  511. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/conftest.py +0 -0
  512. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/content/__init__.py +0 -0
  513. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/content/test_handler.py +0 -0
  514. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
  515. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/download/__init__.py +0 -0
  516. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
  517. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
  518. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/metrics/__init__.py +0 -0
  519. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/metrics/conftest.py +0 -0
  520. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +0 -0
  521. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/metrics/test_django_instrumentation.py +0 -0
  522. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/migration/__init__.py +0 -0
  523. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/migration/test_0077_move_remote_url_credentials.py +0 -0
  524. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/models/__init__.py +0 -0
  525. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/models/test_base.py +0 -0
  526. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/models/test_content.py +0 -0
  527. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/models/test_remote.py +0 -0
  528. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/models/test_repository.py +0 -0
  529. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/models/test_task.py +0 -0
  530. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/roles/__init__.py +0 -0
  531. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/roles/test_roles.py +0 -0
  532. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/serializers/__init__.py +0 -0
  533. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/serializers/test_base.py +0 -0
  534. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
  535. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/serializers/test_fields.py +0 -0
  536. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/serializers/test_orphans_cleanup.py +0 -0
  537. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
  538. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
  539. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/serializers/test_user.py +0 -0
  540. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/stages/__init__.py +0 -0
  541. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
  542. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/stages/test_stages.py +0 -0
  543. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/test_cache.py +0 -0
  544. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/test_chunked_file.py +0 -0
  545. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/test_content_guard.py +0 -0
  546. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/test_files.py +0 -0
  547. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/test_import_checks.py +0 -0
  548. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
  549. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/test_settings.py +0 -0
  550. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/test_util.py +0 -0
  551. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/test_viewsets.py +0 -0
  552. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
  553. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore/tests/unit/viewsets/test_viewset_base.py +0 -0
  554. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore.egg-info/dependency_links.txt +0 -0
  555. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore.egg-info/entry_points.txt +0 -0
  556. {pulpcore-3.83.2 → pulpcore-3.84.0}/pulpcore.egg-info/top_level.txt +0 -0
  557. {pulpcore-3.83.2 → pulpcore-3.84.0}/setup.cfg +0 -0
  558. {pulpcore-3.83.2 → pulpcore-3.84.0}/test_requirements.txt +0 -0
  559. {pulpcore-3.83.2 → pulpcore-3.84.0}/unittest_requirements.txt +0 -0
@@ -8,6 +8,39 @@
8
8
 
9
9
  [//]: # (towncrier release notes start)
10
10
 
11
+ ## 3.84.0 (2025-07-30) {: #3.84.0 }
12
+
13
+ ### REST API {: #3.84.0-rest-api }
14
+
15
+ #### Features {: #3.84.0-rest-api-feature }
16
+
17
+ - Added the `--auxiliary` flag to the workers entrypoint to allow adding workers to an installation that will only handle unblocked tasks.
18
+ - Moved timestamping of new tasks from application code into the database.
19
+
20
+ #### Bugfixes {: #3.84.0-rest-api-bugfix }
21
+
22
+ - Fixed the new content set optimization failing when the RepositoryVersion grew larger than 65K content units.
23
+ [#6772](https://github.com/pulp/pulpcore/issues/6772)
24
+ - Add some randomness to the task pickup code to relieve some pressure from the queue.
25
+ [#6799](https://github.com/pulp/pulpcore/issues/6799)
26
+ - When running as a recurring scheduled task, purge will now clean stale task records accross all domains.
27
+ [#6815](https://github.com/pulp/pulpcore/issues/6815)
28
+ - Added some Postgresql transactions in places where they are appropriate.
29
+
30
+ ### Plugin API {: #3.84.0-plugin-api }
31
+
32
+ No significant changes.
33
+
34
+ ### Pulp File {: #3.84.0-pulp-file }
35
+
36
+ No significant changes.
37
+
38
+ ### Pulp Cert Guard {: #3.84.0-pulp-cert-guard }
39
+
40
+ No significant changes.
41
+
42
+ ---
43
+
11
44
  ## 3.83.2 (2025-07-17) {: #3.83.2 }
12
45
 
13
46
  ### REST API {: #3.83.2-rest-api }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulpcore
3
- Version: 3.83.2
3
+ Version: 3.84.0
4
4
  Summary: Pulp Django Application and Related Modules
5
5
  Author-email: Pulp Team <pulp-list@redhat.com>
6
6
  Project-URL: Homepage, https://pulpproject.org
@@ -44,11 +44,11 @@ Requires-Dist: gunicorn<23.1.0,>=22.0
44
44
  Requires-Dist: importlib-metadata<=6.0.1,>=6.0.1
45
45
  Requires-Dist: jinja2<=3.1.6,>=3.1
46
46
  Requires-Dist: json_stream<2.4,>=2.3.2
47
- Requires-Dist: jq<1.10.0,>=1.6.0
47
+ Requires-Dist: jq<1.11.0,>=1.6.0
48
48
  Requires-Dist: PyOpenSSL<26.0
49
- Requires-Dist: opentelemetry-api<1.35,>=1.27.0
50
- Requires-Dist: opentelemetry-sdk<1.35,>=1.27.0
51
- Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.35,>=1.27.0
49
+ Requires-Dist: opentelemetry-api<1.36,>=1.27.0
50
+ Requires-Dist: opentelemetry-sdk<1.36,>=1.27.0
51
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.36,>=1.27.0
52
52
  Requires-Dist: protobuf<6.0,>=4.21.1
53
53
  Requires-Dist: pulp-glue<0.35,>=0.28.0
54
54
  Requires-Dist: pygtrie<=2.5.0,>=2.5
@@ -6,6 +6,6 @@ class PulpCertGuardPluginAppConfig(PulpPluginAppConfig):
6
6
 
7
7
  name = "pulp_certguard.app"
8
8
  label = "certguard"
9
- version = "3.83.2"
9
+ version = "3.84.0"
10
10
  python_package_name = "pulpcore"
11
11
  domain_compatible = True
@@ -8,6 +8,6 @@ class PulpFilePluginAppConfig(PulpPluginAppConfig):
8
8
 
9
9
  name = "pulp_file.app"
10
10
  label = "file"
11
- version = "3.83.2"
11
+ version = "3.84.0"
12
12
  python_package_name = "pulpcore"
13
13
  domain_compatible = True
@@ -247,7 +247,7 @@ class PulpAppConfig(PulpPluginAppConfig):
247
247
  label = "core"
248
248
 
249
249
  # The version of this app
250
- version = "3.83.2"
250
+ version = "3.84.0"
251
251
 
252
252
  # The python package name providing this app
253
253
  python_package_name = "pulpcore"
@@ -0,0 +1,81 @@
1
+ # Generated by Django 4.2.22 on 2025-06-06 14:32
2
+
3
+ from django.db import migrations
4
+ from pulpcore.migrations import RequireVersion
5
+
6
+ # This migration is supposed to be zero downtime upgrade safe.
7
+
8
+
9
+ TASK_INSERT_TRIGGER_UP = """
10
+ CREATE FUNCTION on_insert_timestamp_task()
11
+ RETURNS TRIGGER
12
+ LANGUAGE plpgsql
13
+ AS $$
14
+ DECLARE
15
+ res_list text[];
16
+ res_list_shared text[];
17
+ BEGIN
18
+ res_list := array_agg(q.res) FROM (SELECT regexp_replace(unnest(NEW.reserved_resources_record), '^shared:', '') res) AS q;
19
+ res_list_shared := array_agg(q.res) FROM (SELECT 'shared:' || unnest(res_list) AS res) AS q;
20
+ PERFORM pg_advisory_xact_lock(4711, q.id) FROM (SELECT hashtext(res) AS id FROM unnest(res_list) AS res ORDER BY id) AS q;
21
+ NEW.pulp_created = clock_timestamp();
22
+ IF NEW.pulp_created <= (
23
+ SELECT max(pulp_created) FROM core_task
24
+ WHERE
25
+ state NOT IN ('completed', 'failed', 'canceled', 'skipped')
26
+ AND
27
+ reserved_resources_record && (res_list || res_list_shared)
28
+ )
29
+ THEN
30
+ RAISE EXCEPTION 'Clock screw detected.';
31
+ END IF;
32
+ RETURN NEW;
33
+ END;
34
+ $$
35
+ ;
36
+
37
+ CREATE FUNCTION on_update_timestamp_task()
38
+ RETURNS TRIGGER
39
+ LANGUAGE plpgsql
40
+ AS $$
41
+ BEGIN
42
+ -- This is mainly a safeguard to prevent old code from messing with the timestamp, now that the database is in charge.
43
+ RAISE EXCEPTION 'Updating pulp_created is not allowed.';
44
+ END;
45
+ $$
46
+ ;
47
+
48
+ CREATE TRIGGER on_insert_timestamp_task_trigger
49
+ BEFORE INSERT
50
+ ON core_task
51
+ FOR EACH ROW
52
+ EXECUTE FUNCTION on_insert_timestamp_task()
53
+ ;
54
+
55
+ CREATE TRIGGER on_update_timestamp_task_trigger
56
+ BEFORE UPDATE
57
+ ON core_task
58
+ FOR EACH ROW
59
+ WHEN (OLD.pulp_created <> NEW.pulp_created)
60
+ EXECUTE FUNCTION on_update_timestamp_task()
61
+ ;
62
+ """
63
+
64
+ TASK_INSERT_TRIGGER_DOWN = """
65
+ DROP TRIGGER on_update_timestamp_task_trigger on core_task;
66
+ DROP TRIGGER on_insert_timestamp_task_trigger on core_task;
67
+ DROP FUNCTION on_update_timestamp_task;
68
+ DROP FUNCTION on_insert_timestamp_task;
69
+ """
70
+
71
+
72
+ class Migration(migrations.Migration):
73
+
74
+ dependencies = [
75
+ ("core", "0133_repositoryversion_content_ids"),
76
+ ]
77
+
78
+ operations = [
79
+ RequireVersion("core", "3.82.1"),
80
+ migrations.RunSQL(sql=TASK_INSERT_TRIGGER_UP, reverse_sql=TASK_INSERT_TRIGGER_DOWN),
81
+ ]
@@ -0,0 +1,25 @@
1
+ # Generated by Django 4.2.22 on 2025-07-07 11:07
2
+
3
+ import django.contrib.postgres.indexes
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ("core", "0134_task_insert_trigger"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AddIndex(
15
+ model_name="task",
16
+ index=django.contrib.postgres.indexes.GinIndex(
17
+ condition=models.Q(
18
+ ("state__in", ["completed", "failed", "canceled", "skipped"]), _negated=True
19
+ ),
20
+ fields=["reserved_resources_record"],
21
+ name="pulp_task_resources_index",
22
+ opclasses=["array_ops"],
23
+ ),
24
+ ),
25
+ ]
@@ -9,6 +9,7 @@ from gettext import gettext as _
9
9
 
10
10
  from django.conf import settings
11
11
  from django.contrib.postgres.fields import ArrayField, HStoreField
12
+ from django.contrib.postgres.indexes import GinIndex
12
13
  from django.core.serializers.json import DjangoJSONEncoder
13
14
  from django.db import connection, models
14
15
  from django.utils import timezone
@@ -348,6 +349,12 @@ class Task(BaseModel, AutoAddObjPermsMixin):
348
349
  models.Index(fields=["unblocked_at"]),
349
350
  models.Index(fields=["state"]),
350
351
  models.Index(fields=["state", "pulp_created"]),
352
+ GinIndex(
353
+ name="pulp_task_resources_index",
354
+ fields=["reserved_resources_record"],
355
+ condition=~models.Q(state__in=["completed", "failed", "canceled", "skipped"]),
356
+ opclasses=["array_ops"],
357
+ ),
351
358
  ]
352
359
  permissions = [
353
360
  ("manage_roles_task", "Can manage role assignments on task"),
@@ -20,7 +20,8 @@ from django.core.files.storage import storages
20
20
  from django.conf import global_settings
21
21
  from django.core.exceptions import ImproperlyConfigured
22
22
  from django.db import connection
23
- from dynaconf import DjangoDynaconf, Dynaconf, Validator
23
+ from pulpcore.app.loggers import deprecation_logger
24
+ from dynaconf import DjangoDynaconf, Dynaconf, Validator, get_history
24
25
 
25
26
  from pulpcore import constants
26
27
 
@@ -553,7 +554,14 @@ settings = DjangoDynaconf(
553
554
 
554
555
  # begin compatibility layer for DEFAULT_FILE_STORAGE
555
556
  # Remove on pulpcore=3.85 or pulpcore=4.0
556
-
557
+ using_deprecated_storage_settings = len(get_history(settings, key="DEFAULT_FILE_STORAGE")) > 1
558
+ if using_deprecated_storage_settings:
559
+ deprecation_logger.warning(
560
+ "[deprecation] DEFAULT_FILE_STORAGE will be removed in pulpcore 3.85. "
561
+ "Learn how to upgrade to STORAGES:\n"
562
+ "https://discourse.pulpproject.org/t/"
563
+ "action-required-upgrade-your-storage-settings-before-pulpcore-3-85/2072/2"
564
+ )
557
565
  # Ensures the cached property storage.backends uses the the right value
558
566
  storages._backends = settings.STORAGES.copy()
559
567
  storages.backends
@@ -82,17 +82,20 @@ def purge(finished_before=None, states=None, **kwargs):
82
82
  states (Optional[List[str]]): List of task-states we want to purge.
83
83
 
84
84
  """
85
+ scheduled = current_task.get().taskschedule_set.exists()
86
+
85
87
  if finished_before is None:
86
88
  assert settings.TASK_PROTECTION_TIME > 0
87
89
  finished_before = timezone.now() - timezone.timedelta(minutes=settings.TASK_PROTECTION_TIME)
88
90
  if states is None:
89
91
  states = TASK_FINAL_STATES
90
- domain = get_domain()
92
+
91
93
  # Tasks, prior to the specified date, in the specified state, owned by the current-user, in the
92
94
  # current domain
93
- candidate_qs = Task.objects.filter(
94
- finished_at__lt=finished_before, state__in=states, pulp_domain=domain
95
- )
95
+ candidate_qs = Task.objects.filter(finished_at__lt=finished_before, state__in=states)
96
+
97
+ if not scheduled:
98
+ candidate_qs = candidate_qs.filter(pulp_domain=get_domain())
96
99
  if "user_pk" in kwargs:
97
100
  if (user_pk := kwargs["user_pk"]) is not None:
98
101
  current_user = User.objects.get(pk=user_pk)
@@ -101,7 +104,7 @@ def purge(finished_before=None, states=None, **kwargs):
101
104
  # This is the old task signature (<= 3.74) without "user_pk".
102
105
  # Has this task not been dispatched from a task schedule? Then we assume there was a user
103
106
  # doing that.
104
- if not current_task.get().taskschedule_set.exists():
107
+ if not scheduled:
105
108
  current_user = get_current_authenticated_user()
106
109
  if current_user is None:
107
110
  raise RuntimeError(
@@ -12,6 +12,10 @@ TASK_UNBLOCKING_LOCK = 84
12
12
  TASK_METRICS_HEARTBEAT_LOCK = 74
13
13
  STORAGE_METRICS_LOCK = 72
14
14
 
15
+ # Reasons to send along a task worker wakeup call.
16
+ TASK_WAKEUP_UNBLOCK = "unblock"
17
+ TASK_WAKEUP_HANDLE = "handle"
18
+
15
19
  #: All valid task states.
16
20
  TASK_STATES = SimpleNamespace(
17
21
  WAITING="waiting",
@@ -21,8 +21,18 @@ _logger = logging.getLogger(__name__)
21
21
  @click.option(
22
22
  "--reload/--no-reload", help="Reload worker on code changes. [requires hupper to be installed.]"
23
23
  )
24
+ @click.option(
25
+ "--auxiliary/--no-auxiliary",
26
+ default=False,
27
+ help="Auxiliary workers do not perform housekeeping duties.",
28
+ )
24
29
  @click.command()
25
- def worker(pid, burst, reload):
30
+ def worker(
31
+ pid,
32
+ burst,
33
+ reload,
34
+ auxiliary,
35
+ ):
26
36
  """A Pulp worker."""
27
37
 
28
38
  if reload:
@@ -40,4 +50,4 @@ def worker(pid, burst, reload):
40
50
 
41
51
  _logger.info("Starting distributed type worker")
42
52
 
43
- PulpcoreWorker().run(burst=burst)
53
+ PulpcoreWorker(auxiliary=auxiliary).run(burst=burst)
@@ -9,12 +9,11 @@ import traceback
9
9
  import tempfile
10
10
  import threading
11
11
  from asgiref.sync import sync_to_async
12
- from datetime import timedelta
13
12
  from gettext import gettext as _
14
13
 
15
14
  from django.conf import settings
16
15
  from django.db import connection, transaction
17
- from django.db.models import Model, Max
16
+ from django.db.models import Model
18
17
  from django_guid import get_guid
19
18
  from pulpcore.app.apps import MODULE_PLUGIN_VERSIONS
20
19
  from pulpcore.app.models import Task, TaskGroup
@@ -23,8 +22,8 @@ from pulpcore.constants import (
23
22
  TASK_FINAL_STATES,
24
23
  TASK_INCOMPLETE_STATES,
25
24
  TASK_STATES,
26
- TASK_DISPATCH_LOCK,
27
25
  IMMEDIATE_TIMEOUT,
26
+ TASK_WAKEUP_UNBLOCK,
28
27
  )
29
28
  from pulpcore.middleware import x_task_diagnostics_var
30
29
  from pulpcore.tasking.kafka import send_task_notification
@@ -47,10 +46,10 @@ def _validate_and_get_resources(resources):
47
46
  return list(resource_set)
48
47
 
49
48
 
50
- def wakeup_worker():
49
+ def wakeup_worker(reason="unknown"):
51
50
  # Notify workers
52
51
  with connection.connection.cursor() as cursor:
53
- cursor.execute("NOTIFY pulp_worker_wakeup")
52
+ cursor.execute("SELECT pg_notify('pulp_worker_wakeup', %s)", (reason,))
54
53
 
55
54
 
56
55
  def execute_task(task):
@@ -228,13 +227,6 @@ def dispatch(
228
227
  notify_workers = False
229
228
  with contextlib.ExitStack() as stack:
230
229
  with transaction.atomic():
231
- # Task creation need to be serialized so that pulp_created will provide a stable order
232
- # at every time. We specifically need to ensure that each task, when committed to the
233
- # task table will be the newest with respect to `pulp_created`.
234
- with connection.cursor() as cursor:
235
- # Wait for exclusive access and release automatically after transaction.
236
- cursor.execute("SELECT pg_advisory_xact_lock(%s, %s)", [0, TASK_DISPATCH_LOCK])
237
- newest_created = Task.objects.aggregate(Max("pulp_created"))["pulp_created__max"]
238
230
  task = Task.objects.create(
239
231
  state=TASK_STATES.WAITING,
240
232
  logging_cid=(get_guid()),
@@ -250,23 +242,6 @@ def dispatch(
250
242
  profile_options=x_task_diagnostics_var.get(None),
251
243
  )
252
244
  task.refresh_from_db() # The database may have assigned a timestamp for us.
253
- if newest_created and task.pulp_created <= newest_created:
254
- # Let this workaround not row forever into the future.
255
- if newest_created - task.pulp_created > timedelta(seconds=1):
256
- # Do not commit the transaction if this condition is not met.
257
- # If we ever hit this, think about delegating the timestamping to PostgresQL.
258
- raise RuntimeError("Clockscrew detected. Task dispatching would be dangerous.")
259
- # Try to work around the smaller glitch
260
- task.pulp_created = newest_created + timedelta(milliseconds=1)
261
- task.save()
262
- if task_group:
263
- task_group.refresh_from_db()
264
- if task_group.all_tasks_dispatched:
265
- task.set_canceling()
266
- task.set_canceled(
267
- TASK_STATES.CANCELED, "All tasks in group have been dispatched/canceled."
268
- )
269
- return task
270
245
  if immediate:
271
246
  # Grab the advisory lock before the task hits the db.
272
247
  stack.enter_context(task)
@@ -308,7 +283,7 @@ def dispatch(
308
283
  task.set_canceling()
309
284
  task.set_canceled(TASK_STATES.CANCELED, "Resources temporarily unavailable.")
310
285
  if notify_workers:
311
- wakeup_worker()
286
+ wakeup_worker(TASK_WAKEUP_UNBLOCK)
312
287
  return task
313
288
 
314
289
 
@@ -15,6 +15,7 @@ from packaging.version import parse as parse_version
15
15
  from django.conf import settings
16
16
  from django.db import connection
17
17
  from django.db.models import Case, Count, F, Max, Value, When
18
+ from django.db.models.functions import Random
18
19
  from django.utils import timezone
19
20
 
20
21
  from pulpcore.constants import (
@@ -23,6 +24,8 @@ from pulpcore.constants import (
23
24
  TASK_SCHEDULING_LOCK,
24
25
  TASK_UNBLOCKING_LOCK,
25
26
  TASK_METRICS_HEARTBEAT_LOCK,
27
+ TASK_WAKEUP_UNBLOCK,
28
+ TASK_WAKEUP_HANDLE,
26
29
  )
27
30
  from pulpcore.metrics import init_otel_meter
28
31
  from pulpcore.app.apps import pulp_plugin_configs
@@ -56,12 +59,14 @@ THRESHOLD_UNBLOCKED_WAITING_TIME = 5
56
59
 
57
60
 
58
61
  class PulpcoreWorker:
59
- def __init__(self):
62
+ def __init__(self, auxiliary=False):
60
63
  # Notification states from several signal handlers
61
64
  self.shutdown_requested = False
62
- self.wakeup = False
65
+ self.wakeup_unblock = False
66
+ self.wakeup_handle = False
63
67
  self.cancel_task = False
64
68
 
69
+ self.auxiliary = auxiliary
65
70
  self.task = None
66
71
  self.name = f"{os.getpid()}@{socket.getfqdn()}"
67
72
  self.heartbeat_period = timedelta(seconds=settings.WORKER_TTL / 3)
@@ -124,7 +129,17 @@ class PulpcoreWorker:
124
129
 
125
130
  def _pg_notify_handler(self, notification):
126
131
  if notification.channel == "pulp_worker_wakeup":
127
- self.wakeup = True
132
+ if notification.payload == TASK_WAKEUP_UNBLOCK:
133
+ # Auxiliary workers don't do this.
134
+ self.wakeup_unblock = not self.auxiliary
135
+ elif notification.payload == TASK_WAKEUP_HANDLE:
136
+ self.wakeup_handle = True
137
+ else:
138
+ _logger.warn("Unknown wakeup call recieved. Reason: '%s'", notification.payload)
139
+ # We cannot be sure so assume everything happened.
140
+ self.wakeup_unblock = not self.auxiliary
141
+ self.wakeup_handle = True
142
+
128
143
  elif notification.channel == "pulp_worker_metrics_heartbeat":
129
144
  self.last_metric_heartbeat = datetime.fromisoformat(notification.payload)
130
145
  elif self.task and notification.channel == "pulp_worker_cancel":
@@ -179,18 +194,19 @@ class PulpcoreWorker:
179
194
  def beat(self):
180
195
  if self.worker.last_heartbeat < timezone.now() - self.heartbeat_period:
181
196
  self.worker = self.handle_worker_heartbeat()
182
- self.worker_cleanup_countdown -= 1
183
- if self.worker_cleanup_countdown <= 0:
184
- self.worker_cleanup_countdown = WORKER_CLEANUP_INTERVAL
185
- self.worker_cleanup()
186
- with contextlib.suppress(AdvisoryLockError), PGAdvisoryLock(TASK_SCHEDULING_LOCK):
187
- dispatch_scheduled_tasks()
188
- # This "reporting code" must not me moved inside a task, because it is supposed
189
- # to be able to report on a congested tasking system to produce reliable results.
190
- self.record_unblocked_waiting_tasks_metric()
191
-
192
- def notify_workers(self):
193
- self.cursor.execute("NOTIFY pulp_worker_wakeup")
197
+ if not self.auxiliary:
198
+ self.worker_cleanup_countdown -= 1
199
+ if self.worker_cleanup_countdown <= 0:
200
+ self.worker_cleanup_countdown = WORKER_CLEANUP_INTERVAL
201
+ self.worker_cleanup()
202
+ with contextlib.suppress(AdvisoryLockError), PGAdvisoryLock(TASK_SCHEDULING_LOCK):
203
+ dispatch_scheduled_tasks()
204
+ # This "reporting code" must not me moved inside a task, because it is supposed
205
+ # to be able to report on a congested tasking system to produce reliable results.
206
+ self.record_unblocked_waiting_tasks_metric()
207
+
208
+ def notify_workers(self, reason="unknown"):
209
+ self.cursor.execute("SELECT pg_notify('pulp_worker_wakeup', %s)", (reason,))
194
210
 
195
211
  def cancel_abandoned_task(self, task, final_state, reason=None):
196
212
  """Cancel and clean up an abandoned task.
@@ -224,7 +240,7 @@ class PulpcoreWorker:
224
240
  delete_incomplete_resources(task)
225
241
  task.set_canceled(final_state=final_state, reason=reason)
226
242
  if task.reserved_resources_record:
227
- self.notify_workers()
243
+ self.notify_workers(TASK_WAKEUP_UNBLOCK)
228
244
  return True
229
245
 
230
246
  def is_compatible(self, task):
@@ -249,10 +265,31 @@ class PulpcoreWorker:
249
265
  def unblock_tasks(self):
250
266
  """Iterate over waiting tasks and mark them unblocked accordingly.
251
267
 
252
- Returns `True` if at least one task was unblocked. `False` otherwise.
268
+ This function also handles the communication around it.
269
+ In order to prevent multiple workers to attempt unblocking tasks at the same time it tries
270
+ to acquire a lock and just returns on failure to do so.
271
+ Also it clears the notification about tasks to be unblocked and sends the notification that
272
+ new unblocked tasks are made available.
273
+
274
+ Returns the number of new unblocked tasks.
253
275
  """
254
276
 
255
- changed = False
277
+ assert not self.auxiliary
278
+
279
+ count = 0
280
+ self.wakeup_unblock_tasks = False
281
+ with contextlib.suppress(AdvisoryLockError), PGAdvisoryLock(TASK_UNBLOCKING_LOCK):
282
+ if count := self._unblock_tasks():
283
+ self.notify_workers(TASK_WAKEUP_HANDLE)
284
+ return count
285
+
286
+ def _unblock_tasks(self):
287
+ """Iterate over waiting tasks and mark them unblocked accordingly.
288
+
289
+ Returns the number of new unblocked tasks.
290
+ """
291
+
292
+ count = 0
256
293
  taken_exclusive_resources = set()
257
294
  taken_shared_resources = set()
258
295
  # When batching this query, be sure to use "pulp_created" as a cursor
@@ -280,7 +317,7 @@ class PulpcoreWorker:
280
317
  task.pulp_domain.name,
281
318
  )
282
319
  task.unblock()
283
- changed = True
320
+ count += 1
284
321
  # Don't consider this task's resources as held.
285
322
  continue
286
323
 
@@ -301,7 +338,7 @@ class PulpcoreWorker:
301
338
  task.pulp_domain.name,
302
339
  )
303
340
  task.unblock()
304
- changed = True
341
+ count += 1
305
342
  elif task.state == TASK_STATES.RUNNING and task.unblocked_at is None:
306
343
  # This should not happen in normal operation.
307
344
  # And it is only an issue if the worker running that task died, because it will
@@ -318,7 +355,7 @@ class PulpcoreWorker:
318
355
  taken_exclusive_resources.update(exclusive_resources)
319
356
  taken_shared_resources.update(shared_resources)
320
357
 
321
- return changed
358
+ return count
322
359
 
323
360
  def iter_tasks(self):
324
361
  """Iterate over ready tasks and yield each task while holding the lock."""
@@ -327,7 +364,7 @@ class PulpcoreWorker:
327
364
  for task in Task.objects.filter(
328
365
  state__in=TASK_INCOMPLETE_STATES,
329
366
  unblocked_at__isnull=False,
330
- ).order_by("-immediate", "pulp_created"):
367
+ ).order_by("-immediate", F("pulp_created") + Value(timedelta(seconds=8)) * Random()):
331
368
  # This code will only be called if we acquired the lock successfully
332
369
  # The lock will be automatically be released at the end of the block
333
370
  with contextlib.suppress(AdvisoryLockError), task:
@@ -366,16 +403,18 @@ class PulpcoreWorker:
366
403
  """Wait for signals on the wakeup channel while heart beating."""
367
404
 
368
405
  _logger.debug(_("Worker %s entering sleep state."), self.name)
369
- while not self.shutdown_requested and not self.wakeup:
406
+ while not self.shutdown_requested and not self.wakeup_handle:
370
407
  r, w, x = select.select(
371
408
  [self.sentinel, connection.connection], [], [], self.heartbeat_period.seconds
372
409
  )
373
410
  self.beat()
374
411
  if connection.connection in r:
375
412
  connection.connection.execute("SELECT 1")
413
+ if self.wakeup_unblock:
414
+ self.unblock_tasks()
376
415
  if self.sentinel in r:
377
416
  os.read(self.sentinel, 256)
378
- self.wakeup = False
417
+ _logger.debug(_("Worker %s leaving sleep state."), self.name)
379
418
 
380
419
  def supervise_task(self, task):
381
420
  """Call and supervise the task process while heart beating.
@@ -424,12 +463,8 @@ class PulpcoreWorker:
424
463
  )
425
464
  cancel_state = TASK_STATES.CANCELED
426
465
  self.cancel_task = False
427
- if self.wakeup:
428
- with contextlib.suppress(AdvisoryLockError), PGAdvisoryLock(
429
- TASK_UNBLOCKING_LOCK
430
- ):
431
- self.unblock_tasks()
432
- self.wakeup = False
466
+ if self.wakeup_unblock:
467
+ self.unblock_tasks()
433
468
  if task_process.sentinel in r:
434
469
  if not task_process.is_alive():
435
470
  break
@@ -471,10 +506,10 @@ class PulpcoreWorker:
471
506
  if cancel_state:
472
507
  self.cancel_abandoned_task(task, cancel_state, cancel_reason)
473
508
  if task.reserved_resources_record:
474
- self.notify_workers()
509
+ self.notify_workers(TASK_WAKEUP_UNBLOCK)
475
510
  self.task = None
476
511
 
477
- def handle_available_tasks(self):
512
+ def handle_unblocked_tasks(self):
478
513
  """Pick and supervise tasks until there are no more available tasks.
479
514
 
480
515
  Failing to detect new available tasks can lead to a stuck state, as the workers
@@ -483,11 +518,9 @@ class PulpcoreWorker:
483
518
  """
484
519
  keep_looping = True
485
520
  while keep_looping and not self.shutdown_requested:
486
- try:
487
- with PGAdvisoryLock(TASK_UNBLOCKING_LOCK):
488
- keep_looping = self.unblock_tasks()
489
- except AdvisoryLockError:
490
- keep_looping = True
521
+ # Clear pending wakeups. We are about to handle them anyway.
522
+ self.wakeup_handle = False
523
+ keep_looping = False
491
524
  for task in self.iter_tasks():
492
525
  keep_looping = True
493
526
  self.supervise_task(task)
@@ -538,14 +571,19 @@ class PulpcoreWorker:
538
571
  self.cursor.execute("LISTEN pulp_worker_cancel")
539
572
  self.cursor.execute("LISTEN pulp_worker_metrics_heartbeat")
540
573
  if burst:
541
- self.handle_available_tasks()
574
+ if not self.auxiliary:
575
+ # Attempt to flush the task queue completely.
576
+ # Stop iteration if no new tasks were found to unblock.
577
+ while self.unblock_tasks():
578
+ self.handle_unblocked_tasks()
579
+ self.handle_unblocked_tasks()
542
580
  else:
543
581
  self.cursor.execute("LISTEN pulp_worker_wakeup")
544
582
  while not self.shutdown_requested:
545
583
  # do work
546
584
  if self.shutdown_requested:
547
585
  break
548
- self.handle_available_tasks()
586
+ self.handle_unblocked_tasks()
549
587
  if self.shutdown_requested:
550
588
  break
551
589
  # rest until notified to wakeup