swift/test/unit/common
Clay Gerrard ea8e545a27 Rebuild frags for unmounted disks
Change the behavior of the EC reconstructor to perform a fragment
rebuild to a handoff node when a primary peer responds with 507 to the
REPLICATE request.

Each primary node in a EC ring will sync with exactly three primary
peers, in addition to the left & right nodes we now select a third node
from the far side of the ring.  If any of these partners respond
unmounted the reconstructor will rebuild it's fragments to a handoff
node with the appropriate index.

To prevent ssync (which is uninterruptible) receiving a 409 (Conflict)
we must give the remote handoff node the correct backend_index for the
fragments it will recieve.  In the common case we will use
determistically different handoffs for each fragment index to prevent
multiple unmounted primary disks from forcing a single handoff node to
hold more than one rebuilt fragment.

Handoff nodes will continue to attempt to revert rebuilt handoff
fragments to the appropriate primary until it is remounted or
rebalanced.  After a rebalance of EC rings (potentially removing
unmounted/failed devices), it's most IO efficient to run in
handoffs_only mode to avoid unnecessary rebuilds.

Closes-Bug: #1510342

Change-Id: Ief44ed39d97f65e4270bf73051da9a2dd0ddbaec
2019-02-08 18:04:55 +00:00
..
middleware Add content-encoding parameter to formpost middleware 2019-02-06 00:08:17 +00:00
ring Rebuild frags for unmounted disks 2019-02-08 18:04:55 +00:00
__init__.py Initial commit of Swift code 2010-07-12 17:03:45 -05:00
corrupted_example.db Real files for bad databases. 2011-08-02 18:21:25 +00:00
malformed_example.db Real files for bad databases. 2011-08-02 18:21:25 +00:00
malformed_schema_example.db Quarantine malformed database schema SQLite errors 2016-12-01 14:17:02 +11:00
missing_container_info.db Quarantine DB without *_stat row 2018-02-07 19:35:05 +01:00
test_base_storage_server.py pep8 fix: assertEquals -> assertEqual 2015-10-11 12:57:25 +02:00
test_bufferedhttp.py py3: port bufferedhttp (hopefully) 2018-08-24 11:30:26 +00:00
test_constraints.py Merge "py3: Port common/constraints" 2018-06-22 11:48:41 +00:00
test_container_sync_realms.py Python3: Fix test/unit/common/test_container_sync_realms.py 2019-01-29 09:04:36 -06:00
test_daemon.py Clean up HASH_PATH_* patching 2018-11-01 20:52:33 +00:00
test_db_replicator.py py3: port account/container replicators 2018-11-06 16:54:20 -08:00
test_db.py Move base64-decoding/unpickling into DatabaseBroker 2018-10-05 22:07:46 +00:00
test_direct_client.py py3: Monkey-patch json.loads to accept bytes on py35 2018-11-02 21:38:53 +00:00
test_exceptions.py Remove swiftclient dep on direct_client 2013-12-24 03:11:43 -08:00
test_header_key_dict.py Using assertIsNone() instead of assertEqual(None) 2017-06-07 14:05:53 +08:00
test_internal_client.py Clean up HASH_PATH_* patching 2018-11-01 20:52:33 +00:00
test_linkat.py Fix tests using O_TMPFILE 2018-03-13 12:06:07 +00:00
test_manager.py Add checksum to object extended attributes 2017-11-03 13:30:05 -04:00
test_memcached.py py3: port common/memcached.py 2018-02-26 12:39:16 +00:00
test_request_helpers.py py3: port request_helpers 2018-09-15 01:33:34 -06:00
test_splice.py No longer import nose 2017-11-07 15:39:25 +11:00
test_storage_policy.py Configure diskfile per storage policy 2018-08-24 02:29:13 +00:00
test_swob.py Merge "swob.Match: remove quotes when checking __contains__" 2018-07-04 06:34:17 +00:00
test_utils.py Change how O_TMPFILE support is detected 2019-01-31 18:35:39 +00:00
test_wsgi.py Clean up HASH_PATH_* patching 2018-11-01 20:52:33 +00:00