We eagerly announce the release of: swift 2.27.0: OpenStack Object Storage This release is part of the wallaby 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.27.0 ^^^^^^ New Features ************ * Added "audit watcher" hooks to allow operators to run arbitrary code against every diskfile in a cluster. For more information, see the documentation. * Added support for system-scoped "reader" roles when authenticating using Keystone. Operators may configure this using the "system_reader_roles" option in the "[filter:keystoneauth]" section of their proxy-server.conf. A comparable group, ".reseller_reader", is now available for development purposes when authenticating using tempauth. * Allow static large object segments to be deleted asynchronously. Operators may opt into this new behavior by enabling the new "allow_async_delete" option in the "[filter:slo]" section in their proxy-server.conf. For more information, see the documentation. * Added the ability to connect to memcached over TLS. See the "tls_*" options in etc/memcache.conf-sample * The proxy-server now caches 'listing' shards, improving listing performance for sharded containers. A new config option, "recheck_listing_shard_ranges", controls the cache time and defaults to 10 minutes; set it to 0 to disable caching (the previous behavior). * Added a new optional proxy-logging field "{wire_status_int}" for the status code returned to the client. For more information, see the documentation. * Memcache client error-limiting is now configurable. See the "error_suppression_*" options in etc/memcache.conf-sample * Added "tasks_per_second" option to rate-limit the object-expirer. * Added "usedforsecurity" annotations for use on FIPS-compliant systems. * S3 API improvements: * Make allowable clock skew configurable, with a default value of 15 minutes to match AWS. Note that this was previously hardcoded at 5 minutes; operators may want to preserve the prior behavior by setting "allowable_clock_skew = 300" in the "[filter:s3api]" section of their proxy-server.conf. * Container ACLs are now cloned to the "+segments" container when it is created. * Added the ability to configure auth region in s3token middleware. * CORS-related headers are now passed through appropriately when using the S3 API. Note that allowed origins and other container metadata must still be configured through the Swift API. Preflight requests do not contain enough information to map a bucket to an account/container pair; a new cluster-wide option "cors_preflight_allow_origin" may be configured for such OPTIONS requests. The default (blank) rejects all S3 preflight requests. * Sharding improvements: * A "--no-auto-shard" option has been added to "swift-container- sharder". * The sharder daemon has been enhanced to better support the shrinking of shards that are no longer required. Shard containers will now discover from their root container if they should be shrinking. They will also discover the shards into which they should shrink, which may include the root container itself. * A 'compact' command has been added to "swift-manage-shard- ranges" that enables sequences of contiguous shards with low object counts to be compacted into another existing shard, or into the root container. * "swift-manage-shard-ranges" can now accept a config file; this may be used to ensure consistency of threshold values with the container-sharder config. * The sharding progress reports in recon cache now continue to be included for a period of time after sharding has completed. The time period may be configured using the "recon_sharded_timeout" option in the "[container-sharder]" section of container- server.conf, and defaults to 12 hours. * Add root containers with compactible ranges to recon cache. * Expose sharding statistics in the backend recon middleware. * Replication improvements: * The post-rsync REPLICATE call no longer recalculates hashes immediately. * Hashes are no longer invalidated after a successful ssync; they were already invalidated during the data transfer. * Added support for Python 3.9. * Partition power increase improvements: * Fixed a bug where stale state files would cause misplaced data during multiple partition power increases. * Removed a race condition that could cause newly-written data to not be linked into the new partition for the new partition power. * Improved safety during cleanup to ensure files have been relinked appropriately before unlinking. * Added an option to drop privileges when running the relinker as root. * Added an option to rate-limit how quickly data files are relinked or cleaned up. This may be used to reduce I/O load during partition power increases, improving end-user performance. * Rehash partitions during the partition power increase. Previously, we relied on the replication engine to perform the rehash, which could cause an unexpected I/O spike after a partition power increase. * Warn when relinking/cleaning up and any disks are unmounted. * Log progress per partition when relinking/cleaning up. * During clean-up, stop warning about tombstones that got reaped from the new location but not the old. * Added the ability to read options from object-server.conf, similar to background daemons. Known Issues ************ * Operators should verify that encryption is not enabled in their reconciler pipelines; having it enabled there may harm data durability. For more information, see bug 1910804. Upgrade Notes ************* * Added an option to write EC fragments with legacy CRC to ensure a smooth upgrade from liberasurecode<=1.5.0 to >=1.6.2. For more information, see bug 1886088. Bug Fixes ********* * Errors downloading a Static Large Object that cause a shorter- than- expected response are now logged as 500s. * S3 API fixes: * Fixed a bug that prevented the s3api pipeline validation described in proxy-server.conf-sample from being performed. As documented, operators can disable this via the "auth_pipeline_check" option if proxy startup fails with validation errors. * Fixed an issue where SHA mismatches in client XML payloads would cause a server error. Swift now correctly responds with a client error about the bad digest. * Fixed an issue where non-base64 signatures would cause a server error. Swift now correctly responds with a client error about the invalid digest. * The correct storage policy is now logged for S3 requests. * Sharding fixes: * Prevent shard databases from losing track of their root database when deleted. * Prevent sharded root databases from being reclaimed to ensure that shards can detect that they have been deleted. * Overlapping shrinking shards no longer generate audit warnings; these are expected to sometimes overlap. * Replication fixes: * Fixed a race condition in ssync that could lead to a loss of data durability (or even loss of data, for two-replica policies) when some object servers have outdated rings. Replication via rsync is likely still affected by a similar bug. * Non-durable fragments can now be reverted from handoffs. * Reduced log noise for common ssync errors. * Python 3 fixes: * Staticweb correctly handles listings when paths include non- ASCII characters. * S3 API now allows multipart uploads with non-ASCII characters in the object name. * Fixed an import-ordering issue in "swift-dispersion-populate". * Turned off thread-logging when monkey-patching with eventlet. This addresses a potential hang in the proxy-server while logging client disconnects. * Fixed a bug that could cause EC GET responses to return a server error. * Fixed an issue with "swift-drive-audit" when run around New Year's. * Server errors encountered when validating the first segment of a Static or Dynamic Large Object now return a 503 to the client, rather than a 409. * Errors when setting keys in memcached are now logged. This helps operators detect when shard ranges for caching have gotten too large to be stored, for example. * Various other minor bug fixes and improvements. Changes in swift 2.26.0..2.27.0 ------------------------------- c6a640366 AUTHORS/CHANGELOG for 2.27.0 27a734c78 s3api: Allow CORS preflight requests 539398ce8 Replace dequeue_from_legacy_queue in documentation c9052f665 Change alignment on `compact` output a045f90b4 Add name to compact output 82f3d0ff9 relinker: continue cleaning up old files despite failure ebee4d455 relinker: make cleanup checks more robust 4bb78de61 Fix os.link exceptions in diskfile.relink_paths 1afad5c49 cors-tests: Increase timeouts for setup operations fb186f671 Add a config file option to swift-manage-shard-ranges 8492dc75a Close ring gz file after loading a406c23a1 Relinker: Add partition progress to relinker log 419a8ae8a Add unit test for diskfile.relink_paths b8aefd750 relinker: Stop reporting errors about reaped/cleaned-up datafiles 24eb16fc2 Fix race in diskfile.relink_paths 87c7684fb sharder: downgrade 'no data dirs' warning to info 81db98069 s3api: Pass through CORS headers c5152ed4d Add some functional CORS tests 01dec1240 sharder: only shrink to root if all ranges are involved 41f85f396 sharder: fix loop in find_compactible_shard_sequences 1de983481 Report final in_progress when sharding is complete b1309c95e Plumb sharding stats though recon middleware 6ed82b106 Run garbage collector during probe test setUp c9f6e760b Add unit test coverage for CleavingContext.done() 9eac76258 Trivial fixes in recon middleware a3d77cac0 Simplify interface to sharder shrinking 4f94ac263 Add sharder section to container config doc 443a142c1 tests for relink rehash 35b72756b Add test that DiskFileRouter gets relinker conf 6b30d9e81 relinker: Pass whole conf dicts around d24884450 relinker: Rehash as we complete partitions 10b16f973 Improve 'swift-manage-shard-ranges compact' output 13b17af45 Add shrink candidates to recon dump e8df26a2b sharder: Ignore already shrinking sequence when compacting 21a01e1c0 find_compactible_shard_sequences: fix skipped range 5dc7c6a24 sharder: add find_compactible_shard_sequences unit test af386712a Add test for relinker --files-per-second 8e0060e2f Correct spelling of 'compactable' to 'compactible' a90515bbb relinker: Warn on unmounted disks 53c0fc340 relinker: Add option to ratelimit relinking 44390d1ec Test under py39 cf4f32064 tempauth: Add .reseller_reader group 8f1d388f2 Fix s3api unit tests when run at roughly midnight UTC 98a0275a9 Add a read-only role to keystoneauth 7e6f9e7bf relinker: Add option to drop privileges 1b7dd34d3 relinker: Allow conf files for configuration e72aaf0c5 relinker: Pull arg parsing into module 12bb4839f swift-manage-shard-ranges: add 'compact' command b0c8de699 Enable shard ranges to be manually shrunk to root container 6c62c8d07 Do not delete root_path on ContainerBroker.delete_db 1f9b87954 Run flake8 on bin/ files 7ffcf2453 relinker: Improve logging 1746672e9 Update Memcached Considerations docs be908186b zuul: Clean up/de-dupe irrelevant-files c10f8ae4e relinker: Track part_power/next_part_power in state file f53ba5b50 Do not reclaim sharded roots until they shrink 0b870eb94 Prevent upgrading to pip 21+ beb1c3969 Fix intermittent failures in sharder audit unit tests ea0cab6e3 Adjust initial month value from int to str fbad3c233 s3api: Break S3Request.__init__ signature less 967c9c696 ring: Prevent IndexErrors in calc_replica_count 8f4200791 Move DebugLogger to its own module 0a230e5ae Fix logging in proxy container GET path 13c0980e7 docs: Clarify that encryption should not be in reconciler pipeline 1dceafa7d ssync: sync non-durable fragments from handoffs 6896f1f54 s3api: actually execute check_pipeline in real world cc3fa3cc0 Fix 503s from EC GETs of objects with POST metadata d9c433a41 s3api: Get rid of slo_enabled flag 969b05fcf swift-init: Re-enable targeted configs 8081e0182 Resolve a regression with the patch for missing binaries 14a42d573 Monkey-patch in tests using mock.patch 86b966d95 Turn off logging.logThreads when monkey-patched 7cf4edfae Make test_verify_server independent of test env 10d9a737d s3api: Make allowable clock skew configurable 83233e7b3 prefactor: Pass s3api Config to S3Requests 6f813f6bf Fix __exit__ calls a91434383 unit test S3 SigV4Request X-Amz-Content-SHA256 handling 128f19950 Refactor reconstructor probe tests 0c0d9d73d gate: Add centos8/py36 experimental jobs a5fa3cfca py3: Fix status comparison in ECGetResponseCollection 09a2f9393 s3api: Make UNSIGNED-PAYLOAD requests work again 17cef1613 memcache: Log errors encountered when setting keys 8df3d1505 Document memcache max size with shard ranges 87e88782a s3api: Better-handle SHA mismatches during CompleteMultipartUpload 90c64ba09 Remove vendor names from deployment guide 6930bc24b Memcached client TLS support 077ba77ea Use cached shard ranges for container GETs 453983764 Avoid loops when gathering container listings from shards cc69e5b08 Have PrefixLoggerAdapter prefix exceptions, as well f4341a0d2 acoles: emeritus no more! 6ed724c3b py3: Fix non-ASCII multipart uploads d64522a68 Improve test_utils.TestCloseableChain 5e3302649 Use CloseableChain when creating iterator of SLO response b97128090 Let developers/operators add watchers to object audit fb91993b4 s3-tests: Use my s3compat fork instead 4415f4513 s3api: Catch binascii.Error d27796016 Populate shrinking shards with shard ranges learnt from root d186af14f Add py3 probe tests on CentOS 8 73aa48a82 s3-tests: Only try to copy outputs when there *are* outputs 6058b1c4e Run linters on py3 69d6206db Fix up some log message grammar 84adf5e3b Remove md5_factory function 5320ecbaf replace md5 with swift utils version cec9cb881 Add option to swift-oldies to only print pids b87bc7d18 Increase gate timeouts from 1hr to 1.5hr d4c0a7d3b Give probe tests a second chance to pass 2b4f58108 Run DSVM func tests under py3 232cb85cb Pin Bandit on py2 976cc8f48 Give unit tests a second chance to pass 0d37492c6 Clean up requirements a bit f4d691da8 Fail if swift binary are missing f54634e95 ssync: Tolerate more hang-ups 155af38d1 ssync: don't log tracebacks for client disconnects cc94fb5b6 Fix invalid argument formatting in exception messages 9c532891d Stop explicitly handling StopIteration in proxy-logging 8c2c9bec7 s3api: Clone ACLs when creating +segments container 3d787ddff xlo: 5xx while validating first segment is a server error 3c3cab264 Stop invalidating suffixes post-SSYNC 5eaf15486 Have REPLICATE with suffixes just append to hashes.invalid 104afe56f py2: Suppress more CryptographyDeprecationWarnings 918ab8543 Use socket_timeout kwarg instead of useless eventlet.wsgi.WRITE_TIMEOUT ee641dffc Dep's should be restricted by upper-constraints e78377624 Add a new URL parameter to allow for async cleanup of SLO segments 711fb302b gate: Add victoria rolling upgrade job 90c737e35 Use swiftclient Connections in sharding probe tests 24060f6e6 tests: Increase container-update timeouts for rolling upgrade jobs 05d8b8fba Increase container_update_timeout in in-process func tests aff65242f memcache: Make error-limiting values configurable 2b1eec79f Continue logging deprecation warnings for run_pause 72786533e Move config option documentation to separate docs f4ce32277 Add librsvg2-* to bindep.txt 6c360a70b saio: Stop processes more forcefully in resetswift 26e431498 Use TOX_CONSTRAINTS_FILE d90ee7896 tests: Replace FakeLogger with debug_logger in test_proxy_logging 7b5868266 Do not require the close method for response iterator f665a6d42 Imported Translations from Zanata 95212ac72 Add a slightly more-useful repr for DiskFiles 0f97d8e92 Remove the unused coding style modules b05ad8295 Add tasks_per_second option to expirer 6b7eecab5 Get unit tests passing on py39 8c0a1abf7 Fix a race condition in case of cross-replication 055e7b93a Imported Translations from Zanata fb08d477e New proxy logging field for wire status 0d2604c11 wsgi: Ensure _response_headers is a list f4a34c299 Log storage policy with s3api requests 6f4143d99 Clean up apache deployment docs 38ab4593f docs: Switching to /srv/www from /var/www to be more FHS 3.0 conformat 179a6ffb8 Update master for stable/victoria 599f63e76 ec: Add an option to write fragments with legacy crc 9a0bac4ce Fail short reads in SegmentedIterable d17ee8ba1 Pass thread_locals through to frag queue feeder 5f95e1bec Use bigger GreenPool for concurrent EC 004052dc6 Fixing S3 credential caching region support 41335f7b4 Revert "Make rolling-upgrade job non-voting" 318c1a566 Run swift-tox-func-encryption-py37 job in the gate 5b8073c77 py3: Fix swift-dispersion-populate ba46eb0e3 py3: Fix non-ascii chars in staticweb listings 34dd24e80 Refactor audit shard tests 94b90aa49 s3api: Allow lower-cased regions when making buckets ae27056f0 probe-tests: Avoid a DuplicateSectionError on py3 802d80f31 ratelimit: Log proper container path when returning 498 for listings Diffstat (except docs and test files) ------------------------------------- .gitignore | 1 + .zuul.yaml | 251 +-- AUTHORS | 8 +- CHANGELOG | 203 ++- bandit.yaml | 2 +- bin/swift-account-info | 1 + bin/swift-config | 1 + bin/swift-container-info | 1 + bin/swift-container-sharder | 4 + bin/swift-dispersion-populate | 9 +- bin/swift-drive-audit | 2 +- bin/swift-object-relinker | 22 +- bin/swift-oldies | 30 +- bin/swift-recon-cron | 1 + bindep.txt | 7 +- etc/container-reconciler.conf-sample | 6 + etc/container-server.conf-sample | 23 +- etc/memcache.conf-sample | 30 + etc/object-expirer.conf-sample | 3 + etc/object-server.conf-sample | 48 +- etc/proxy-server.conf-sample | 69 +- lower-constraints.txt | 2 - py2-constraints.txt | 4 + .../notes/2_27_0_release-a9ae967d6d271342.yaml | 235 +++ releasenotes/source/index.rst | 2 + .../locale/en_GB/LC_MESSAGES/releasenotes.po | 436 ++++- releasenotes/source/victoria.rst | 6 + setup.cfg | 4 + swift/__init__.py | 2 +- swift/account/reaper.py | 8 +- swift/cli/container_deleter.py | 2 +- swift/cli/info.py | 4 +- swift/cli/manage_shard_ranges.py | 178 +- swift/cli/relinker.py | 518 ++++-- swift/cli/shard-info.py | 7 +- swift/common/db.py | 10 +- swift/common/db_replicator.py | 22 +- swift/common/direct_client.py | 44 +- swift/common/exceptions.py | 8 + swift/common/manager.py | 47 +- swift/common/memcached.py | 52 +- swift/common/middleware/crypto/encrypter.py | 6 +- swift/common/middleware/dlo.py | 9 +- swift/common/middleware/domain_remap.py | 5 +- swift/common/middleware/keystoneauth.py | 16 + swift/common/middleware/memcache.py | 29 +- swift/common/middleware/proxy_logging.py | 81 +- swift/common/middleware/ratelimit.py | 11 +- swift/common/middleware/recon.py | 15 +- swift/common/middleware/s3api/acl_handlers.py | 2 +- .../common/middleware/s3api/controllers/bucket.py | 3 +- .../middleware/s3api/controllers/multi_upload.py | 19 +- swift/common/middleware/s3api/s3api.py | 90 +- swift/common/middleware/s3api/s3request.py | 83 +- swift/common/middleware/s3api/s3response.py | 79 +- swift/common/middleware/s3api/s3token.py | 4 +- swift/common/middleware/s3api/utils.py | 11 + swift/common/middleware/slo.py | 141 +- swift/common/middleware/staticweb.py | 12 +- swift/common/middleware/tempauth.py | 17 +- .../versioned_writes/object_versioning.py | 6 +- swift/common/request_helpers.py | 84 +- swift/common/ring/ring.py | 49 +- swift/common/utils.py | 355 +++- swift/common/wsgi.py | 9 +- swift/container/backend.py | 79 +- swift/container/server.py | 60 +- swift/container/sharder.py | 514 ++++-- swift/locale/de/LC_MESSAGES/swift.po | 7 +- swift/locale/en_GB/LC_MESSAGES/swift.po | 13 +- swift/locale/es/LC_MESSAGES/swift.po | 8 +- swift/locale/fr/LC_MESSAGES/swift.po | 8 +- swift/locale/it/LC_MESSAGES/swift.po | 8 +- swift/locale/ja/LC_MESSAGES/swift.po | 7 +- swift/locale/ko_KR/LC_MESSAGES/swift.po | 7 +- swift/locale/pt_BR/LC_MESSAGES/swift.po | 6 +- swift/locale/ru/LC_MESSAGES/swift.po | 7 +- swift/locale/tr_TR/LC_MESSAGES/swift.po | 6 +- swift/locale/zh_CN/LC_MESSAGES/swift.po | 6 +- swift/locale/zh_TW/LC_MESSAGES/swift.po | 7 +- swift/obj/auditor.py | 108 +- swift/obj/diskfile.py | 181 +- swift/obj/expirer.py | 18 +- swift/obj/mem_diskfile.py | 6 +- swift/obj/reconstructor.py | 94 +- swift/obj/replicator.py | 180 +- swift/obj/server.py | 23 +- swift/obj/ssync_receiver.py | 119 +- swift/obj/ssync_sender.py | 60 +- swift/obj/watchers/__init__.py | 0 swift/obj/watchers/dark_data.py | 146 ++ swift/proxy/controllers/base.py | 183 +- swift/proxy/controllers/container.py | 259 ++- swift/proxy/controllers/obj.py | 48 +- swift/proxy/server.py | 27 +- test-requirements.txt | 1 - test/__init__.py | 2 +- test/cors/README.rst | 122 ++ test/cors/harness.js | 258 +++ test/cors/index.html | 44 + test/cors/main.py | 324 ++++ test/cors/test-account.js | 16 + test/cors/test-container.js | 148 ++ test/cors/test-info.js | 60 + test/cors/test-large-objects.js | 93 + test/cors/test-object.js | 169 ++ test/cors/test-s3-obj.js | 218 +++ test/cors/test-symlink.js | 139 ++ test/cors/vendor/aws-sdk-2.829.0.min.js | 10 + test/debug_logger.py | 212 +++ test/functional/__init__.py | 10 +- test/functional/s3api/test_multi_upload.py | 24 +- test/functional/s3api/test_object.py | 26 +- test/functional/s3api/utils.py | 5 +- test/functional/swift_test_client.py | 7 +- test/functional/test_object.py | 4 +- test/functional/test_object_versioning.py | 93 +- test/functional/test_slo.py | 95 +- test/functional/test_staticweb.py | 17 +- test/functional/test_symlink.py | 16 +- test/probe/common.py | 151 +- test/probe/test_container_merge_policy_index.py | 4 +- test/probe/test_dark_data.py | 183 ++ test/probe/test_object_expirer.py | 64 + test/probe/test_object_handoff.py | 4 +- test/probe/test_object_partpower_increase.py | 17 +- test/probe/test_reconstructor_rebuild.py | 103 +- test/probe/test_reconstructor_revert.py | 209 ++- test/probe/test_replication_servers_working.py | 10 + test/probe/test_sharder.py | 722 +++++++- test/probe/test_signals.py | 18 +- test/s3api/test_versioning.py | 24 +- test/unit/__init__.py | 252 +-- test/unit/account/test_backend.py | 8 +- test/unit/cli/test_container_deleter.py | 16 +- test/unit/cli/test_manage_shard_ranges.py | 820 ++++++++- test/unit/cli/test_relinker.py | 1238 +++++++++++-- .../common/middleware/crypto/crypto_helpers.py | 4 +- test/unit/common/middleware/helpers.py | 39 +- test/unit/common/middleware/s3api/__init__.py | 14 +- test/unit/common/middleware/s3api/test_acl.py | 5 +- test/unit/common/middleware/s3api/test_bucket.py | 23 + .../common/middleware/s3api/test_multi_delete.py | 46 +- .../common/middleware/s3api/test_multi_upload.py | 188 +- test/unit/common/middleware/s3api/test_obj.py | 175 +- test/unit/common/middleware/s3api/test_s3api.py | 158 +- .../unit/common/middleware/s3api/test_s3request.py | 437 ++++- .../common/middleware/s3api/test_s3response.py | 2 + test/unit/common/middleware/s3api/test_s3token.py | 4 + test/unit/common/middleware/s3api/test_utils.py | 43 + test/unit/common/middleware/test_copy.py | 5 +- test/unit/common/middleware/test_dlo.py | 57 +- test/unit/common/middleware/test_keystoneauth.py | 63 +- test/unit/common/middleware/test_memcache.py | 39 + .../common/middleware/test_object_versioning.py | 44 +- test/unit/common/middleware/test_proxy_logging.py | 160 +- test/unit/common/middleware/test_recon.py | 90 + test/unit/common/middleware/test_slo.py | 444 ++++- test/unit/common/middleware/test_symlink.py | 18 +- test/unit/common/middleware/test_tempauth.py | 62 +- test/unit/common/ring/test_builder.py | 5 + test/unit/common/ring/test_ring.py | 26 +- test/unit/common/test_db.py | 89 +- test/unit/common/test_direct_client.py | 65 +- test/unit/common/test_internal_client.py | 1 + test/unit/common/test_manager.py | 273 ++- test/unit/common/test_memcached.py | 186 +- test/unit/common/test_request_helpers.py | 64 + test/unit/common/test_utils.py | 553 +++++- test/unit/common/test_wsgi.py | 58 +- test/unit/container/test_backend.py | 161 +- test/unit/container/test_server.py | 180 +- test/unit/container/test_sharder.py | 1848 ++++++++++++++++--- test/unit/obj/common.py | 16 +- test/unit/obj/test_auditor.py | 253 ++- test/unit/obj/test_diskfile.py | 528 +++++- test/unit/obj/test_expirer.py | 34 + test/unit/obj/test_reconstructor.py | 305 ++-- test/unit/obj/test_replicator.py | 17 +- test/unit/obj/test_server.py | 301 +++- test/unit/obj/test_ssync.py | 103 +- test/unit/obj/test_ssync_receiver.py | 414 ++++- test/unit/obj/test_ssync_sender.py | 267 ++- test/unit/proxy/controllers/test_base.py | 117 +- test/unit/proxy/controllers/test_container.py | 959 +++++++++- test/unit/proxy/controllers/test_obj.py | 245 ++- test/unit/proxy/test_server.py | 123 +- tools/playbooks/common/install_dependencies.yaml | 23 +- tools/playbooks/cors/install_selenium.yaml | 30 + tools/playbooks/cors/post.yaml | 38 + tools/playbooks/cors/run.yaml | 15 + tools/playbooks/multinode_setup/make_rings.yaml | 2 + .../saio_single_node_setup/add_s3api.yaml | 8 + .../saio_single_node_setup/make_rings.yaml | 7 +- tools/test-setup.sh | 12 + tox.ini | 36 +- 221 files changed, 20342 insertions(+), 5004 deletions(-) Requirements updates -------------------- diff --git a/test-requirements.txt b/test-requirements.txt index 085bd3b0e..862a0e921 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -15 +14,0 @@ python-keystoneclient!=2.1.0,>=2.0.0 # Apache-2.0 -python-openstackclient>=3.12.0