--- features: - | Added symlink objects support. Symlink objects reference one other object. They are created by creating an empty object with an X-Symlink-Target header. The value of the header is of the format /, and the target does not need to exist at the time of symlink creation. Cross-account symlinks can be created by including the X-Symlink-Target-Account header. GET and HEAD requests to a symlink will operate on the referenced object and require appropriate permission in the target container. DELETE and PUT requests will operate on the symlink object itself. POST requests are not forwarded to the referenced object. POST requests sent to a symlink will result in a 307 Temporary Redirect response. - | Added support for inline data segments in SLO manifests. Upgrade impact -- during a rolling upgrade, an updated proxy server may write a manifest that an out-of-date proxy server will not be able to read. This will resolve itself once the upgrade completes on all nodes. - | The tempurl digest algorithm is now configurable, and Swift added support for both SHA-256 and SHA-512. Supported tempurl digests are exposed to clients in ``/info``. Additionally, tempurl signatures can now be base64 encoded. - | Object expiry improvements - Disallow X-Delete-At header values equal to the X-Timestamp header. - X-Delete-At computation now uses X-Timestamp instead of system time. This prevents clock skew causing inconsistent expiry data. - Deleting an expiring object will now cause less work in the system. The number of async pending files written has been reduced for all objects and greatly reduced for erasure-coded objects. This dramatically reduces the burden on container servers. - Stopped logging tracebacks when receiving an unexpected response. - Allow the expirer to gracefully move past updating stale work items. - | When the object auditor examines an object, it will now add any missing metadata checksums. - | ``swift-ring-builder`` improvements - Save the ring when dispersion improves, even if balance doesn't improve. - Improved the granularity of the ring dispersion metric so that small improvements after a rebalance can show changes in the dispersion number. Dispersion in existing and new rings can be recalculated using the new ``--recalculate`` option to ``swift-ring-builder``. - Display more info on empty rings. - | Fixed rare socket leak on range requests to erasure-coded objects. - | The number of container updates on object PUTs (ie to update listings) has been recomputed to be far more efficient while maintaining durability guarantees. Specifically, object PUTs to erasure-coded policies will now normally result in far fewer container updates. - | Moved Zuul v3 tox jobs into the Swift code repo. - | Changed where liberasurecode-devel for CentOS 7 is referenced and installed as a dependency. - | Added container/object listing with prefix to InternalClient. - | Added ``--swift-versions`` to ``swift-recon`` CLI to compare installed versions in the cluster. - | Stop logging tracebacks in the ``object-replicator`` when it runs out of handoff locations. - | Send ETag header in 206 Partial Content responses to SLO reads. - | Now ``swift-recon-cron`` works with conf.d configs. - | Improved ``object-updater`` stats logging. It now tells you all of its stats (successes, failures, quarantines due to bad pickles, unlinks, and errors), and it tells you incremental progress every five minutes. The logging at the end of a pass remains and has been expanded to also include all stats. - | If a proxy server is configured to autocreate accounts and the account create fails, it will now return a server error (500) instead of Not Found (404). - | Fractional replicas are no longer allowed for erasure code policies. - | Various other minor bug fixes and improvements.