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.
- {pulpcore-3.90.1 → pulpcore-3.91.0}/CHANGES.md +11 -6
- {pulpcore-3.90.1 → pulpcore-3.91.0}/PKG-INFO +1 -1
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/__init__.py +1 -1
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/__init__.py +1 -1
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/apps.py +16 -2
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/util.py +1 -29
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/constants.py +2 -3
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/exceptions/__init__.py +0 -1
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/exceptions/base.py +0 -4
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/worker.py +89 -62
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -3
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -1
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/PKG-INFO +1 -1
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pyproject.toml +2 -2
- {pulpcore-3.90.1 → pulpcore-3.91.0}/CODE_OF_CONDUCT.md +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/COMMITMENT +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/CONTRIBUTING.md +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/COPYRIGHT +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/LICENSE +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/MANIFEST.in +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/README.md +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/ci_requirements.txt +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/functest_requirements.txt +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/manage.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/migrations/0001_initial.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/migrations/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/models.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/serializers.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/app/viewsets.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/pytest_plugin.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/rhsm/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/rhsm/rhsm_check_path.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/conftest.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/constants.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/unit/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/unit/certdata.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/unit/test_rhsm_check_path.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/migrations/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/modelresource.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/models.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/replica.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/serializers.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/tasks/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/tasks/publishing.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/tasks/synchronizing.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/app/viewsets.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/manifest.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/pytest_plugin.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_acs.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_content_labels.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_domains.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_download_policies.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_filesystem_export.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_labels.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_publish.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_rbac.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/functional/api/test_sync.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/unit/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/unit/test_safe_paths.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_file/tests/unit/test_serializers.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/access_policy.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/authentication.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/checks.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/entrypoint.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/files.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/global_access_conditions.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/importexport.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/loggers.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/manage.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/add-signing-service.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/analyze-publication.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/clean-up-progress-reports.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/dump-permissions.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/migrationstat.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/openapi.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/optimizemigration.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/rebasemigrations.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/remove-plugin.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/repository-size.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/management/commands/shell.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0001_squashed_0090_char_to_text_field.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0091_systemid.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0099_versions_field.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0101_add_domain.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0104_delete_label.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0108_task_versions.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0118_task_core_task_unblock_2276a4_idx_and_more.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0119_grouprole_core_groupr_object__250e22_idx_and_more.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0120_get_url_removal.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0121_add_profile_artifacts_table.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0122_record_last_replication_timestamp.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0123_upstreampulp_q_select.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0124_task_deferred_task_immediate.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0125_openpgpdistribution_openpgpkeyring_openpgppublickey_and_more.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0126_remoteartifact_failed_at.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0127_remove_upstreampulp_pulp_label_select.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0128_domain_pulp_labels.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0129_content_pulp_labels.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0130_upstreampulp_policy.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0132_alter_content_options.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0132_task_profile_options.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0133_repositoryversion_content_ids.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0134_task_insert_trigger.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0135_task_pulp_task_resources_index.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0136_delete_basedistribution.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0137_appstatus.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0138_vulnerabilityreport.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0139_task_app_lock.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0140_require_appstatus_zdu.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0141_alter_appstatus_name.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0142_task_result.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0143_require_app_lock_zdu.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0144_delete_old_appstatus.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/0145_domainize_import_export.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/migrations/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/mime_types.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/modelresource.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/access_policy.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/acs.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/analytics.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/base.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/content.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/domain.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/exporter.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/fields.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/generic.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/importer.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/openpgp.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/progress.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/publication.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/replica.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/repository.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/role.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/status.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/storage.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/task.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/upload.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/models/vulnerability_report.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/netutil.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/openpgp.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/protobuf/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/pulp_hashlib.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/redis_connection.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/replica.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/response.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/role_util.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/access_policy.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/acs.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/base.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/content.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/domain.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/exporter.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/fields.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/importer.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/openpgp.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/orphans.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/progress.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/publication.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/purge.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/reclaim.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/repair.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/replica.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/repository.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/status.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/task.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/upload.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/user.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/serializers/vulnerability_report.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/settings.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/analytics.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/base.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/export.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/importer.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/migrate.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/orphan.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/purge.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/reclaim_space.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/replica.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/repository.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/telemetry.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/test.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/upload.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/tasks/vulnerability_report.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/templates/rest_framework/api.html +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/templatetags/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/templatetags/pulp_urls.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/urls.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/views/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/views/importer.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/views/orphans.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/views/repair.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/views/status.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/access_policy.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/acs.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/base.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/content.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/custom_filters.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/domain.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/exporter.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/importer.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/openpgp.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/orphans.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/publication.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/reclaim.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/replica.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/repository.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/task.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/upload.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/user.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/viewsets/vulnerability_report.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/app/wsgi.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/backends.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/cache/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/cache/cache.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/content/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/content/authentication.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/content/entrypoint.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/content/handler.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/content/instrumentation.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/download/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/download/base.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/download/factory.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/download/file.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/download/http.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/exceptions/plugin.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/exceptions/validation.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/filters.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/metrics.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/middleware.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/migrations.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/openapi/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/openapi/hooks.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/access_policy.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/actions.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/apps.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/authentication/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/cache/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/constants.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/content.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/download/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/exceptions.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/files.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/importexport.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/migrations.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/modelresources.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/models/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/models/role.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/publication_utils.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/pulp_hashlib.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/replica.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/repo_version_utils.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/responses.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/serializers/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/serializers/content.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/api.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/artifact_stages.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/content_stages.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/declarative_version.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/stages/models.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/storage.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/sync.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/tasking.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/util.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/viewsets/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/plugin/viewsets/content.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/pytest_plugin.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/responses.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/_util.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/entrypoint.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/kafka.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/storage.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tasking/tasks.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_api_root_rewrite.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_auth.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_filter.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_login.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_openpgp.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_replication.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_repos.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_role.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_scoping.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_status.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_task_purge.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_tasking.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_upload.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/test_workers.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_checkpoint.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_migrate.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_prn.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/assets/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/content_with_coverage.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/utils.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/performance/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/performance/test_performance.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/conftest.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/content/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/content/test_handler.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/download/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/metrics/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/metrics/conftest.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/metrics/test_django_instrumentation.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/migration/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/test_base.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/test_content.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/test_remote.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/test_repository.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/models/test_task.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/roles/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/roles/test_roles.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_base.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_fields.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_orphans_cleanup.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/serializers/test_user.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/stages/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/stages/test_stages.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_cache.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_chunked_file.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_content_guard.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_files.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_import_checks.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_settings.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_util.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_viewsets.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/test_vulnerability_report.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/unit/viewsets/test_viewset_base.py +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/SOURCES.txt +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/dependency_links.txt +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/entry_points.txt +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/requires.txt +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore.egg-info/top_level.txt +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/setup.cfg +0 -0
- {pulpcore-3.90.1 → pulpcore-3.91.0}/test_requirements.txt +0 -0
- {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.
|
|
11
|
+
## 3.91.0 (2025-10-01) {: #3.91.0 }
|
|
12
12
|
|
|
13
|
-
### REST API {: #3.
|
|
13
|
+
### REST API {: #3.91.0-rest-api }
|
|
14
14
|
|
|
15
|
-
####
|
|
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.
|
|
27
|
+
### Plugin API {: #3.91.0-plugin-api }
|
|
23
28
|
|
|
24
29
|
No significant changes.
|
|
25
30
|
|
|
26
|
-
### Pulp File {: #3.
|
|
31
|
+
### Pulp File {: #3.91.0-pulp-file }
|
|
27
32
|
|
|
28
33
|
No significant changes.
|
|
29
34
|
|
|
30
|
-
### Pulp Cert Guard {: #3.
|
|
35
|
+
### Pulp Cert Guard {: #3.91.0-pulp-cert-guard }
|
|
31
36
|
|
|
32
37
|
No significant changes.
|
|
33
38
|
|
|
@@ -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.
|
|
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
|
-
|
|
13
|
-
|
|
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"
|
|
@@ -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
|
-
|
|
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.
|
|
138
|
+
self.otel_enabled = True
|
|
116
139
|
else:
|
|
117
|
-
self.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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
|
-
|
|
287
|
-
|
|
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
|
-
|
|
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):
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py
RENAMED
|
@@ -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(
|
|
@@ -7,7 +7,7 @@ build-backend = 'setuptools.build_meta'
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "pulpcore"
|
|
10
|
-
version = "3.
|
|
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.
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py
RENAMED
|
File without changes
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/api/test_x509_certguard.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/genall.sh
RENAMED
|
File without changes
|
|
File without changes
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh
RENAMED
|
File without changes
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh
RENAMED
|
File without changes
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem
RENAMED
|
File without changes
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem
RENAMED
|
File without changes
|
{pulpcore-3.90.1 → pulpcore-3.91.0}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|