We jubilantly announce the release of: swift 2.35.0 This release is part of the epoxy 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.35.0 ^^^^^^ New Features ************ * Account listings now include storage policy information for the containers listed. * Added a new object-expirer configuration option, "round_robin_task_cache_size", to adjust the number of tasks to cache before processing. This may be used to trade faster expirer start-up for more lumpy container-server load. * Added a "stale_worker_timeout" configuration option to the WSGI servers. Once this time elapses following a reload, the manager process will issue SIGKILLs to any remaining stale workers. * Object updater observability improvements: * Added last start time to recon dumps as "object_updater_last". * Added information (including target account/container) from oldest failed updates to recon dumps, both per-device and aggregated for the node. Use the new "async_tracker_max_entries" and "async_tracker_dump_count" options to adjust how many records to collect. * Added the option to tune down ETag validation in the object-server during full-object reads. By default, every full read will continue to have its ETag validated as bytes are streamed to the proxy- server. The "etag_validate_pct" option may be used to configure approximately what percentage of full-object reads should be validated; reducing this can improve performance when object-servers are CPU-constrained. Partial reads continue to never have their ETag validated in the object-server. The object-auditor continues to periodically validate every object's ETag. Deprecation Notes ***************** * The object-expirer configuration options "expiring_objects_container_divisor" and "expiring_objects_account_name" are now deprecated. If a cluster was deployed with a non-standard account name, operators should remove the option from all configs so they are using a supported configuration going forward, but will need to deploy stand-alone expirer processes with legacy expirer config to clean-up old expiration tasks from the previously configured account name. Bug Fixes ********* * Removed the use of "eval" in the xprofile middleware. Note that this middleware is only intended for development purposes and is not intended for use in production systems. * The S3 API no longer requires a "Content-MD5" header for "DeleteObjects" requests when using v4 signatures. * Uploads to containers with object versioning enabled now require a "Content-Length" or "Transfer-Encoding: chunked" header, similar to other containers. * Fixed a server error when deleting a specific version via the S3 API. * "X-Open-Expired" now works properly with "?part-number" requests. * Fixed "Content-Type" and "Content-Length" headers in account and container "HEAD" responses (with eventlet>=0.38.0). * Object expiration fixes: * The object-expirer now better handles errors during listings. * The object-expirer now respects the "internal_client_conf_path" configuration option in legacy "object-expirer.conf" configs. * Improved the reliability of "swift-reload". * Separated unlinks-due-to-outdated-updates from unlinks-due-to- fully- processed-updates in logged object-updater stats. * The "cooperative_period" option for the object-server now affects PUT requests in a way similar to GET responses. * Fixed an issue with the object-reconstructor that would prevent reconstruction of objects with non-ASCII header names. * Fixed an issue with the container-reconciler that could cause reconciler databases to have conflicting rows that could not be resolved. * Removed use of the deprecated cgi module. * Various other minor bug fixes and improvements. Changes in swift 2.34.0..2.35.0 ------------------------------- d6ac3a261 AUTHORS/CHANGELOG for 2.35.0 0cdd3915c Fix FakeSwiftCall partial env copy for None values 932bc110c Remove notes about new-style classes cfa0094eb cors-tests: Default S3_ENDPOINT sensibly 08a6db135 tests: Fix keystoneclient import 62cb4736e Remove dependency on mock 11422a395 tests: Allow configuring normalized_urls = false 3db28d41f tests: Reference test.functional.normalized_urls directly bae8cd0db Remove __future__ imports c390c637d Stop using cgi.parse_header 0a8ecbc55 py3: Fix unicode-header-name handling in bufferedhttp 34bb743b0 linkat: Raise error if we run out of retries e4cc228ed Refactor some file-like iters as utils.InputProxy subclasses e0d66f3eb slo_test: make x-delete-after consistent in func test adc7760ed tests: More simplification of s3api test bucket naming 605c70123 tests: Remove a couple more py2 code paths b49941c9b s3api: Simplify HashingInput signature ed0b68e1b tests: Simplify test bucket name f9354c9eb tests: Allow more configuration for S3 cross-compat tests c3237aba1 refactor test for x-delete-at w/t part_num and x-open-expired a5db202c5 s3api: Stop requiring Content-MD5 for multi-deletes 62fa6d27a tests: Add unknown-policy container to account test 313fab5f5 Add NotificationServer to fix swift-reload ceff47d7a FakeSwift: more encapsulation of request properties bc5de5f4a Remove last vestiges of translations b94d7960f Remove some dead code for older pythons 2560eb7cb Migrate encrypter tests to assert FakeSwiftCall attributes a74059188 Tighten up encrypter tests re. request footers b69a2bef4 Deprecate expirer options 965cc2fcb Add per-container storage policy to account listing 3ccf74904 tests: Fix flaky reconciler test 0dfa38d02 docs: Fix version call-out for stale_worker_timeout ae6300af8 wsgi: Reap stale workers (after a timeout) following a reload a630e76d6 versioning: 411 PUTs with neither content-length nor transfer-encoding aa0429ce0 CI: document bandit tests by reference f95315b71 CI: Remove B320 and B410 bandit skips 128124cdd Remove py2-only code paths 3d8fb046c obj: Add option to tune down etag validation in object-server 1bc0507c1 Improve get_logger tests re. statsd prefix 6a633d06f tests: use a method to test a method 7d3a32d10 tests: relocate some logging related unit tests e39a0d195 Leave updater per-device stats in recon for debugging 1f0777d96 tests: Enforce sorted listdir results in test_updater 1f35e0c10 CI: Add Dalmatian upgrade job 3c9838101 [CI] Remove old experimental rolling upgrade job 7367907c5 Drop py2 support 17f77b2d7 docs: Changed OS version to RHEL 9 and CentOS Stream 9. fbfdc89df Require that updater_workers be a postive integer 5281af5cf Add object_updater_last stat 4b3696003 trivial: Enable a couple off-by-default hacking checks af57922cd Aggregate per-disk recon stats 13197af6e CI: Clean up deps for various doc builds 404edeb7f Refactor FormPost to use WSGIContext e576c5cee CI: Configure bandit better a55a48ffc docs: Call out that xprofile is not intended for production 199aa78fb xprofile: Stop using eval() 3a5bbcd7a Clarify ContainerBroker tests re expirer queue items cde99ff66 Add unit test for object-updater recon dump 93658f0de CI: Consistently use TOX_CONSTRAINTS_FILE 83528de74 Make OldestAsyncPendingTracker timestamp float 992d70198 Up-rev hacking 436808a95 infra: Remove 'bandit' tox environment e5bd48a6a CI: point antelope job at 2023.1-eom tag 0513b8cea Bring py3-constraints.txt more in line with global u-c 791d38962 Up-rev hacking eac4ffd7a s3api: add more MPU cross-compat tests 5e800e328 Remove duplicate definition of empty string etag d6b712dfa api-ref: Clarify eventual-consistency of DELETEs. ace2357c6 tests: Use format=plain instead of format=txt 54ec8a124 CI: drop pip --upgrade flag in tox.ini ea1d84c1d Object-server: add periodic greenthread yielding during file write 8699af83c Remove statds from the logs module e751ccfb2 Add probe test for reconciler with object versioning 41c614bbb Add error msg validation for BadDigest 4aadb5402 Ensure Content-Length in backend container/account HEAD response 1a6958a2f reno: Update master for unmaintained/2023.1 fa889358a Ensure correct content-type in container HEAD response ffbf17e47 Fix duplicate prefix in exception logging 66e4887c9 Rename probe/test_mixed_policy_upload.py to test_mpu.py 32fbf9eaa probe tests: Set default timeout for subprocesses f88efdb4d Remove PrefixLoggerAdapter and SwiftLoggerAdapter b262b16d5 probe tests: Run relinker via subprocess 3a43242e7 reconciler: Record queue-clean-up later than old-policy-clean-up e954712ce Prevent installation with pyeclib 1.6.2 and 1.6.3 639251d4c slo: add more functional tests for copying 0a5348eb4 Add oldest failed async pending tracker 39e4ae307 Differentiate unlinks and outdated unlinks df22032d7 object-expirer: add round_robin_cache_size option 31ef44371 test-expirer: call tracking & exception stubs e9e10b5ed CI: Bring check/gate in line with PTI for 2025.1 a8ad97f83 CI: Drag forward more constraints c3f1ed3df CI: Move a bunch of func test jobs from py38 to py312 c877efb7e docs: add new utils modules to source doc b084744d0 Rename obj to path b2386b994 s3api: Stop upper-casing request-method for signatures 0fdb93c98 CI: use py36 constraints for py38 7a6dc095b functest: do not use account2 unless needed 929297054 Update gate jobs as per the 2025.1 cycle testing runtime 4f69ab3c5 fix x-open-expired 404 on HEAD?part-number reqs 056b2afbd FakeSwift: capture unexpected calls d0b190f64 trivial: Default value for EUCLEAN 14ce84b64 CI: bump up arm64 timeouts (again) 351b3aed4 CI: Move most arm64 jobs to experimental pipeline 02465e267 CI: update upper-bound on arm64 unit tests ef8764cb0 logging: Add UPDATE to valid http methods cfc7f99d4 trivial: Fix variable name 7980b6a0d Object-expirer: continue to process next container on listing errors ee80f99ae Make object-expirer respect internal_client_conf_path 815fb9c6e Imported Translations from Zanata 29b0e478a Replace deprecated datetime.utcfromtimestamp() 6e4ecfc5d proxy: fix is_useful_response for py2 86081b782 func tests: fix etag-quoter insertion in pipeline 81547cb67 trivial: remove print from functional tests 60c0ab2ea Quiten boto logging in func tests e3e43ae2a manage py36 constraints for swift 95b7e16c7 CI: Include --domain in more openstack commands e0a9ea496 Update master for stable/2024.2 14fb7df57 CI: Bump up ARM timeouts f277b2e9b Add Chinemerem to AUTHORS Diffstat (except docs and test files) ------------------------------------- .mailmap | 3 + .zuul.yaml | 206 ++-- AUTHORS | 5 + CHANGELOG | 89 ++ CONTRIBUTING.rst | 2 +- api-ref/source/storage-object-services.inc | 12 +- bandit.yaml | 90 +- bindep.txt | 10 +- etc/account-server.conf-sample | 9 +- etc/container-server.conf-sample | 9 +- etc/object-expirer.conf-sample | 8 +- etc/object-server.conf-sample | 39 +- etc/proxy-server.conf-sample | 11 +- lower-constraints.txt | 16 +- py2-constraints.txt | 85 -- py3-constraints.txt | 234 +++++ py36-constraints.txt | 85 -- .../notes/release-2.35.0-bb2736e6cbc4a520.yaml | 109 ++ releasenotes/source/2023.1.rst | 2 +- releasenotes/source/2024.2.rst | 6 + releasenotes/source/index.rst | 1 + .../locale/en_GB/LC_MESSAGES/releasenotes.po | 38 +- requirements.txt | 17 +- roles/additional-keystone-users/tasks/main.yaml | 4 +- setup.cfg | 7 +- setup.py | 11 +- swift/__init__.py | 45 - swift/account/backend.py | 36 +- swift/account/reaper.py | 11 +- swift/account/server.py | 1 + swift/account/utils.py | 30 +- swift/cli/account_audit.py | 7 +- swift/cli/config.py | 1 - swift/cli/container_deleter.py | 9 +- swift/cli/dispersion_populate.py | 7 +- swift/cli/dispersion_report.py | 3 +- swift/cli/drive_audit.py | 6 +- swift/cli/form_signature.py | 10 +- swift/cli/info.py | 11 +- swift/cli/manage_shard_ranges.py | 4 - swift/cli/orphans.py | 1 - swift/cli/recon.py | 28 +- swift/cli/relinker.py | 28 +- swift/cli/reload.py | 62 +- swift/cli/ringbuilder.py | 24 +- swift/cli/ringcomposer.py | 1 - swift/common/bufferedhttp.py | 108 +- swift/common/constraints.py | 12 +- swift/common/container_sync_realms.py | 5 +- swift/common/db.py | 63 +- swift/common/digest.py | 20 +- swift/common/direct_client.py | 15 +- swift/common/header_key_dict.py | 11 +- swift/common/http_protocol.py | 176 ++-- swift/common/internal_client.py | 41 +- swift/common/linkat.py | 6 +- swift/common/manager.py | 12 +- swift/common/memcached.py | 12 +- swift/common/middleware/acl.py | 9 +- swift/common/middleware/bulk.py | 43 +- swift/common/middleware/cname_lookup.py | 4 - swift/common/middleware/crypto/crypto_utils.py | 14 +- swift/common/middleware/crypto/encrypter.py | 18 +- swift/common/middleware/crypto/keymaster.py | 15 +- swift/common/middleware/dlo.py | 4 - swift/common/middleware/formpost.py | 74 +- swift/common/middleware/gatekeeper.py | 2 +- swift/common/middleware/list_endpoints.py | 2 +- swift/common/middleware/listing_formats.py | 76 +- swift/common/middleware/proxy_logging.py | 2 +- swift/common/middleware/recon.py | 4 +- .../common/middleware/s3api/controllers/bucket.py | 8 +- .../middleware/s3api/controllers/multi_delete.py | 7 +- .../middleware/s3api/controllers/multi_upload.py | 22 +- swift/common/middleware/s3api/controllers/obj.py | 6 + .../common/middleware/s3api/controllers/s3_acl.py | 2 +- swift/common/middleware/s3api/etree.py | 7 +- swift/common/middleware/s3api/s3api.py | 6 +- swift/common/middleware/s3api/s3request.py | 62 +- swift/common/middleware/s3api/s3response.py | 5 +- swift/common/middleware/s3api/s3token.py | 17 +- swift/common/middleware/s3api/subresource.py | 6 +- swift/common/middleware/s3api/utils.py | 3 - swift/common/middleware/slo.py | 92 +- swift/common/middleware/staticweb.py | 29 +- swift/common/middleware/symlink.py | 5 +- swift/common/middleware/tempauth.py | 16 +- swift/common/middleware/tempurl.py | 13 +- .../versioned_writes/object_versioning.py | 18 +- swift/common/middleware/x_profile/html_viewer.py | 8 +- swift/common/middleware/xprofile.py | 17 +- swift/common/recon.py | 4 +- swift/common/registry.py | 11 +- swift/common/request_helpers.py | 56 +- swift/common/ring/builder.py | 9 +- swift/common/ring/ring.py | 14 +- swift/common/splice.py | 14 +- swift/common/statsd_client.py | 4 +- swift/common/storage_policy.py | 18 +- swift/common/swob.py | 107 +- swift/common/utils/__init__.py | 488 ++++++--- swift/common/utils/base.py | 35 +- swift/common/utils/config.py | 50 +- swift/common/utils/logs.py | 264 ++--- swift/common/utils/timestamp.py | 44 +- swift/common/wsgi.py | 202 +++- swift/container/backend.py | 17 +- swift/container/reconciler.py | 16 +- swift/container/server.py | 14 +- swift/container/sharder.py | 10 +- swift/container/sync.py | 2 +- swift/container/updater.py | 1 - swift/locale/de/LC_MESSAGES/swift.po | 134 --- swift/locale/en_GB/LC_MESSAGES/swift.po | 137 --- swift/locale/es/LC_MESSAGES/swift.po | 120 --- swift/locale/fr/LC_MESSAGES/swift.po | 105 -- swift/locale/it/LC_MESSAGES/swift.po | 106 -- swift/locale/ja/LC_MESSAGES/swift.po | 118 --- swift/locale/ko_KR/LC_MESSAGES/swift.po | 104 -- swift/locale/pt_BR/LC_MESSAGES/swift.po | 107 -- swift/locale/ru/LC_MESSAGES/swift.po | 107 -- swift/locale/tr_TR/LC_MESSAGES/swift.po | 103 -- swift/locale/zh_CN/LC_MESSAGES/swift.po | 102 -- swift/locale/zh_TW/LC_MESSAGES/swift.po | 101 -- swift/obj/auditor.py | 11 +- swift/obj/diskfile.py | 141 ++- swift/obj/expirer.py | 316 ++++-- swift/obj/mem_diskfile.py | 4 +- swift/obj/reconstructor.py | 37 +- swift/obj/replicator.py | 36 +- swift/obj/server.py | 100 +- swift/obj/ssync_receiver.py | 2 +- swift/obj/ssync_sender.py | 32 +- swift/obj/updater.py | 397 ++++++-- swift/proxy/controllers/account.py | 2 +- swift/proxy/controllers/base.py | 61 +- swift/proxy/controllers/container.py | 7 +- swift/proxy/controllers/obj.py | 39 +- swift/proxy/server.py | 7 +- test-requirements.txt | 9 +- test/__init__.py | 20 +- test/cors/main.py | 24 +- test/cors/test-container.js | 8 +- test/debug_logger.py | 15 +- test/functional/__init__.py | 273 ++--- test/functional/s3api/__init__.py | 3 +- test/functional/s3api/s3_test_client.py | 13 +- test/functional/s3api/test_bucket.py | 6 + test/functional/s3api/test_multi_delete.py | 9 - test/functional/s3api/test_multi_upload.py | 11 +- test/functional/s3api/test_object.py | 6 +- test/functional/s3api/test_xxe_injection.py | 8 +- test/functional/swift_test_client.py | 91 +- test/functional/test_access_control.py | 4 +- test/functional/test_account.py | 72 +- test/functional/test_container.py | 136 +-- test/functional/test_dlo.py | 2 +- test/functional/test_domain_remap.py | 13 +- test/functional/test_object.py | 37 +- test/functional/test_object_versioning.py | 35 +- test/functional/test_slo.py | 270 ++++- test/functional/test_staticweb.py | 27 +- test/functional/test_symlink.py | 17 +- test/functional/test_tempurl.py | 38 +- test/functional/test_versioned_writes.py | 31 +- test/probe/__init__.py | 25 + test/probe/brain.py | 15 +- test/probe/common.py | 22 +- .../probe/test_account_get_fake_responses_match.py | 8 +- test/probe/test_container_merge_policy_index.py | 91 +- test/probe/test_container_sync.py | 2 +- test/probe/test_dark_data.py | 2 +- .../{test_mixed_policy_mpu.py => test_mpu.py} | 2 +- test/probe/test_object_async_update.py | 201 +++- test/probe/test_object_expirer.py | 142 ++- test/probe/test_object_handoff.py | 1 - test/probe/test_object_partpower_increase.py | 6 +- test/probe/test_reconstructor_rebuild.py | 74 +- test/probe/test_sharder.py | 61 +- test/probe/test_signals.py | 8 +- test/s3api/__init__.py | 20 +- test/s3api/test_input_errors.py | 2 +- test/s3api/test_mpu.py | 244 ++++- test/s3api/test_request_target_style.py | 12 +- test/s3api/test_versioning.py | 20 +- test/sample.conf | 1 + test/unit/__init__.py | 74 +- test/unit/account/test_backend.py | 16 +- test/unit/account/test_reaper.py | 6 +- test/unit/account/test_server.py | 166 ++- test/unit/account/test_utils.py | 110 +- test/unit/cli/test_container_deleter.py | 8 +- test/unit/cli/test_form_signature.py | 26 +- test/unit/cli/test_info.py | 13 +- test/unit/cli/test_manage_shard_ranges.py | 23 +- test/unit/cli/test_recon.py | 69 +- test/unit/cli/test_recon_cron.py | 2 +- test/unit/cli/test_relinker.py | 4 +- test/unit/cli/test_reload.py | 32 +- test/unit/cli/test_ring_builder_analyzer.py | 4 +- test/unit/cli/test_ringbuilder.py | 62 +- test/unit/cli/test_ringcomposer.py | 8 +- test/unit/common/middleware/crypto/test_crypto.py | 2 +- .../common/middleware/crypto/test_crypto_utils.py | 2 +- .../common/middleware/crypto/test_decrypter.py | 2 +- .../common/middleware/crypto/test_encrypter.py | 211 ++-- .../common/middleware/crypto/test_keymaster.py | 35 +- .../middleware/crypto/test_kmip_keymaster.py | 2 +- .../common/middleware/crypto/test_kms_keymaster.py | 2 +- test/unit/common/middleware/helpers.py | 153 ++- test/unit/common/middleware/s3api/__init__.py | 2 +- test/unit/common/middleware/s3api/test_acl.py | 2 +- test/unit/common/middleware/s3api/test_bucket.py | 30 +- test/unit/common/middleware/s3api/test_etree.py | 7 +- .../common/middleware/s3api/test_multi_delete.py | 84 +- .../unit/common/middleware/s3api/test_multi_get.py | 2 +- .../common/middleware/s3api/test_multi_upload.py | 9 +- test/unit/common/middleware/s3api/test_obj.py | 37 +- test/unit/common/middleware/s3api/test_s3api.py | 23 +- .../unit/common/middleware/s3api/test_s3request.py | 67 +- test/unit/common/middleware/s3api/test_s3token.py | 4 +- .../common/middleware/s3api/test_versioning.py | 2 +- .../common/middleware/test_backend_ratelimit.py | 2 +- test/unit/common/middleware/test_bulk.py | 33 +- test/unit/common/middleware/test_cname_lookup.py | 27 +- test/unit/common/middleware/test_container_sync.py | 2 +- test/unit/common/middleware/test_copy.py | 4 +- test/unit/common/middleware/test_dlo.py | 2 +- test/unit/common/middleware/test_domain_remap.py | 7 +- test/unit/common/middleware/test_etag_quoter.py | 2 +- test/unit/common/middleware/test_formpost.py | 92 +- test/unit/common/middleware/test_helpers.py | 205 +++- test/unit/common/middleware/test_list_endpoints.py | 2 +- .../unit/common/middleware/test_listing_formats.py | 191 +++- test/unit/common/middleware/test_memcache.py | 2 +- .../common/middleware/test_object_versioning.py | 116 ++- test/unit/common/middleware/test_proxy_logging.py | 13 +- test/unit/common/middleware/test_ratelimit.py | 2 +- test/unit/common/middleware/test_read_only.py | 2 +- test/unit/common/middleware/test_recon.py | 13 +- test/unit/common/middleware/test_slo.py | 232 +++-- test/unit/common/middleware/test_staticweb.py | 4 +- test/unit/common/middleware/test_symlink.py | 22 +- test/unit/common/middleware/test_tempauth.py | 10 +- test/unit/common/middleware/test_tempurl.py | 7 +- .../common/middleware/test_versioned_writes.py | 31 +- test/unit/common/middleware/test_xprofile.py | 25 +- test/unit/common/ring/test_builder.py | 8 +- test/unit/common/ring/test_composite_builder.py | 2 +- test/unit/common/ring/test_ring.py | 8 +- test/unit/common/test_bufferedhttp.py | 101 +- test/unit/common/test_constraints.py | 3 +- test/unit/common/test_container_sync_realms.py | 18 +- test/unit/common/test_daemon.py | 31 +- test/unit/common/test_db.py | 41 +- test/unit/common/test_db_auditor.py | 2 +- test/unit/common/test_db_replicator.py | 10 +- test/unit/common/test_direct_client.py | 6 +- test/unit/common/test_error_limiter.py | 2 +- test/unit/common/test_http_protocol.py | 9 +- test/unit/common/test_internal_client.py | 138 ++- test/unit/common/test_linkat.py | 2 +- test/unit/common/test_manager.py | 5 +- test/unit/common/test_memcached.py | 13 +- test/unit/common/test_registry.py | 2 +- test/unit/common/test_splice.py | 20 +- test/unit/common/test_statsd_client.py | 521 +++------- test/unit/common/test_storage_policy.py | 14 +- test/unit/common/test_swob.py | 84 +- test/unit/common/test_utils.py | 844 ++++++++++++++-- test/unit/common/test_wsgi.py | 104 +- test/unit/common/utils/test_config.py | 4 +- test/unit/common/utils/test_ipaddrs.py | 2 +- test/unit/common/utils/test_libc.py | 2 +- test/unit/common/utils/test_logs.py | 490 ++++++--- test/unit/common/utils/test_timestamp.py | 2 +- test/unit/container/test_auditor.py | 2 +- test/unit/container/test_backend.py | 64 +- test/unit/container/test_reconciler.py | 124 +-- test/unit/container/test_replicator.py | 14 +- test/unit/container/test_server.py | 51 +- test/unit/container/test_sharder.py | 10 +- test/unit/container/test_sync.py | 2 +- test/unit/container/test_sync_store.py | 2 +- test/unit/container/test_updater.py | 7 +- test/unit/helpers.py | 4 +- test/unit/obj/test_auditor.py | 19 +- test/unit/obj/test_diskfile.py | 54 +- test/unit/obj/test_expirer.py | 585 ++++++++++- test/unit/obj/test_reconstructor.py | 16 +- test/unit/obj/test_replicator.py | 8 +- test/unit/obj/test_server.py | 324 ++++-- test/unit/obj/test_ssync.py | 4 +- test/unit/obj/test_ssync_receiver.py | 51 +- test/unit/obj/test_ssync_sender.py | 13 +- test/unit/obj/test_updater.py | 1058 ++++++++++++++++++-- test/unit/proxy/controllers/test_account.py | 2 +- test/unit/proxy/controllers/test_base.py | 16 +- test/unit/proxy/controllers/test_container.py | 41 +- test/unit/proxy/controllers/test_info.py | 2 +- test/unit/proxy/controllers/test_obj.py | 160 +-- test/unit/proxy/test_server.py | 112 +-- test/unit/proxy/test_sysmeta.py | 2 +- test/unit/test_locale/README | 3 - test/unit/test_locale/__init__.py | 0 test/unit/test_locale/eo.po | 7 - test/unit/test_locale/eo/LC_MESSAGES/swift.mo | 1 - test/unit/test_locale/messages.mo | Bin 181 -> 0 bytes test/unit/test_locale/test_locale.py | 45 - tox.ini | 84 +- 329 files changed, 9603 insertions(+), 7019 deletions(-) Requirements updates -------------------- diff --git a/requirements.txt b/requirements.txt index 97d440981..6105b8e4a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6 +6 @@ eventlet>=0.25.0,!=0.34.3 # MIT -greenlet>=0.3.2 +greenlet>=0.3.3 @@ -10,3 +10,2 @@ requests>=2.14.2 # Apache-2.0 -six>=1.10.0 -xattr>=0.4;sys_platform!='win32' # MIT -PyECLib>=1.3.1 # BSD +xattr>=0.7.2;sys_platform!='win32' # MIT +PyECLib>=1.3.1,!=1.6.2,!=1.6.3 # BSD @@ -14,9 +13 @@ cryptography>=2.0.2 # BSD/Apache-2.0 - -# For python 2.7, the following requirements are needed; they are not -# included since the requirments-check check will fail otherwise since -# global requirements do not support these anymore. -# Fortunately, these packages come in as dependencies from others and -# thus the py27 jobs still work. -# -# dnspython>=1.15.0;python_version=='2.7' # http://www.dnspython.org/LICENSE -# ipaddress>=1.0.16;python_version<'3.3' # PSF +dnspython>=1.15.0 # http://www.dnspython.org/LICENSE diff --git a/test-requirements.txt b/test-requirements.txt index b5cf150d6..9b8ec065b 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -6,2 +6,2 @@ -hacking>=2.0,<6.2.0 # Apache-2.0 -coverage>=5.0.4 # Apache-2.0 +hacking>=2.0,<7.1.0 # Apache-2.0 +coverage>=5.2.1 # Apache-2.0 @@ -11 +10,0 @@ stestr>=2.0.0 # Apache-2.0 -mock>=3.0 # BSD @@ -13 +12 @@ python-swiftclient>=3.2.0 -python-keystoneclient!=2.1.0,>=2.0.0 # Apache-2.0 +python-keystoneclient>=3.19.0 # Apache-2.0 @@ -23 +22 @@ bandit>=1.1.0 # Apache-2.0 -docutils>=0.11 # OSI-Approved Open Source, Public Domain +docutils>=0.15 # OSI-Approved Open Source, Public Domain