pulpcore 3.90.1__tar.gz → 3.91.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 (470) hide show
  1. {pulpcore-3.90.1 → pulpcore-3.91.0}/CHANGES.md +11 -6
  2. {pulpcore-3.90.1 → pulpcore-3.91.0}/PKG-INFO +1 -1
  3. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/__init__.py +1 -1
  4. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/__init__.py +1 -1
  5. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/apps.py +16 -2
  6. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/util.py +1 -29
  7. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/constants.py +2 -3
  8. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/exceptions/__init__.py +0 -1
  9. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/exceptions/base.py +0 -4
  10. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/worker.py +89 -62
  11. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -3
  12. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -1
  13. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/PKG-INFO +1 -1
  14. {pulpcore-3.90.1 → pulpcore-3.91.0}/pyproject.toml +2 -2
  15. {pulpcore-3.90.1 → pulpcore-3.91.0}/CODE_OF_CONDUCT.md +0 -0
  16. {pulpcore-3.90.1 → pulpcore-3.91.0}/COMMITMENT +0 -0
  17. {pulpcore-3.90.1 → pulpcore-3.91.0}/CONTRIBUTING.md +0 -0
  18. {pulpcore-3.90.1 → pulpcore-3.91.0}/COPYRIGHT +0 -0
  19. {pulpcore-3.90.1 → pulpcore-3.91.0}/LICENSE +0 -0
  20. {pulpcore-3.90.1 → pulpcore-3.91.0}/MANIFEST.in +0 -0
  21. {pulpcore-3.90.1 → pulpcore-3.91.0}/README.md +0 -0
  22. {pulpcore-3.90.1 → pulpcore-3.91.0}/ci_requirements.txt +0 -0
  23. {pulpcore-3.90.1 → pulpcore-3.91.0}/functest_requirements.txt +0 -0
  24. {pulpcore-3.90.1 → pulpcore-3.91.0}/manage.py +0 -0
  25. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/__init__.py +0 -0
  26. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/migrations/0001_initial.py +0 -0
  27. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
  28. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/migrations/__init__.py +0 -0
  29. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/models.py +0 -0
  30. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/serializers.py +0 -0
  31. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/viewsets.py +0 -0
  32. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/pytest_plugin.py +0 -0
  33. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/rhsm/__init__.py +0 -0
  34. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/rhsm/rhsm_check_path.py +0 -0
  35. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/__init__.py +0 -0
  36. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/__init__.py +0 -0
  37. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/api/__init__.py +0 -0
  38. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
  39. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
  40. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
  41. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
  42. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
  43. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
  44. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
  45. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
  46. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
  47. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
  48. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
  49. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
  50. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
  51. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
  52. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
  53. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
  54. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
  55. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
  56. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
  57. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
  58. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
  59. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
  60. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
  61. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
  62. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
  63. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
  64. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
  65. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
  66. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
  67. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
  68. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
  69. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/conftest.py +0 -0
  70. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/constants.py +0 -0
  71. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/unit/__init__.py +0 -0
  72. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/unit/certdata.py +0 -0
  73. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/unit/test_rhsm_check_path.py +0 -0
  74. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/__init__.py +0 -0
  75. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py +0 -0
  76. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
  77. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/migrations/__init__.py +0 -0
  78. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/modelresource.py +0 -0
  79. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/models.py +0 -0
  80. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/replica.py +0 -0
  81. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/serializers.py +0 -0
  82. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/tasks/__init__.py +0 -0
  83. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/tasks/publishing.py +0 -0
  84. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/tasks/synchronizing.py +0 -0
  85. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/viewsets.py +0 -0
  86. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/manifest.py +0 -0
  87. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/pytest_plugin.py +0 -0
  88. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/__init__.py +0 -0
  89. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/__init__.py +0 -0
  90. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/__init__.py +0 -0
  91. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_acs.py +0 -0
  92. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
  93. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
  94. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_content_labels.py +0 -0
  95. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
  96. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
  97. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_domains.py +0 -0
  98. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_download_policies.py +0 -0
  99. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_filesystem_export.py +0 -0
  100. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
  101. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_labels.py +0 -0
  102. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
  103. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_publish.py +0 -0
  104. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
  105. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_rbac.py +0 -0
  106. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
  107. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_sync.py +0 -0
  108. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/unit/__init__.py +0 -0
  109. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/unit/test_safe_paths.py +0 -0
  110. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/unit/test_serializers.py +0 -0
  111. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/__init__.py +0 -0
  112. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/__init__.py +0 -0
  113. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/access_policy.py +0 -0
  114. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/authentication.py +0 -0
  115. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/checks.py +0 -0
  116. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/entrypoint.py +0 -0
  117. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/files.py +0 -0
  118. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/global_access_conditions.py +0 -0
  119. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/importexport.py +0 -0
  120. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/loggers.py +0 -0
  121. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/manage.py +0 -0
  122. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/__init__.py +0 -0
  123. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/__init__.py +0 -0
  124. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/add-signing-service.py +0 -0
  125. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/analyze-publication.py +0 -0
  126. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/clean-up-progress-reports.py +0 -0
  127. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
  128. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/dump-permissions.py +0 -0
  129. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
  130. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
  131. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/migrationstat.py +0 -0
  132. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/openapi.py +0 -0
  133. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/optimizemigration.py +0 -0
  134. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/rebasemigrations.py +0 -0
  135. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/remove-plugin.py +0 -0
  136. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
  137. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/repository-size.py +0 -0
  138. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
  139. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
  140. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/shell.py +0 -0
  141. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0001_squashed_0090_char_to_text_field.py +0 -0
  142. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0091_systemid.py +0 -0
  143. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
  144. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
  145. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
  146. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
  147. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
  148. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
  149. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
  150. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0099_versions_field.py +0 -0
  151. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
  152. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0101_add_domain.py +0 -0
  153. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
  154. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
  155. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0104_delete_label.py +0 -0
  156. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
  157. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
  158. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
  159. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0108_task_versions.py +0 -0
  160. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
  161. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
  162. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
  163. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
  164. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
  165. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
  166. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
  167. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
  168. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
  169. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0118_task_core_task_unblock_2276a4_idx_and_more.py +0 -0
  170. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0119_grouprole_core_groupr_object__250e22_idx_and_more.py +0 -0
  171. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0120_get_url_removal.py +0 -0
  172. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0121_add_profile_artifacts_table.py +0 -0
  173. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0122_record_last_replication_timestamp.py +0 -0
  174. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0123_upstreampulp_q_select.py +0 -0
  175. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0124_task_deferred_task_immediate.py +0 -0
  176. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0125_openpgpdistribution_openpgpkeyring_openpgppublickey_and_more.py +0 -0
  177. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0126_remoteartifact_failed_at.py +0 -0
  178. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0127_remove_upstreampulp_pulp_label_select.py +0 -0
  179. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0128_domain_pulp_labels.py +0 -0
  180. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0129_content_pulp_labels.py +0 -0
  181. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0130_upstreampulp_policy.py +0 -0
  182. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py +0 -0
  183. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0132_alter_content_options.py +0 -0
  184. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0132_task_profile_options.py +0 -0
  185. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0133_repositoryversion_content_ids.py +0 -0
  186. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0134_task_insert_trigger.py +0 -0
  187. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0135_task_pulp_task_resources_index.py +0 -0
  188. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0136_delete_basedistribution.py +0 -0
  189. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0137_appstatus.py +0 -0
  190. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0138_vulnerabilityreport.py +0 -0
  191. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0139_task_app_lock.py +0 -0
  192. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0140_require_appstatus_zdu.py +0 -0
  193. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0141_alter_appstatus_name.py +0 -0
  194. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0142_task_result.py +0 -0
  195. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0143_require_app_lock_zdu.py +0 -0
  196. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0144_delete_old_appstatus.py +0 -0
  197. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0145_domainize_import_export.py +0 -0
  198. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/__init__.py +0 -0
  199. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/mime_types.py +0 -0
  200. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/modelresource.py +0 -0
  201. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/__init__.py +0 -0
  202. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/access_policy.py +0 -0
  203. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/acs.py +0 -0
  204. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/analytics.py +0 -0
  205. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/base.py +0 -0
  206. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/content.py +0 -0
  207. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/domain.py +0 -0
  208. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/exporter.py +0 -0
  209. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/fields.py +0 -0
  210. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/generic.py +0 -0
  211. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/importer.py +0 -0
  212. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/openpgp.py +0 -0
  213. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/progress.py +0 -0
  214. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/publication.py +0 -0
  215. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/replica.py +0 -0
  216. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/repository.py +0 -0
  217. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/role.py +0 -0
  218. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/status.py +0 -0
  219. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/storage.py +0 -0
  220. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/task.py +0 -0
  221. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/upload.py +0 -0
  222. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/vulnerability_report.py +0 -0
  223. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/netutil.py +0 -0
  224. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/openpgp.py +0 -0
  225. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/protobuf/__init__.py +0 -0
  226. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
  227. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/pulp_hashlib.py +0 -0
  228. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
  229. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/redis_connection.py +0 -0
  230. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/replica.py +0 -0
  231. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/response.py +0 -0
  232. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/role_util.py +0 -0
  233. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/__init__.py +0 -0
  234. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/access_policy.py +0 -0
  235. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/acs.py +0 -0
  236. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/base.py +0 -0
  237. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/content.py +0 -0
  238. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/domain.py +0 -0
  239. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/exporter.py +0 -0
  240. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/fields.py +0 -0
  241. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/importer.py +0 -0
  242. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/openpgp.py +0 -0
  243. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/orphans.py +0 -0
  244. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/progress.py +0 -0
  245. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/publication.py +0 -0
  246. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/purge.py +0 -0
  247. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/reclaim.py +0 -0
  248. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/repair.py +0 -0
  249. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/replica.py +0 -0
  250. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/repository.py +0 -0
  251. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/status.py +0 -0
  252. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/task.py +0 -0
  253. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/upload.py +0 -0
  254. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/user.py +0 -0
  255. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/vulnerability_report.py +0 -0
  256. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/settings.py +0 -0
  257. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/__init__.py +0 -0
  258. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/analytics.py +0 -0
  259. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/base.py +0 -0
  260. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/export.py +0 -0
  261. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/importer.py +0 -0
  262. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/migrate.py +0 -0
  263. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/orphan.py +0 -0
  264. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/purge.py +0 -0
  265. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/reclaim_space.py +0 -0
  266. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/replica.py +0 -0
  267. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/repository.py +0 -0
  268. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/telemetry.py +0 -0
  269. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/test.py +0 -0
  270. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/upload.py +0 -0
  271. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/vulnerability_report.py +0 -0
  272. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/templates/rest_framework/api.html +0 -0
  273. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/templatetags/__init__.py +0 -0
  274. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/templatetags/pulp_urls.py +0 -0
  275. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/urls.py +0 -0
  276. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/views/__init__.py +0 -0
  277. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/views/importer.py +0 -0
  278. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/views/orphans.py +0 -0
  279. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/views/repair.py +0 -0
  280. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/views/status.py +0 -0
  281. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/__init__.py +0 -0
  282. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/access_policy.py +0 -0
  283. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/acs.py +0 -0
  284. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/base.py +0 -0
  285. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/content.py +0 -0
  286. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/custom_filters.py +0 -0
  287. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/domain.py +0 -0
  288. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/exporter.py +0 -0
  289. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/importer.py +0 -0
  290. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/openpgp.py +0 -0
  291. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/orphans.py +0 -0
  292. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/publication.py +0 -0
  293. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/reclaim.py +0 -0
  294. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/replica.py +0 -0
  295. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/repository.py +0 -0
  296. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/task.py +0 -0
  297. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/upload.py +0 -0
  298. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/user.py +0 -0
  299. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/vulnerability_report.py +0 -0
  300. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/wsgi.py +0 -0
  301. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/backends.py +0 -0
  302. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/cache/__init__.py +0 -0
  303. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/cache/cache.py +0 -0
  304. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/content/__init__.py +0 -0
  305. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/content/authentication.py +0 -0
  306. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/content/entrypoint.py +0 -0
  307. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/content/handler.py +0 -0
  308. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/content/instrumentation.py +0 -0
  309. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/download/__init__.py +0 -0
  310. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/download/base.py +0 -0
  311. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/download/factory.py +0 -0
  312. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/download/file.py +0 -0
  313. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/download/http.py +0 -0
  314. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/exceptions/plugin.py +0 -0
  315. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/exceptions/validation.py +0 -0
  316. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/filters.py +0 -0
  317. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/metrics.py +0 -0
  318. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/middleware.py +0 -0
  319. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/migrations.py +0 -0
  320. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/openapi/__init__.py +0 -0
  321. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/openapi/hooks.py +0 -0
  322. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/__init__.py +0 -0
  323. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/access_policy.py +0 -0
  324. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/actions.py +0 -0
  325. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/apps.py +0 -0
  326. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/authentication/__init__.py +0 -0
  327. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/cache/__init__.py +0 -0
  328. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/constants.py +0 -0
  329. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/content.py +0 -0
  330. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/download/__init__.py +0 -0
  331. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/exceptions.py +0 -0
  332. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/files.py +0 -0
  333. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/importexport.py +0 -0
  334. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/migrations.py +0 -0
  335. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/modelresources.py +0 -0
  336. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/models/__init__.py +0 -0
  337. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/models/role.py +0 -0
  338. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/publication_utils.py +0 -0
  339. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/pulp_hashlib.py +0 -0
  340. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/replica.py +0 -0
  341. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/repo_version_utils.py +0 -0
  342. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/responses.py +0 -0
  343. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/serializers/__init__.py +0 -0
  344. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/serializers/content.py +0 -0
  345. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/__init__.py +0 -0
  346. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/api.py +0 -0
  347. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/artifact_stages.py +0 -0
  348. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/content_stages.py +0 -0
  349. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/declarative_version.py +0 -0
  350. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/models.py +0 -0
  351. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/storage.py +0 -0
  352. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/sync.py +0 -0
  353. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/tasking.py +0 -0
  354. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/util.py +0 -0
  355. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/viewsets/__init__.py +0 -0
  356. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/viewsets/content.py +0 -0
  357. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/pytest_plugin.py +0 -0
  358. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/responses.py +0 -0
  359. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/__init__.py +0 -0
  360. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/_util.py +0 -0
  361. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/entrypoint.py +0 -0
  362. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/kafka.py +0 -0
  363. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/storage.py +0 -0
  364. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/tasks.py +0 -0
  365. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/__init__.py +0 -0
  366. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/__init__.py +0 -0
  367. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/__init__.py +0 -0
  368. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
  369. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
  370. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_api_root_rewrite.py +0 -0
  371. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
  372. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_auth.py +0 -0
  373. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
  374. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
  375. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
  376. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_filter.py +0 -0
  377. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_login.py +0 -0
  378. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
  379. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_openpgp.py +0 -0
  380. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_replication.py +0 -0
  381. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_repos.py +0 -0
  382. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_role.py +0 -0
  383. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
  384. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_scoping.py +0 -0
  385. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
  386. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_status.py +0 -0
  387. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_task_purge.py +0 -0
  388. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_tasking.py +0 -0
  389. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_upload.py +0 -0
  390. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
  391. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_workers.py +0 -0
  392. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
  393. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_checkpoint.py +0 -0
  394. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
  395. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
  396. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
  397. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
  398. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
  399. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
  400. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
  401. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
  402. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +0 -0
  403. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
  404. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_migrate.py +0 -0
  405. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
  406. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
  407. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_prn.py +0 -0
  408. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
  409. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
  410. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
  411. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
  412. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
  413. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
  414. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/assets/__init__.py +0 -0
  415. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/content_with_coverage.py +0 -0
  416. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/utils.py +0 -0
  417. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/performance/__init__.py +0 -0
  418. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/performance/test_performance.py +0 -0
  419. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/__init__.py +0 -0
  420. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/conftest.py +0 -0
  421. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/content/__init__.py +0 -0
  422. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/content/test_handler.py +0 -0
  423. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
  424. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/download/__init__.py +0 -0
  425. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
  426. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
  427. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/metrics/__init__.py +0 -0
  428. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/metrics/conftest.py +0 -0
  429. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +0 -0
  430. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/metrics/test_django_instrumentation.py +0 -0
  431. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/migration/__init__.py +0 -0
  432. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/__init__.py +0 -0
  433. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/test_base.py +0 -0
  434. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/test_content.py +0 -0
  435. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/test_remote.py +0 -0
  436. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/test_repository.py +0 -0
  437. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/test_task.py +0 -0
  438. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/roles/__init__.py +0 -0
  439. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/roles/test_roles.py +0 -0
  440. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/__init__.py +0 -0
  441. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_base.py +0 -0
  442. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
  443. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_fields.py +0 -0
  444. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_orphans_cleanup.py +0 -0
  445. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
  446. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
  447. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_user.py +0 -0
  448. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/stages/__init__.py +0 -0
  449. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
  450. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/stages/test_stages.py +0 -0
  451. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_cache.py +0 -0
  452. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_chunked_file.py +0 -0
  453. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_content_guard.py +0 -0
  454. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_files.py +0 -0
  455. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_import_checks.py +0 -0
  456. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
  457. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_settings.py +0 -0
  458. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_util.py +0 -0
  459. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_viewsets.py +0 -0
  460. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_vulnerability_report.py +0 -0
  461. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
  462. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/viewsets/test_viewset_base.py +0 -0
  463. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/SOURCES.txt +0 -0
  464. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/dependency_links.txt +0 -0
  465. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/entry_points.txt +0 -0
  466. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/requires.txt +0 -0
  467. {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/top_level.txt +0 -0
  468. {pulpcore-3.90.1 → pulpcore-3.91.0}/setup.cfg +0 -0
  469. {pulpcore-3.90.1 → pulpcore-3.91.0}/test_requirements.txt +0 -0
  470. {pulpcore-3.90.1 → pulpcore-3.91.0}/unittest_requirements.txt +0 -0
@@ -8,26 +8,31 @@
8
8
 
9
9
  [//]: # (towncrier release notes start)
10
10
 
11
- ## 3.90.1 (2025-10-01) {: #3.90.1 }
11
+ ## 3.91.0 (2025-10-01) {: #3.91.0 }
12
12
 
13
- ### REST API {: #3.90.1-rest-api }
13
+ ### REST API {: #3.91.0-rest-api }
14
14
 
15
- #### Bugfixes {: #3.90.1-rest-api-bugfix }
15
+ #### Features {: #3.91.0-rest-api-feature }
16
+
17
+ - Changed orphan cleanup to run as a scheduled task.
18
+ - Removed the use of session scoped advisory locks from workers janitorial work.
19
+
20
+ #### Bugfixes {: #3.91.0-rest-api-bugfix }
16
21
 
17
22
  - Fix situations with a single worker per installation failing to unblock all tasks that come in quick succession.
18
23
  [#6873](https://github.com/pulp/pulpcore/issues/6873)
19
24
  - Fixed exception propagation in the pulp-content instrumentation middleware.
20
25
  [#6925](https://github.com/pulp/pulpcore/issues/6925)
21
26
 
22
- ### Plugin API {: #3.90.1-plugin-api }
27
+ ### Plugin API {: #3.91.0-plugin-api }
23
28
 
24
29
  No significant changes.
25
30
 
26
- ### Pulp File {: #3.90.1-pulp-file }
31
+ ### Pulp File {: #3.91.0-pulp-file }
27
32
 
28
33
  No significant changes.
29
34
 
30
- ### Pulp Cert Guard {: #3.90.1-pulp-cert-guard }
35
+ ### Pulp Cert Guard {: #3.91.0-pulp-cert-guard }
31
36
 
32
37
  No significant changes.
33
38
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulpcore
3
- Version: 3.90.1
3
+ Version: 3.91.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
@@ -6,6 +6,6 @@ class PulpCertGuardPluginAppConfig(PulpPluginAppConfig):
6
6
 
7
7
  name = "pulp_certguard.app"
8
8
  label = "certguard"
9
- version = "3.90.1"
9
+ version = "3.91.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.90.1"
11
+ version = "3.91.0"
12
12
  python_package_name = "pulpcore"
13
13
  domain_compatible = True
@@ -8,7 +8,7 @@ from django import apps
8
8
  from django.conf import settings
9
9
  from django.core.exceptions import ImproperlyConfigured
10
10
  from django.db import connection, transaction
11
- from django.db.models.signals import post_migrate
11
+ from django.db.models.signals import post_migrate, pre_migrate
12
12
  from django.utils.module_loading import module_has_submodule
13
13
 
14
14
  from pulpcore.exceptions.plugin import MissingPlugin
@@ -239,7 +239,7 @@ class PulpAppConfig(PulpPluginAppConfig):
239
239
  label = "core"
240
240
 
241
241
  # The version of this app
242
- version = "3.90.1"
242
+ version = "3.91.0"
243
243
 
244
244
  # The python package name providing this app
245
245
  python_package_name = "pulpcore"
@@ -250,6 +250,7 @@ class PulpAppConfig(PulpPluginAppConfig):
250
250
  super().ready()
251
251
  from . import checks # noqa
252
252
 
253
+ pre_migrate.connect(_clean_app_status, sender=self, dispatch_uid="clean_app_status")
253
254
  post_migrate.connect(
254
255
  _ensure_default_domain, sender=self, dispatch_uid="ensure_default_domain"
255
256
  )
@@ -263,6 +264,19 @@ class PulpAppConfig(PulpPluginAppConfig):
263
264
  )
264
265
 
265
266
 
267
+ def _clean_app_status(sender, apps, verbosity, **kwargs):
268
+ from django.contrib.postgres.functions import TransactionNow
269
+ from django.db.models import F
270
+
271
+ try:
272
+ AppStatus = apps.get_model("core", "AppStatus")
273
+ except LookupError:
274
+ if verbosity >= 1:
275
+ print(_("AppStatus model does not exist. Skipping pre migrate cleanup."))
276
+ else:
277
+ AppStatus.objects.filter(last_heartbeat__lt=TransactionNow() - F("ttl")).delete()
278
+
279
+
266
280
  def _populate_access_policies(sender, apps, verbosity, **kwargs):
267
281
  from pulpcore.app.util import get_view_urlpattern
268
282
  from pulpcore.app.viewsets import LoginViewSet
@@ -25,7 +25,6 @@ from rest_framework.reverse import reverse as drf_reverse
25
25
  from pulpcore.app.loggers import deprecation_logger
26
26
  from pulpcore.app.apps import pulp_plugin_configs
27
27
  from pulpcore.app import models
28
- from pulpcore.exceptions import AdvisoryLockError
29
28
  from pulpcore.exceptions.validation import InvalidSignatureError
30
29
 
31
30
 
@@ -468,6 +467,7 @@ def configure_cleanup():
468
467
  settings.TMPFILE_PROTECTION_TIME,
469
468
  ),
470
469
  ("tasks", "pulpcore.app.tasks.purge.purge", settings.TASK_PROTECTION_TIME),
470
+ ("content", "pulpcore.app.tasks.orphan.orphan_cleanup", settings.ORPHAN_PROTECTION_TIME),
471
471
  ]:
472
472
  if protection_time > 0:
473
473
  dispatch_interval = timedelta(minutes=protection_time)
@@ -636,34 +636,6 @@ def get_worker_name():
636
636
  return f"{os.getpid()}@{socket.gethostname()}"
637
637
 
638
638
 
639
- class PGAdvisoryLock:
640
- """
641
- A context manager that will hold a postgres advisory lock non-blocking.
642
-
643
- The locks can be chosen from a lock group to avoid collisions. They will never collide with the
644
- locks used for tasks.
645
- """
646
-
647
- def __init__(self, lock, lock_group=0):
648
- self.lock_group = lock_group
649
- self.lock = lock
650
-
651
- def __enter__(self):
652
- with connection.cursor() as cursor:
653
- cursor.execute("SELECT pg_try_advisory_lock(%s, %s)", [self.lock_group, self.lock])
654
- acquired = cursor.fetchone()[0]
655
- if not acquired:
656
- raise AdvisoryLockError("Could not acquire lock.")
657
- return self
658
-
659
- def __exit__(self, exc_type, exc_value, traceback):
660
- with connection.cursor() as cursor:
661
- cursor.execute("SELECT pg_advisory_unlock(%s, %s)", [self.lock_group, self.lock])
662
- released = cursor.fetchone()[0]
663
- if not released:
664
- raise RuntimeError("Lock not held.")
665
-
666
-
667
639
  def normalize_http_status(status):
668
640
  """Convert the HTTP status code to 2xx, 3xx, etc., normalizing the last two digits."""
669
641
  if 100 <= status < 200:
@@ -6,11 +6,10 @@ from types import SimpleNamespace
6
6
  # The group will be 0.
7
7
  # The numbers are randomly chosen.
8
8
  # !!! Never change these values !!!
9
- TASK_DISPATCH_LOCK = 21
10
9
  TASK_SCHEDULING_LOCK = 42
11
10
  TASK_UNBLOCKING_LOCK = 84
12
- TASK_METRICS_HEARTBEAT_LOCK = 74
13
- STORAGE_METRICS_LOCK = 72
11
+ TASK_METRICS_LOCK = 74
12
+ WORKER_CLEANUP_LOCK = 11
14
13
 
15
14
  # Reasons to send along a task worker wakeup call.
16
15
  TASK_WAKEUP_UNBLOCK = "unblock"
@@ -1,5 +1,4 @@
1
1
  from .base import (
2
- AdvisoryLockError,
3
2
  PulpException,
4
3
  ResourceImmutableError,
5
4
  TimeoutException,
@@ -64,10 +64,6 @@ class ResourceImmutableError(PulpException):
64
64
  return msg
65
65
 
66
66
 
67
- class AdvisoryLockError(Exception):
68
- """Exception to signal that a lock could not be acquired."""
69
-
70
-
71
67
  class TimeoutException(PulpException):
72
68
  """
73
69
  Exception to signal timeout error.
@@ -1,19 +1,19 @@
1
1
  from gettext import gettext as _
2
2
 
3
+ import functools
3
4
  import logging
4
5
  import os
5
6
  import random
6
7
  import select
7
8
  import signal
8
9
  import socket
9
- import contextlib
10
10
  from datetime import datetime, timedelta
11
11
  from multiprocessing import Process
12
12
  from tempfile import TemporaryDirectory
13
13
  from packaging.version import parse as parse_version
14
14
 
15
15
  from django.conf import settings
16
- from django.db import connection, DatabaseError, IntegrityError
16
+ from django.db import connection, transaction, DatabaseError, IntegrityError
17
17
  from django.db.models import Case, Count, F, Max, Value, When
18
18
  from django.utils import timezone
19
19
 
@@ -22,15 +22,14 @@ from pulpcore.constants import (
22
22
  TASK_INCOMPLETE_STATES,
23
23
  TASK_SCHEDULING_LOCK,
24
24
  TASK_UNBLOCKING_LOCK,
25
- TASK_METRICS_HEARTBEAT_LOCK,
25
+ TASK_METRICS_LOCK,
26
+ WORKER_CLEANUP_LOCK,
26
27
  TASK_WAKEUP_UNBLOCK,
27
28
  TASK_WAKEUP_HANDLE,
28
29
  )
29
30
  from pulpcore.metrics import init_otel_meter
30
31
  from pulpcore.app.apps import pulp_plugin_configs
31
32
  from pulpcore.app.models import Task, AppStatus
32
- from pulpcore.app.util import PGAdvisoryLock
33
- from pulpcore.exceptions import AdvisoryLockError
34
33
 
35
34
  from pulpcore.tasking.storage import WorkerDirectory
36
35
  from pulpcore.tasking._util import (
@@ -59,6 +58,30 @@ IGNORED_TASKS_CLEANUP_INTERVAL = 100
59
58
  THRESHOLD_UNBLOCKED_WAITING_TIME = 5
60
59
 
61
60
 
61
+ def exclusive(lock):
62
+ """
63
+ Runs function in a transaction holding the specified lock.
64
+ Returns None if the lock could not be acquired.
65
+ It should be used for actions that only need to be performed by a single worker.
66
+ """
67
+
68
+ def _decorator(f):
69
+ @functools.wraps(f)
70
+ def _f(self, *args, **kwargs):
71
+ with transaction.atomic():
72
+ with connection.cursor() as cursor:
73
+ cursor.execute("SELECT pg_try_advisory_xact_lock(%s, %s)", [0, lock])
74
+ acquired = cursor.fetchone()[0]
75
+ if acquired:
76
+ return f(self, *args, **kwargs)
77
+ else:
78
+ return None
79
+
80
+ return _f
81
+
82
+ return _decorator
83
+
84
+
62
85
  class PulpcoreWorker:
63
86
  def __init__(self, auxiliary=False):
64
87
  # Notification states from several signal handlers
@@ -112,9 +135,9 @@ class PulpcoreWorker:
112
135
  description="The age of the longest waiting task.",
113
136
  unit="seconds",
114
137
  )
115
- self.record_unblocked_waiting_tasks_metric = self._record_unblocked_waiting_tasks_metric
138
+ self.otel_enabled = True
116
139
  else:
117
- self.record_unblocked_waiting_tasks_metric = lambda *args, **kwargs: None
140
+ self.otel_enabled = False
118
141
 
119
142
  def _signal_handler(self, thesignal, frame):
120
143
  if thesignal in (signal.SIGHUP, signal.SIGTERM):
@@ -187,7 +210,8 @@ class PulpcoreWorker:
187
210
  ):
188
211
  self.ignored_task_ids.remove(pk)
189
212
 
190
- def worker_cleanup(self):
213
+ @exclusive(WORKER_CLEANUP_LOCK)
214
+ def app_worker_cleanup(self):
191
215
  qs = AppStatus.objects.missing()
192
216
  for app_worker in qs:
193
217
  _logger.warning(
@@ -198,8 +222,45 @@ class PulpcoreWorker:
198
222
  # Don't bother the others.
199
223
  self.wakeup_unblock = True
200
224
 
225
+ @exclusive(TASK_SCHEDULING_LOCK)
226
+ def dispatch_scheduled_tasks(self):
227
+ dispatch_scheduled_tasks()
228
+
229
+ @exclusive(TASK_METRICS_LOCK)
230
+ def record_unblocked_waiting_tasks_metric(self, now):
231
+ # This "reporting code" must not me moved inside a task, because it is supposed
232
+ # to be able to report on a congested tasking system to produce reliable results.
233
+ # For performance reasons we aggregate these statistics on a single database call.
234
+ unblocked_tasks_stats = (
235
+ Task.objects.filter(unblocked_at__isnull=False, state=TASK_STATES.WAITING)
236
+ .annotate(unblocked_for=Value(timezone.now()) - F("unblocked_at"))
237
+ .aggregate(
238
+ longest_unblocked_waiting_time=Max("unblocked_for", default=timezone.timedelta(0)),
239
+ unblocked_tasks_count_gte_threshold=Count(
240
+ Case(
241
+ When(
242
+ unblocked_for__gte=Value(
243
+ timezone.timedelta(seconds=THRESHOLD_UNBLOCKED_WAITING_TIME)
244
+ ),
245
+ then=1,
246
+ )
247
+ )
248
+ ),
249
+ )
250
+ )
251
+
252
+ self.tasks_unblocked_queue_meter.set(
253
+ unblocked_tasks_stats["unblocked_tasks_count_gte_threshold"]
254
+ )
255
+ self.tasks_longest_unblocked_time_meter.set(
256
+ unblocked_tasks_stats["longest_unblocked_waiting_time"].seconds
257
+ )
258
+
259
+ self.cursor.execute(f"NOTIFY pulp_worker_metrics_heartbeat, '{str(now)}'")
260
+
201
261
  def beat(self):
202
- if self.app_status.last_heartbeat < timezone.now() - self.heartbeat_period:
262
+ now = timezone.now()
263
+ if self.app_status.last_heartbeat < now - self.heartbeat_period:
203
264
  self.handle_worker_heartbeat()
204
265
  if self.ignored_task_ids:
205
266
  self.ignored_task_countdown -= 1
@@ -210,12 +271,12 @@ class PulpcoreWorker:
210
271
  self.worker_cleanup_countdown -= 1
211
272
  if self.worker_cleanup_countdown <= 0:
212
273
  self.worker_cleanup_countdown = WORKER_CLEANUP_INTERVAL
213
- self.worker_cleanup()
214
- with contextlib.suppress(AdvisoryLockError), PGAdvisoryLock(TASK_SCHEDULING_LOCK):
215
- dispatch_scheduled_tasks()
216
- # This "reporting code" must not me moved inside a task, because it is supposed
217
- # to be able to report on a congested tasking system to produce reliable results.
218
- self.record_unblocked_waiting_tasks_metric()
274
+ self.app_worker_cleanup()
275
+
276
+ self.dispatch_scheduled_tasks()
277
+
278
+ if self.otel_enabled and now > self.last_metric_heartbeat + self.heartbeat_period:
279
+ self.record_unblocked_waiting_tasks_metric(now)
219
280
 
220
281
  def notify_workers(self, reason):
221
282
  self.cursor.execute("SELECT pg_notify('pulp_worker_wakeup', %s)", (reason,))
@@ -283,19 +344,20 @@ class PulpcoreWorker:
283
344
  assert not self.auxiliary
284
345
 
285
346
  self.wakeup_unblock = False
286
- with contextlib.suppress(AdvisoryLockError), PGAdvisoryLock(TASK_UNBLOCKING_LOCK):
287
- self._unblock_tasks()
347
+ result = self._unblock_tasks()
348
+ if result is not None and (
349
+ Task.objects.filter(
350
+ state__in=[TASK_STATES.WAITING, TASK_STATES.CANCELING], app_lock=None
351
+ )
352
+ .exclude(unblocked_at=None)
353
+ .exists()
354
+ ):
355
+ self.notify_workers(TASK_WAKEUP_HANDLE)
356
+ return True
288
357
 
289
- if (
290
- Task.objects.filter(state__in=TASK_INCOMPLETE_STATES, app_lock=None)
291
- .exclude(unblocked_at=None)
292
- .exists()
293
- ):
294
- self.notify_workers(TASK_WAKEUP_HANDLE)
295
- return True
296
- return False
297
- return None
358
+ return result
298
359
 
360
+ @exclusive(TASK_UNBLOCKING_LOCK)
299
361
  def _unblock_tasks(self):
300
362
  """Iterate over waiting tasks and mark them unblocked accordingly."""
301
363
 
@@ -359,6 +421,7 @@ class PulpcoreWorker:
359
421
  # Record the resources of the pending task
360
422
  taken_exclusive_resources.update(exclusive_resources)
361
423
  taken_shared_resources.update(shared_resources)
424
+ return False
362
425
 
363
426
  def sleep(self):
364
427
  """Wait for signals on the wakeup channel while heart beating."""
@@ -545,42 +608,6 @@ class PulpcoreWorker:
545
608
  if rows != 1:
546
609
  raise RuntimeError("Something other than us is messing around with locks.")
547
610
 
548
- def _record_unblocked_waiting_tasks_metric(self):
549
- now = timezone.now()
550
- if now > self.last_metric_heartbeat + self.heartbeat_period:
551
- with contextlib.suppress(AdvisoryLockError), PGAdvisoryLock(
552
- TASK_METRICS_HEARTBEAT_LOCK
553
- ):
554
- # For performance reasons we aggregate these statistics on a single database call.
555
- unblocked_tasks_stats = (
556
- Task.objects.filter(unblocked_at__isnull=False, state=TASK_STATES.WAITING)
557
- .annotate(unblocked_for=Value(timezone.now()) - F("unblocked_at"))
558
- .aggregate(
559
- longest_unblocked_waiting_time=Max(
560
- "unblocked_for", default=timezone.timedelta(0)
561
- ),
562
- unblocked_tasks_count_gte_threshold=Count(
563
- Case(
564
- When(
565
- unblocked_for__gte=Value(
566
- timezone.timedelta(seconds=THRESHOLD_UNBLOCKED_WAITING_TIME)
567
- ),
568
- then=1,
569
- )
570
- )
571
- ),
572
- )
573
- )
574
-
575
- self.tasks_unblocked_queue_meter.set(
576
- unblocked_tasks_stats["unblocked_tasks_count_gte_threshold"]
577
- )
578
- self.tasks_longest_unblocked_time_meter.set(
579
- unblocked_tasks_stats["longest_unblocked_waiting_time"].seconds
580
- )
581
-
582
- self.cursor.execute(f"NOTIFY pulp_worker_metrics_heartbeat, '{str(now)}'")
583
-
584
611
  def run(self, burst=False):
585
612
  with WorkerDirectory(self.name):
586
613
  signal.signal(signal.SIGINT, self._signal_handler)
@@ -8,7 +8,6 @@ the case.
8
8
  import pytest
9
9
  import uuid
10
10
 
11
- from pulpcore.app import settings
12
11
  from pulpcore.client.pulpcore.exceptions import ApiException
13
12
 
14
13
  from pulpcore.client.pulp_file import RepositorySyncURL
@@ -16,8 +15,6 @@ from pulpcore.client.pulp_file import RepositorySyncURL
16
15
  NUM_REPOS = 1
17
16
  NUM_EXPORTERS = 4
18
17
 
19
- pytestmark = pytest.mark.skipif(settings.DOMAIN_ENABLED, reason="Domains do not support export.")
20
-
21
18
 
22
19
  @pytest.fixture
23
20
  def create_exporter(pulpcore_bindings, gen_object_with_cleanup, add_to_filesystem_cleanup):
@@ -21,7 +21,6 @@ NUM_REPOS = 2
21
21
 
22
22
 
23
23
  pytestmark = [
24
- pytest.mark.skipif(settings.DOMAIN_ENABLED, reason="Domains do not support import."),
25
24
  pytest.mark.skipif(
26
25
  "/tmp" not in settings.ALLOWED_IMPORT_PATHS,
27
26
  reason="Cannot run import-tests unless /tmp is in ALLOWED_IMPORT_PATHS ({}).".format(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulpcore
3
- Version: 3.90.1
3
+ Version: 3.91.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
@@ -7,7 +7,7 @@ build-backend = 'setuptools.build_meta'
7
7
 
8
8
  [project]
9
9
  name = "pulpcore"
10
- version = "3.90.1"
10
+ version = "3.91.0"
11
11
  description = "Pulp Django Application and Related Modules"
12
12
  readme = "README.md"
13
13
  authors = [
@@ -204,7 +204,7 @@ ignore = [
204
204
  [tool.bumpversion]
205
205
  # This section is managed by the plugin template. Do not edit manually.
206
206
 
207
- current_version = "3.90.1"
207
+ current_version = "3.91.0"
208
208
  commit = false
209
209
  tag = false
210
210
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<alpha>0a)?(?P<patch>\\d+)(\\.(?P<release>[a-z]+))?"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes