We contentedly announce the release of: swift 2.25.0: OpenStack Object Storage This release is part of the ussuri stable release series. The source is available from: https://opendev.org/openstack/swift Download the package from: https://tarballs.openstack.org/swift/ Please report issues through: https://bugs.launchpad.net/swift/+bugs For more details, please see below. 2.25.0 ^^^^^^ New Features ************ * WSGI server processes can now notify systemd when they are ready. * Added a new middleware that allows users and operators to configure accounts and containers to use RFC-compliant (i.e., double-quoted) ETags. This may be useful when using Swift as an origin for some content delivery networks. For more information, see the middleware documentation. * Added "ttfb" (Time to First Byte) and "pid" (Process ID) to the set of available proxy-server log fields. For more information, see the documentation. Bug Fixes ********* * Improved proxy-server performance by reducing unnecessary locking, memory copies, and eventlet scheduling. * Reduced object-replicator and object-reconstructor CPU usage by only checking that the device list is current when rings change. * Improved performance of sharded container listings when performing prefix listings. * Improved container-sync performance when data has already been deleted or overwritten. * Account quotas are now enforced even on empty accounts. * Getting an SLO manifest with "?format=raw" now responds with an ETag that matches the MD5 of the generated body rather than the MD5 of the manifest stored on disk. * Provide useful status codes in logs for some versioning and symlink subrequests that were previously logged as 499. * Fixed 500 from cname_lookup middleware. Previously, if the looked- up domain was used by domain_remap to update the request path, the server would respond Internal Error. * On Python 3, fixed an issue when reading or writing objects with a content type like "message/*". Previously, Swift would fail to respond. * On Python 3, fixed a RecursionError in swift-dispersion-report when using TLS. * Fixed a bug in the new object versioning API that would cause more than "limit" results to be returned when listing. * Various other minor bug fixes and improvements. Changes in swift 2.24.0..2.25.0 ------------------------------- f3543f534 Authors/ChangeLog for 2.25.0 0c37da906 Imported Translations from Zanata 9a7ab4b3b Imported Translations from Zanata 415011e16 s3api: Propagate backend PATH_INFO in environ for other middleware 875a14298 docs: Encourage usage of UUID inside /etc/fstab in examples 668242c42 pep8: Turn on E305 96b56519b Update hacking for Python3 bbea88cb1 Extend MemcacheRing.delete() API to manage server_key 8378a11d1 Replace all "with Chunk*Timeout" by a watchdog 804776b37 Optimize obj replicator/reconstructor healthchecks d361e5feb Make wsgi server uses systemd's NOTIFY_SOCKET 3fe9b582e Fix SSYNC/missing_check is blocking 04cc11b93 py3: stop barfing on message/rfc822 Content-Types dc424f593 Allow clients to send quoted ETags for static links e264ca88e Recommend better rsync.conf settings 821b96416 ring: Flag region, zone, and device as required in add_dev 601ced557 Delay ring lookup until we know we need it f2ffd9005 Apply limit to list versioned containers dc4077930 Use float consistently for proxy timeout settings 55049beda tests: Use timedelta to adjust dates, not string manipulations 3b65a5998 Fix up some Content-Type handling in account/container listings ecca23eb8 Extend eventlet_debug logging to GreenAsyncPile 0fb337148 Delay importing swiftclient until after monkey-patching a5afe7675 Revert "Make rolling-upgrade job non-voting until virtualenv problem is solved" cd4ba90cc Make rolling-upgrade job non-voting until virtualenv problem is solved 2a8d47f00 middlewares: Clean up app iters better 61bf5ee1c Ensure domain stored in memcached gets utf8 decoded on py2 baaa5c57e Remove reno from test-requirements 09b7ed600 sharding: filter shards based on prefix param when listing ff885d30e py3: Fix up probe tests d358b9130 added value and notes to a sample config file for s3token 0606f404f enforce account quotas on empty accounts b8c16de02 Return correct etag for raw manifest d46a0c7d6 Add etag quoter to saio proxy config c7cb34ad6 Dockerhub description of saio image 4a776c4fb Add new versioning flag to docker image d8821c75b proxy-logging: add fields ttfb and pid 55cdb5507 Lower the log level for falling back to mkstemp f68e22d43 Stop retrying every deletes in container-sync 73a0e8e9c probe: Add test for syncing a delete when the remote 404s deba3a630 clarify s3api ACL test HEADs 46bde0c0b s3token: Raise error on negative secret_cache_duration config ec70cf960 s3token: When caching is enabled, default auth_type to password Diffstat (except docs and test files) ------------------------------------- .mailmap | 1 + CHANGELOG | 51 ++++ api-ref/source/conf.py | 6 +- .../install/storage-install-ubuntu-debian.rst | 10 +- etc/proxy-server.conf-sample | 11 + etc/rsyncd.conf-sample | 3 + lower-constraints.txt | 4 - .../notes/2_25_0_release-09410c808881bf21.yaml | 65 +++++ releasenotes/source/conf.py | 4 +- .../locale/en_GB/LC_MESSAGES/releasenotes.po | 255 ++++++++++++++++++- swift/account/reaper.py | 6 +- swift/account/server.py | 12 +- swift/cli/dispersion_report.py | 9 +- swift/cli/ringbuilder.py | 2 +- swift/common/bufferedhttp.py | 2 + swift/common/daemon.py | 3 +- swift/common/internal_client.py | 18 +- swift/common/linkat.py | 1 + swift/common/manager.py | 2 +- swift/common/memcached.py | 7 +- swift/common/middleware/account_quotas.py | 2 +- swift/common/middleware/cname_lookup.py | 17 +- swift/common/middleware/listing_formats.py | 16 +- swift/common/middleware/name_check.py | 2 +- swift/common/middleware/proxy_logging.py | 23 +- swift/common/middleware/s3api/controllers/acl.py | 2 +- .../common/middleware/s3api/controllers/logging.py | 2 +- swift/common/middleware/s3api/s3request.py | 6 + swift/common/middleware/s3api/s3token.py | 6 +- swift/common/middleware/slo.py | 4 +- swift/common/middleware/symlink.py | 14 +- swift/common/middleware/tempauth.py | 12 +- swift/common/middleware/versioned_writes/legacy.py | 26 +- .../versioned_writes/object_versioning.py | 90 ++++--- swift/common/middleware/x_profile/html_viewer.py | 10 +- swift/common/request_helpers.py | 11 + swift/common/ring/builder.py | 10 +- swift/common/ring/composite_builder.py | 2 +- swift/common/ring/utils.py | 2 +- swift/common/splice.py | 2 + swift/common/storage_policy.py | 2 +- swift/common/utils.py | 185 +++++++++++++- swift/common/wsgi.py | 9 +- swift/container/server.py | 12 +- swift/container/sync.py | 7 +- swift/locale/de/LC_MESSAGES/swift.po | 5 +- swift/locale/en_GB/LC_MESSAGES/swift.po | 5 +- swift/locale/es/LC_MESSAGES/swift.po | 5 +- swift/locale/fr/LC_MESSAGES/swift.po | 5 +- swift/locale/it/LC_MESSAGES/swift.po | 5 +- swift/locale/ja/LC_MESSAGES/swift.po | 5 +- swift/locale/ko_KR/LC_MESSAGES/swift.po | 5 +- swift/locale/pt_BR/LC_MESSAGES/swift.po | 5 +- swift/locale/ru/LC_MESSAGES/swift.po | 5 +- swift/locale/tr_TR/LC_MESSAGES/swift.po | 5 +- swift/locale/zh_CN/LC_MESSAGES/swift.po | 5 +- swift/locale/zh_TW/LC_MESSAGES/swift.po | 5 +- swift/obj/diskfile.py | 2 +- swift/obj/reconstructor.py | 6 + swift/obj/replicator.py | 33 +-- swift/obj/ssync_receiver.py | 5 + swift/proxy/controllers/base.py | 35 +-- swift/proxy/controllers/container.py | 13 + swift/proxy/controllers/obj.py | 58 +++-- swift/proxy/server.py | 6 +- test-requirements.txt | 3 +- test/functional/__init__.py | 7 +- test/functional/s3api/s3_test_client.py | 4 +- test/functional/s3api/test_multi_delete.py | 4 +- test/functional/s3api/test_multi_upload.py | 5 +- test/functional/s3api/test_service.py | 1 + test/functional/test_object_versioning.py | 34 +++ test/functional/test_slo.py | 6 + test/functional/test_symlink.py | 4 +- test/probe/brain.py | 8 +- test/probe/test_account_reaper.py | 6 +- test/probe/test_container_merge_policy_index.py | 11 +- test/probe/test_container_sync.py | 24 ++ test/probe/test_empty_device_handoff.py | 1 + test/probe/test_replication_servers_working.py | 2 +- test/unit/__init__.py | 2 + test/unit/cli/test_form_signature.py | 1 + test/unit/cli/test_recon.py | 8 +- test/unit/cli/test_ringbuilder.py | 10 +- .../common/middleware/crypto/test_kms_keymaster.py | 1 + test/unit/common/middleware/helpers.py | 18 +- test/unit/common/middleware/s3api/__init__.py | 6 +- test/unit/common/middleware/s3api/test_cfg.py | 1 + test/unit/common/middleware/s3api/test_logging.py | 1 + .../common/middleware/s3api/test_multi_delete.py | 5 +- .../common/middleware/s3api/test_multi_upload.py | 33 ++- test/unit/common/middleware/s3api/test_obj.py | 2 +- test/unit/common/middleware/s3api/test_s3_acl.py | 1 + test/unit/common/middleware/s3api/test_s3api.py | 45 ++++ .../unit/common/middleware/s3api/test_s3request.py | 6 +- test/unit/common/middleware/s3api/test_service.py | 1 + .../common/middleware/s3api/test_subresource.py | 1 + test/unit/common/middleware/s3api/test_utils.py | 1 + test/unit/common/middleware/test_account_quotas.py | 29 +++ test/unit/common/middleware/test_cname_lookup.py | 9 + test/unit/common/middleware/test_dlo.py | 6 + test/unit/common/middleware/test_keystoneauth.py | 5 +- .../unit/common/middleware/test_listing_formats.py | 60 ++++- test/unit/common/middleware/test_name_check.py | 11 +- .../common/middleware/test_object_versioning.py | 21 +- test/unit/common/middleware/test_proxy_logging.py | 36 +-- test/unit/common/middleware/test_quotas.py | 1 + test/unit/common/middleware/test_slo.py | 27 +- test/unit/common/middleware/test_symlink.py | 35 ++- test/unit/common/middleware/test_tempauth.py | 1 + .../common/middleware/test_versioned_writes.py | 1 + test/unit/common/ring/test_builder.py | 14 +- test/unit/common/ring/test_composite_builder.py | 2 +- test/unit/common/ring/test_ring.py | 9 +- test/unit/common/test_direct_client.py | 1 + test/unit/common/test_exceptions.py | 1 + test/unit/common/test_internal_client.py | 50 +++- test/unit/common/test_manager.py | 1 + test/unit/common/test_memcached.py | 38 +++ test/unit/common/test_request_helpers.py | 13 + test/unit/common/test_utils.py | 167 ++++++++++++- test/unit/container/test_server.py | 4 +- test/unit/container/test_sharder.py | 72 +++--- test/unit/container/test_sync.py | 18 ++ test/unit/container/test_updater.py | 1 + test/unit/obj/test_auditor.py | 2 +- test/unit/obj/test_diskfile.py | 7 +- test/unit/obj/test_reconstructor.py | 43 +++- test/unit/obj/test_replicator.py | 1 + test/unit/obj/test_ssync_receiver.py | 272 ++++++++++----------- test/unit/proxy/controllers/test_base.py | 4 +- test/unit/proxy/controllers/test_container.py | 25 ++ test/unit/proxy/test_server.py | 55 +++-- tox.ini | 9 +- 143 files changed, 1999 insertions(+), 644 deletions(-) Requirements updates -------------------- diff --git a/test-requirements.txt b/test-requirements.txt index ff86a01dd..085bd3b0e 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -6 +6 @@ -hacking>=0.11.0,<0.12 # Apache-2.0 +hacking>=2.0,<2.1.0 # Apache-2.0 @@ -15 +14,0 @@ python-keystoneclient!=2.1.0,>=2.0.0 # Apache-2.0 -reno>=1.8.0 # Apache-2.0