===================
REST API
--------
Features
~~~~~~~~
- Added encryption in the database for ``Remote`` fields ``username``, ``password``,
``proxy_username``, ``proxy_password``, and ``client_key``.
:redmine:`8192`
- Added feature to reclaim disk space for a list of repositories.
:redmine:`8459`
- Added ``method`` field to filesystem exporters to customize how they export files. Users can now
export files by writing them to the filesystem, using hardlinks, or using symlinks.
:redmine:`8695`
- Changed orphan cleanup task to be a non-blocking task that can be run at any time. Added a
``ORPHAN_PROTECTION_TIME`` setting that can be configured for how long orphan Content and
Artifacts are kept before becoming candidates for deletion by the orphan cleanup task.
:redmine:`8824`
- Added a ``/v3/exporters/core/filesystem/`` endpoint for exporting publications or repository
versions to the filesystem.
:redmine:`8860`
- Added a periodical cleanup to the pulpcore-worker class to keep the `Worker` table clean.
:redmine:`8931`
- Added new content guard that uses RBAC policies to protect content
:redmine:`8940`
- Added authentication to the content app.
:redmine:`8951`
- A new setting ``ALLOW_SHARED_TASK_RESOURCES`` was temporarily added to allow plugins to use specific
resources concurrently, during task execution. It defaults to ``False``. It will switch to ``True``
with 3.16 and will eventually be removed.
:redmine:`9148`
Bugfixes
~~~~~~~~
- In stages-pipeline and new-version sanity-checks, added full error-info on path-problems.
:redmine:`8133`
- Improved disk usage during the synchronization.
:redmine:`8295`
- Fixed an internal server error that was raised when a user provided invalid parameters while
assigning new permissions to an object.
:redmine:`8500`
- Fixed a bug, where new tasks were assigned to dead workers.
:redmine:`8779`
- Fixed bug where content app would not respond to ``Range`` HTTP Header in requests when
``remote.policy`` was either ``on_demand`` or ``streamed``. For example this request is used by
Anaconda clients.
:redmine:`8865`
- Unpublished content can no longer be accessed from content app if publication based-plugin has
defined their distributions as publication serving
:redmine:`8870`
- Fixed a bug that caused a serializer to ignore form data for ``pulp_labels``.
:redmine:`8954`
- Fixed inability for users to disable RBAC at the settings level by changing the
``DEFAULT_PERMISSION_CLASSES`` like any user configuring a DRF project expects to.
:redmine:`8974`
- Fixed signal handling to properly kill a task when double ctrl-c is used to shut down a worker fast.
:redmine:`8986`
- Added an attempt to cancel a task if a worker needed to abort it on graceful shutdown.
:redmine:`8987`
- Fixed a bug where on-demand downloads would fill up ``/var/run/`` by not deleting downloaded files.
:redmine:`9000`
- Fixed a regression preventing syncs from file:// urls.
:redmine:`9003`
- Removed ambiguity from the OpenAPI schema for Exports. The exported_resources are now a list of URI strings.
:redmine:`9008`
- Use proxy auth from Remote config to download content from a remote repository.
:redmine:`9024`
- Fixed the behavior of setting "repository" on a distribution for publication-based plugins.
:redmine:`9039`
- Set Redis connection information in status to null unless it's used. Redis is
needed for RQ tasking or content caching.
:redmine:`9070`
- Fixed server error when accessing invalid files from content app base directory
:redmine:`9074`
- Fixed improper validation of remotes' URLs.
:redmine:`9080`
- Artifacts are now being properly updated for Content after switching from 'on_demand' to 'immediate'.
:redmine:`9101`
- Made all database queries run serially using a single connection to the database.
:redmine:`9129`
- Move files to artifact storage only when they originate from WORKING_DIRECTORY.
Copy files from all other sources.
:redmine:`9146`
- Content app now properly sets Content-Type header for artifacts being served from S3
:redmine:`9216`
- Fixed repository sync performance regression introduced in pulpcore 3.14.
:redmine:`9243`
- Stop using insecure hash function blake2s for calculating 64 bit lock identifier from uuid.
:redmine:`9249`
- Fixed another occurence of the HTTP 500 error and `connection already closed` in the logs while accessing content.
:redmine:`9275`
Removals
~~~~~~~~
- Dropped support for Python 3.6 and 3.7. Pulp now supports Python 3.8+.
:redmine:`8855`
- Renamed the ``retained_versions`` field on repositories to ``retain_repo_versions``.
:redmine:`9030`
Deprecations
~~~~~~~~~~~~
- The traditional tasking system (formerly the default in ``pulpcore<=3.13``) is deprecated and
will be removed in ``pulpcore==3.16``. If you are using the ``USE_NEW_WORKER_TYPE=False`` that
will no longer give you the traditional tasking system starting with ``pulpcore==3.16``.
:redmine:`9159`
Misc
~~~~
- :redmine:`5582`, :redmine:`8996`, :redmine:`9010`, :redmine:`9056`, :redmine:`9112`, :redmine:`9120`, :redmine:`9171`, :redmine:`9174`
Plugin API
----------
Features
~~~~~~~~
- Content model has a new boolean class constant ``PROTECTED_FROM_RECLAIM`` for plugins to enable the
reclaim disk space feature provided by core.
:redmine:`8459`
- Added endpoints for managing Alternate Content Sources.
:redmine:`8607`
- Orphan cleanup task has a new optional parameter ``orphan_protection_time`` that decides for how
long Pulp will hold orphan Content and Artifacts before they become candidates for deletion for this
particular orphan cleanup task.
:redmine:`8824`
- Distribution model has a new boolean class variable ``SERVE_FROM_PUBLICATION`` for plugins to declare
whether their distributions serve from publications or directly from repository versions
:redmine:`8870`
- The settings file switched ``DEFAULT_PERMISSION_CLASSES`` to use ``AccessPolicyFromDB`` instead of
``IsAdminUser`` with a fallback to a behavior of ``IsAdminUser``. With this feature plugin writers
no longer need to declare ``permission_classes`` on their Views or Viewsets to use
``AccessPolicyFromDB``.
:redmine:`8974`
- Upgraded django from 2.2 to 3.2.
:redmine:`9018`
- `pulpcore.plugin.models.ProgressReport` now has async interfaces: asave(), aincrease_by(),
aincrement(), __aenter__(), _aexit__(). Plugins should switch to the async interfaces in their
Stages.
`pulpcore.plugin.sync.sync_to_async_iterator` is a utility method to synchronize the database
queries generated when a QuerySet is iterated.
:redmine:`9129`
- Added ``shared_resources`` to the ``dispatch`` call, so tasks can run concurrently if they need overlapping resources for read only.
:redmine:`9148`
- Added ``touch`` to Artifact and Content query sets for bulk operation.
:redmine:`9234`
- Added `ContentManager` to the plugin API - all subclasses of `Content` that add their own custom manager should have the manager subclass `ContentManager`.
:redmine:`9269`
Bugfixes
~~~~~~~~
- Added kwarg to RemoteArtifactSaver init to allow enabling handling of rare error edge-case.
`fix_mismatched_remote_artifacts=True` enables workaround for a failure-scenario that
(so far) is only encountered by pulp_rpm. Current behavior is the default.
:redmine:`8133`
Removals
~~~~~~~~
- Removed the ``pulpcore.plugin.viewsets.NewDistributionFilter``. Instead use
``pulpcore.plugin.viewsets.DistributionFilter``.
:redmine:`8479`
- Removed ``FilesystemExporterSerializer`` and ``PublicationExportSerializer`` from the plugin api.
Filesystem exports are now handled by pulpcore.
:redmine:`8860`
- The ``pulpcore.plugin.download.http_giveup`` method has been removed from the plugin API. Plugins
used to have to use this to wrap the ``_run`` method defined on subclasses of ``HttpDownloader``,
but starting with pulpcore 3.14 the backoff is implemented directly in the ``HttpDownloader.run()``
method which subclasses do not override. Due to ``pulpcore`` implementing it, it is no longer needed
or available for plugins to use.
:redmine:`8913`
Deprecations
~~~~~~~~~~~~
- ContentSaver._pre_save() and ContentSaver._post_save() hooks are no longer coroutines. They should
be implemented as synchronous functions.
:redmine:`9129`
- Deprecate the compatibility layer for access policies. As of pulpcore 3.16, all plugins should
properly use the "condition" and "condition_expression" fields in the access policy statements.
:redmine:`9160`
- Deprecate the ``resources`` argument of ``dispatch`` in favor of ``exclusive_resources`` and ``shared_resources``.
:redmine:`9257`
Misc
~~~~
- :redmine:`8606`, :redmine:`9160`