Newton Series Release Notes¶
Improvements in key parts of the consistency engine
Optimized the common case for hashing filesystem trees, thus eliminating a lot of extraneous disk I/O.
Updated the hashes.pkl file format to include timestamp information for race detection. Also simplified hashing logic to prevent race conditions and optimize for the common case.
Upgrade Impact: If you upgrade and roll back, you must delete all hashes.pkl files.
If using erasure coding with ISA-L in rs_vand mode and 5 or more parity fragments, Swift will emit a warning. This is a configuration that is known to harm data durability. In a future release, this warning will be upgraded to an error unless the policy is marked as deprecated. All data in an erasure code storage policy using isa_l_rs_vand with 5 or more parity should be migrated as soon as possible. Please see https://bugs.launchpad.net/swift/+bug/1639691 for more information.
Fixed a bug where the ring builder would not allow removal of a device when min_part_seconds_left was greater than zero.
PUT subrequests generated from a client-side COPY will now properly log the SSC (server-side copy) Swift source field. See https://docs.openstack.org/developer/swift/logs.html#swift-source for more information.
Rings with min_part_hours set to zero will now only move one partition replica per rebalance, thus matching behavior when min_part_hours is greater than zero.
Correctly send 412 Precondition Failed if a user sends an invalid copy destination. Previously Swift would send a 500 Internal Server Error.
Fixed error where a container drive error resulted in double space usage on rest drives. When drive with container or account database is unmounted, the bug would create handoff replicas on all remaining drives, increasing the drive space used and filling the cluster.
Account and container databases will now be quarantined if the database schema has been corrupted.
Ensure update of the container by object-updater, removing a rare possibility that objects would never be added to a container listing.
Fixed some minor test compatibility issues.
Updated docs to reference appropriate ports.
Closed a bug where ssync may have written bad fragment data in some circumstances. A check was added to ensure the correct number of bytes is written for a fragment before finalizing the write. Also, erasure coded fragment metadata will now be validated when read and, if bad data is found, the fragment will be quarantined.
Fixed regression in consolidate_hashes that occured when a new file was stored to new suffix to a non-empty partition. This bug was introduced in 2.7.0 and could cause an increase in rsync replication stats during and after upgrade, due to inconsistent hashing of partition suffixes.
Fixed non-deterministic suffix updates in hashes.pkl where a partition may be updated much less often than expected.
Fixed a rare infinite loop in swift-ring-builder while placing parts.
Fixed the KeyError message when auditor finds an expired object.
Added a “user” option to the drive-audit config file. Its value is used to set the owner of the drive-audit recon cache.
Throttle update_auditor_status calls so it updates no more than once per minute. This prevents excessive IO on a new cluster.
Daemons using InternalClient can now be properly killed with SIGTERM.
Added a configurable URL base to staticweb, fixing issues when the accessible endpoint isn’t known to the Swift cluster (eg http vs https).
Removed “in-process-” from func env tox name to work with upstream CI.
Object versioning now supports a “history” mode in addition to the older “stack” mode. The difference is in how DELETE requests are handled. For full details, please read http://docs.openstack.org/developer/swift/overview_object_versioning.html.
New config variables to change the schedule priority and I/O scheduling class. Servers and daemons now understand nice_priority, ionice_class, and ionice_priority to schedule their relative importance. Please read http://docs.openstack.org/developer/swift/deployment_guide.html for full config details.
On newer kernels (3.15+ when using xfs), Swift will use the O_TMPFILE flag when opening a file instead of creating a temporary file and renaming it on commit. This makes the data path simpler and allows the filesystem to more efficiently optimize the files on disk, resulting in better performance.
Erasure code GET performance has been significantly improved in clusters that are not completely healthy.
Significant improvements to the api-ref doc available at http://developer.openstack.org/api-ref/object-storage/.
A PUT or POST to a container will now update the container’s Last-Modified time, and that value will be included in a GET/HEAD response.
Include object sysmeta in POST responses. Sysmeta is still stripped from the response before being sent to the client, but this allows middleware to make use of the information.
Update dnspython dependency to 1.14, removing the need to have separate dnspython dependencies for Py2 and Py3.
Deprecate swift-temp-url and call python-swiftclient’s implementation instead. This adds python-swiftclient as an optional dependency of Swift.
Moved other-requirements.txt to bindep.txt. bindep.txt lists non-python dependencies of Swift.
Fixed a bug where a container listing delimiter wouldn’t work with encryption.
Fixed a bug where some headers weren’t being copied correctly in a COPY request.
Container sync can now copy SLOs more efficiently by allowing the manifest to be synced before all of the referenced segments. This fixes a bug where container sync would not copy SLO manifests.
Fixed a bug where some tombstone files might never be reclaimed.
Various other minor bug fixes and improvements.