)]}'
{"id":"openstack%2Fswift~667579","triplet_id":"openstack%2Fswift~master~I7f9b3769406b1d139d75aaca166bdb1355b14b1a","project":"openstack/swift","branch":"master","topic":"auto-sharding-2.0","hashtags":[],"change_id":"I7f9b3769406b1d139d75aaca166bdb1355b14b1a","subject":"sharding: first attempt at _elect_leader","status":"ABANDONED","created":"2019-06-26 10:54:47.000000000","updated":"2024-04-08 04:49:29.000000000","total_comment_count":5,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"952c4904b997dadded2c4e138561fbb8c3b67bfc","_number":667579,"virtual_id_number":667579,"owner":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"actions":{},"labels":{"Verified":{"disliked":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"tag":"autogenerated:zuul:check","value":-1,"date":"2020-06-04 02:10:32.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"date":"2020-06-04 06:09:49.000000000","_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":-1,"default_value":0,"optional":true},"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2020-06-04 02:10:32.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2020-06-04 06:09:49.000000000","updated_by":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"reviewer":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"state":"REVIEWER"}],"messages":[{"id":"a7b113b1946f423f8ff9ca162f09c7ce20bcdcf1","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2019-06-26 10:54:47.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"60483caf2b79ad2ba101cd78ff383461839455f7","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2019-06-26 10:55:28.000000000","message":"Patch Set 1: Workflow-1\n\nWIP, code in sharder hasn\u0027t been finished yet, but wanted to get this code up.","accounts_in_message":[],"_revision_number":1},{"id":"bccb6fb1a80d82e5fa2450dae87be6f7f89e639b","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-06-26 23:11:29.000000000","message":"Patch Set 1: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/79/667579/1/check/openstack-tox-docs/9122a7e/html/ : SUCCESS in 4m 18s\n- swift-build-image http://logs.openstack.org/79/667579/1/check/swift-build-image/f90e4a7/ : SUCCESS in 8m 38s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/79/667579/1/check/swift-tox-py27/8623972/ : FAILURE in 8m 33s\n- swift-tox-py36 http://logs.openstack.org/79/667579/1/check/swift-tox-py36/e0e0885/ : FAILURE in 8m 42s (non-voting)\n- swift-tox-py37 http://logs.openstack.org/79/667579/1/check/swift-tox-py37/1481a38/ : FAILURE in 8m 33s\n- swift-tox-func http://logs.openstack.org/79/667579/1/check/swift-tox-func/5a5829e/ : FAILURE in 3m 34s\n- swift-tox-func-py37 http://logs.openstack.org/79/667579/1/check/swift-tox-func-py37/ba6a329/ : FAILURE in 4m 07s\n- swift-tox-func-encryption http://logs.openstack.org/79/667579/1/check/swift-tox-func-encryption/da0ebde/ : FAILURE in 3m 55s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/79/667579/1/check/swift-tox-func-domain-remap-staticweb/74c89b4/ : FAILURE in 4m 20s\n- swift-tox-func-ec http://logs.openstack.org/79/667579/1/check/swift-tox-func-ec/b832960/ : FAILURE in 3m 49s\n- swift-tox-func-s3api http://logs.openstack.org/79/667579/1/check/swift-tox-func-s3api/5d86246/ : FAILURE in 4m 05s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/79/667579/1/check/swift-tox-func-s3api-ceph-s3tests-tempauth/c35b31f/ : SUCCESS in 12m 45s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/79/667579/1/check/swift-probetests-centos-7/166693f/ : FAILURE in 29m 30s\n- swift-dsvm-functional http://logs.openstack.org/79/667579/1/check/swift-dsvm-functional/00d5cb9/ : SUCCESS in 28m 54s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/79/667579/1/check/swift-dsvm-functional-ipv6/c3bbe20/ : SUCCESS in 31m 28s\n- swift-tox-lower-constraints http://logs.openstack.org/79/667579/1/check/swift-tox-lower-constraints/5211380/ : FAILURE in 9m 33s\n- openstack-tox-pep8 http://logs.openstack.org/79/667579/1/check/openstack-tox-pep8/2b1035e/ : SUCCESS in 5m 31s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/79/667579/1/check/swift-multinode-rolling-upgrade/69d79b3/ : FAILURE in 9m 07s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"4be1166718cea37f4e4ecc9d13de7fd125fcba86","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2019-06-28 07:17:52.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"5ec23f8fe19b2390d352c5027dac15622494d686","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-06-28 08:56:43.000000000","message":"Patch Set 2: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/79/667579/2/check/openstack-tox-docs/a80db78/html/ : SUCCESS in 3m 41s\n- swift-build-image http://logs.openstack.org/79/667579/2/check/swift-build-image/658b329/ : SUCCESS in 8m 24s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/79/667579/2/check/swift-tox-py27/6f3d1ae/ : FAILURE in 8m 21s\n- swift-tox-py36 http://logs.openstack.org/79/667579/2/check/swift-tox-py36/e8500f0/ : FAILURE in 7m 35s (non-voting)\n- swift-tox-py37 http://logs.openstack.org/79/667579/2/check/swift-tox-py37/6f83716/ : FAILURE in 7m 52s\n- swift-tox-func http://logs.openstack.org/79/667579/2/check/swift-tox-func/a56b4e7/ : FAILURE in 3m 44s\n- swift-tox-func-py37 http://logs.openstack.org/79/667579/2/check/swift-tox-func-py37/2cb72af/ : FAILURE in 3m 38s\n- swift-tox-func-encryption http://logs.openstack.org/79/667579/2/check/swift-tox-func-encryption/768bf1b/ : FAILURE in 3m 56s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/79/667579/2/check/swift-tox-func-domain-remap-staticweb/7f767be/ : FAILURE in 5m 11s\n- swift-tox-func-ec http://logs.openstack.org/79/667579/2/check/swift-tox-func-ec/73f0cb0/ : FAILURE in 3m 48s\n- swift-tox-func-s3api http://logs.openstack.org/79/667579/2/check/swift-tox-func-s3api/857c7a4/ : FAILURE in 5m 09s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/79/667579/2/check/swift-tox-func-s3api-ceph-s3tests-tempauth/35c6447/ : SUCCESS in 14m 28s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/79/667579/2/check/swift-probetests-centos-7/3e458d1/ : FAILURE in 28m 31s\n- swift-dsvm-functional http://logs.openstack.org/79/667579/2/check/swift-dsvm-functional/8518cc3/ : SUCCESS in 31m 59s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/79/667579/2/check/swift-dsvm-functional-ipv6/1d6997d/ : SUCCESS in 26m 33s\n- swift-tox-lower-constraints http://logs.openstack.org/79/667579/2/check/swift-tox-lower-constraints/2104a1c/ : FAILURE in 9m 21s\n- openstack-tox-pep8 http://logs.openstack.org/79/667579/2/check/openstack-tox-pep8/e777384/ : SUCCESS in 5m 47s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/79/667579/2/check/swift-multinode-rolling-upgrade/50cf4a2/ : FAILURE in 8m 37s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"0d6e081647fd9162214b5a3123852d050d5866c2","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2019-07-02 05:18:02.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"fa67fcf6d934193b4747f7d8542940a8eac3040e","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-02 05:53:08.000000000","message":"Patch Set 3: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/79/667579/3/check/openstack-tox-docs/fd449b6/html/ : SUCCESS in 4m 42s\n- swift-build-image http://logs.openstack.org/79/667579/3/check/swift-build-image/dbaeaaf/ : SUCCESS in 8m 39s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/79/667579/3/check/swift-tox-py27/76de02e/ : FAILURE in 9m 01s\n- swift-tox-py36 http://logs.openstack.org/79/667579/3/check/swift-tox-py36/34bf962/ : FAILURE in 8m 12s (non-voting)\n- swift-tox-py37 http://logs.openstack.org/79/667579/3/check/swift-tox-py37/cd80f7d/ : FAILURE in 8m 29s\n- swift-tox-func http://logs.openstack.org/79/667579/3/check/swift-tox-func/aa5bcbe/ : FAILURE in 3m 39s\n- swift-tox-func-py37 http://logs.openstack.org/79/667579/3/check/swift-tox-func-py37/42e37e7/ : FAILURE in 3m 51s\n- swift-tox-func-encryption http://logs.openstack.org/79/667579/3/check/swift-tox-func-encryption/e4830ab/ : FAILURE in 3m 48s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/79/667579/3/check/swift-tox-func-domain-remap-staticweb/e95eb77/ : FAILURE in 3m 30s\n- swift-tox-func-ec http://logs.openstack.org/79/667579/3/check/swift-tox-func-ec/dba3f24/ : FAILURE in 3m 12s\n- swift-tox-func-s3api http://logs.openstack.org/79/667579/3/check/swift-tox-func-s3api/14bac81/ : FAILURE in 3m 37s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/79/667579/3/check/swift-tox-func-s3api-ceph-s3tests-tempauth/a6dc139/ : SUCCESS in 12m 09s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/79/667579/3/check/swift-probetests-centos-7/1a5f954/ : FAILURE in 29m 55s\n- swift-dsvm-functional http://logs.openstack.org/79/667579/3/check/swift-dsvm-functional/b629ba7/ : SUCCESS in 25m 40s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/79/667579/3/check/swift-dsvm-functional-ipv6/79a517f/ : SUCCESS in 26m 40s\n- swift-tox-lower-constraints http://logs.openstack.org/79/667579/3/check/swift-tox-lower-constraints/642ebc0/ : FAILURE in 7m 57s\n- openstack-tox-pep8 http://logs.openstack.org/79/667579/3/check/openstack-tox-pep8/11f0446/ : SUCCESS in 5m 17s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/79/667579/3/check/swift-multinode-rolling-upgrade/0ad8fac/ : FAILURE in 7m 44s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"2dc5e96880f369c4ded69743f76fc8b10b04e7a4","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2019-07-22 09:49:07.000000000","message":"Uploaded patch set 4: Patch Set 3 was rebased.","accounts_in_message":[],"_revision_number":4},{"id":"1fba4582a4dfb6549ed5ab29d94036f0a9ebc4a6","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-22 10:58:58.000000000","message":"Patch Set 4: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs http://logs.openstack.org/79/667579/4/check/openstack-tox-docs/6eb60a8/html/ : SUCCESS in 6m 30s\n- swift-build-image http://logs.openstack.org/79/667579/4/check/swift-build-image/54211dc/ : SUCCESS in 11m 43s (non-voting)\n- swift-tox-py27 http://logs.openstack.org/79/667579/4/check/swift-tox-py27/8011c68/ : FAILURE in 9m 14s\n- swift-tox-py36 http://logs.openstack.org/79/667579/4/check/swift-tox-py36/c8f0b77/ : FAILURE in 8m 51s (non-voting)\n- swift-tox-py37 http://logs.openstack.org/79/667579/4/check/swift-tox-py37/9aeae71/ : FAILURE in 9m 12s\n- swift-tox-func http://logs.openstack.org/79/667579/4/check/swift-tox-func/a1c8ddd/ : FAILURE in 4m 54s\n- swift-tox-func-encryption http://logs.openstack.org/79/667579/4/check/swift-tox-func-encryption/e924743/ : FAILURE in 5m 00s\n- swift-tox-func-domain-remap-staticweb http://logs.openstack.org/79/667579/4/check/swift-tox-func-domain-remap-staticweb/6d88564/ : FAILURE in 4m 18s\n- swift-tox-func-ec http://logs.openstack.org/79/667579/4/check/swift-tox-func-ec/954345d/ : FAILURE in 5m 20s\n- swift-tox-func-s3api http://logs.openstack.org/79/667579/4/check/swift-tox-func-s3api/d414107/ : FAILURE in 5m 20s\n- swift-tox-func-py37 http://logs.openstack.org/79/667579/4/check/swift-tox-func-py37/47706ff/ : FAILURE in 4m 39s\n- swift-tox-func-domain-remap-staticweb-py37 http://logs.openstack.org/79/667579/4/check/swift-tox-func-domain-remap-staticweb-py37/1580ac1/ : FAILURE in 4m 46s\n- swift-tox-func-ec-py37 http://logs.openstack.org/79/667579/4/check/swift-tox-func-ec-py37/f1cee52/ : FAILURE in 4m 15s\n- swift-tox-func-s3api-ceph-s3tests-tempauth http://logs.openstack.org/79/667579/4/check/swift-tox-func-s3api-ceph-s3tests-tempauth/34ceca6/ : SUCCESS in 15m 43s (non-voting)\n- swift-probetests-centos-7 http://logs.openstack.org/79/667579/4/check/swift-probetests-centos-7/2b60f73/ : FAILURE in 31m 02s\n- swift-dsvm-functional http://logs.openstack.org/79/667579/4/check/swift-dsvm-functional/e1d8d12/ : SUCCESS in 31m 02s\n- swift-dsvm-functional-py3 http://logs.openstack.org/79/667579/4/check/swift-dsvm-functional-py3/ffe96ec/ : SUCCESS in 29m 19s\n- swift-dsvm-functional-ipv6 http://logs.openstack.org/79/667579/4/check/swift-dsvm-functional-ipv6/0cf3196/ : SUCCESS in 30m 20s\n- swift-tox-lower-constraints http://logs.openstack.org/79/667579/4/check/swift-tox-lower-constraints/a7249bb/ : FAILURE in 12m 41s\n- openstack-tox-pep8 http://logs.openstack.org/79/667579/4/check/openstack-tox-pep8/7cf2535/ : SUCCESS in 6m 24s\n- swift-multinode-rolling-upgrade http://logs.openstack.org/79/667579/4/check/swift-multinode-rolling-upgrade/345fe13/ : SUCCESS in 19m 00s (non-voting)","accounts_in_message":[],"_revision_number":4},{"id":"4f3ae6fb8e49bba8523dc18eb50071814f23f7f3","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2019-10-08 03:54:49.000000000","message":"Uploaded patch set 5.","accounts_in_message":[],"_revision_number":5},{"id":"12fc21f6132841550f9027289dfa1863aaf19113","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-10-08 05:17:15.000000000","message":"Patch Set 5: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/10413381a5ca4a5d9155a71be428d7ab : SUCCESS in 7m 32s\n- grenade-py3 https://zuul.opendev.org/t/openstack/build/90dc2e848f8544ee944857aaa9191283 : SUCCESS in 51m 18s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/51a1b78f34854c03b840914101fb3e41 : SUCCESS in 50m 49s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/f61a45f1df0647fc8c74c35b6779503a : SUCCESS in 8m 38s (non-voting)\n- swift-build-image-py3 https://zuul.opendev.org/t/openstack/build/187267eacfe840cb9d9cf6e8debe0db0 : SUCCESS in 9m 58s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/364b22568a78409b8b3c2760f1b60b0e : FAILURE in 11m 25s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/4c9d644df39445629a44a65ed4fa98ef : FAILURE in 8m 38s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/51cdbe668d9c44af91ca7ece9506bda0 : FAILURE in 11m 14s\n- swift-tox-func https://zuul.opendev.org/t/openstack/build/5c9bfece3f994962b3ee2d587c29929a : FAILURE in 5m 12s\n- swift-tox-func-encryption https://zuul.opendev.org/t/openstack/build/1463993d23fb4327b487143a1dc1202c : FAILURE in 3m 55s\n- swift-tox-func-domain-remap-staticweb https://zuul.opendev.org/t/openstack/build/7f4fb967e429413cbbab403998bf4539 : FAILURE in 4m 30s\n- swift-tox-func-ec https://zuul.opendev.org/t/openstack/build/5f7831c57bc84eba8224cb2541ccac92 : FAILURE in 4m 32s\n- swift-tox-func-s3api https://zuul.opendev.org/t/openstack/build/ed873688d3944cf58cb4abf720b8cc94 : FAILURE in 4m 28s\n- swift-tox-func-py37 https://zuul.opendev.org/t/openstack/build/981a45f58270410482b5c927abdadb21 : FAILURE in 4m 00s\n- swift-tox-func-encryption-py37 https://zuul.opendev.org/t/openstack/build/124939c503f746b1a804a2cd0a6de800 : FAILURE in 4m 24s\n- swift-tox-func-domain-remap-staticweb-py37 https://zuul.opendev.org/t/openstack/build/e725b399968d41628d2087ad2a493114 : FAILURE in 4m 33s\n- swift-tox-func-ec-py37 https://zuul.opendev.org/t/openstack/build/463c5fb1c5c4451c947718b5d24d274e : FAILURE in 4m 36s\n- swift-tox-func-s3api-py37 https://zuul.opendev.org/t/openstack/build/aee844756fee44468ae01d3fd594f835 : FAILURE in 4m 35s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/52bcb369a9c74db28356a26e04090832 : SUCCESS in 17m 10s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/a530347550c048bfb0b4629d98c0eba1 : FAILURE in 30m 48s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/e9e3debefb8a4b918f547ca88606712f : SUCCESS in 32m 39s\n- swift-dsvm-functional-py3 https://zuul.opendev.org/t/openstack/build/6003befadcdc40158c7c3e297f7c457d : SUCCESS in 33m 16s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/7a4d34abe46345eea2e648e663ad91bd : SUCCESS in 29m 16s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/648f198fa7804ed7ad49a0afa752b07b : FAILURE in 12m 38s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/608ea21e7ef54bf59fbc396fea603958 : SUCCESS in 5m 46s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/e931f8fcc8224646af7147a7a64e6496 : SUCCESS in 16m 39s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/7f9ba6741dfb4f9db3a66a03779fd88f : SUCCESS in 58m 38s","accounts_in_message":[],"_revision_number":5},{"id":"dc443f2ec2bc647755d28bcb3e2bb05650068c16","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2020-04-20 07:15:38.000000000","message":"Uploaded patch set 6.","accounts_in_message":[],"_revision_number":6},{"id":"1dca97c9eb13884ae73276937a5216f51b841e57","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2020-04-20 08:39:13.000000000","message":"Patch Set 6: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\n\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/f3ad5379b3b74df29c63430b0ff2975f : SUCCESS in 12m 05s\n- grenade-py3 https://zuul.opendev.org/t/openstack/build/e64b2a857b684da4b3f87b02d3f4e1a8 : SUCCESS in 1h 06m 17s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/5acd5cd682fc4e87ba76274a8b027cd2 : SUCCESS in 54m 10s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/b692b467819843a0b39ffd70f9140ce5 : SUCCESS in 9m 28s (non-voting)\n- swift-build-image-py3 https://zuul.opendev.org/t/openstack/build/54184b20783248dbbd60e2d37c9dc921 : SUCCESS in 10m 20s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/07f0e8f04aa84f4ab6b98e529900949e : FAILURE in 10m 18s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/eb499b50848a49cfad20d995acf0ac69 : FAILURE in 10m 29s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/b5d0c74da69a4511afa9c393f6dff5ac : FAILURE in 11m 27s\n- swift-tox-py38 https://zuul.opendev.org/t/openstack/build/adf1d84d12d74e878a072ea06b0d5a9f : FAILURE in 11m 05s\n- swift-tox-func-py27 https://zuul.opendev.org/t/openstack/build/6b3bee6ae5434189a1eda3666aa3feb6 : FAILURE in 4m 44s\n- swift-tox-func-encryption-py27 https://zuul.opendev.org/t/openstack/build/c49bdc6bc99f4046b960aa88ad173cdd : FAILURE in 5m 00s\n- swift-tox-func-domain-remap-staticweb-py27 https://zuul.opendev.org/t/openstack/build/8e6a434aa0ba424bbe66b990315b267c : FAILURE in 4m 47s\n- swift-tox-func-ec-py27 https://zuul.opendev.org/t/openstack/build/36db5aa6e8074c81a396eda3b643c532 : FAILURE in 5m 28s\n- swift-tox-func-s3api-py27 https://zuul.opendev.org/t/openstack/build/b615291381f0452ea8ecdb1339f19cb1 : FAILURE in 4m 14s\n- swift-tox-func-py37 https://zuul.opendev.org/t/openstack/build/281ebc42d4d54a6984e66d83a79de117 : FAILURE in 4m 26s\n- swift-tox-func-encryption-py37 https://zuul.opendev.org/t/openstack/build/d3fd9ede8c6f4a3a861311996f3dbee2 : FAILURE in 4m 29s\n- swift-tox-func-domain-remap-staticweb-py37 https://zuul.opendev.org/t/openstack/build/6fd7aaca5e8b46109f184f8d6359b1fa : FAILURE in 4m 47s\n- swift-tox-func-ec-py37 https://zuul.opendev.org/t/openstack/build/fc613c37b9934650a3ab1da3dddd5e90 : FAILURE in 4m 37s\n- swift-tox-func-s3api-py37 https://zuul.opendev.org/t/openstack/build/9b812fecf8c24630963660b510d1cad1 : FAILURE in 4m 45s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/a75cae55d5994622a92e5a074b308004 : SUCCESS in 20m 45s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/8e7eb67ba84245bfaeaa46dd08a2c4aa : FAILURE in 41m 03s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/60b5dd2608a54b0c8d21342c07859504 : SUCCESS in 30m 56s\n- swift-dsvm-functional-py3 https://zuul.opendev.org/t/openstack/build/c649eaf017cc4e6dbef80d1fcc3a42c3 : SUCCESS in 28m 55s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/f8e114ed3cdd45ab9398b5bdaff1a07c : SUCCESS in 32m 31s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/6ca799def9dc49e2bf524ce0e5d1d0c3 : FAILURE in 11m 00s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/827d07b39c4a4c2183ff6e63c17342df : SUCCESS in 6m 14s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/8a5911dba6834405a408f88cf1775433 : SUCCESS in 22m 17s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/f75441c3dd1d407b9614b38843699786 : SUCCESS in 1h 08m 29s","accounts_in_message":[],"_revision_number":6},{"id":"2cfd1b75ab2e36190fd9df7ed97f8a77228813f9","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2020-04-21 04:24:32.000000000","message":"Uploaded patch set 7: Patch Set 6 was rebased.","accounts_in_message":[],"_revision_number":7},{"id":"94be3e933bf3e95c99c45a049874b24b460e1b8a","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2020-04-21 05:38:49.000000000","message":"Patch Set 7: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\n\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/41372474ad844859a938d6bd0bc0837e : SUCCESS in 8m 42s\n- grenade-py3 https://zuul.opendev.org/t/openstack/build/1b1a0ba2ae3140b7aa8fc139f9a562db : SUCCESS in 1h 08m 44s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/bd9887e808444cc68c9e0e8d967da835 : SUCCESS in 51m 40s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/d3f877896f8d45ea89972d193b84e6c0 : SUCCESS in 9m 00s (non-voting)\n- swift-build-image-py3 https://zuul.opendev.org/t/openstack/build/7bea408e05924bb0ac2294fdd3d94890 : SUCCESS in 9m 23s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/8492ce94964246d1a4f4a164bf11cdf5 : SUCCESS in 13m 15s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/5f7a5f40304542c79f824150fb97bb36 : SUCCESS in 12m 41s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/34bb3f47608e4a928956a416b18c7689 : SUCCESS in 13m 16s\n- swift-tox-py38 https://zuul.opendev.org/t/openstack/build/d633a2ba302e419aa0719b6f2196c02d : SUCCESS in 13m 19s\n- swift-tox-func-py27 https://zuul.opendev.org/t/openstack/build/4c7c281c664448d7a1fc8a19ae9afd78 : SUCCESS in 10m 04s\n- swift-tox-func-encryption-py27 https://zuul.opendev.org/t/openstack/build/c325c1a08f184f26aa8f2ccf4b7e8945 : SUCCESS in 13m 05s\n- swift-tox-func-domain-remap-staticweb-py27 https://zuul.opendev.org/t/openstack/build/fd1b6a8a59d348f6af67792d2dac48e9 : SUCCESS in 10m 27s\n- swift-tox-func-ec-py27 https://zuul.opendev.org/t/openstack/build/4ab54861b07042229a16622016ca6897 : SUCCESS in 10m 43s\n- swift-tox-func-s3api-py27 https://zuul.opendev.org/t/openstack/build/d818ddd155fd4a66a6ee51083c02733a : SUCCESS in 16m 09s\n- swift-tox-func-py37 https://zuul.opendev.org/t/openstack/build/90149e4fb41a4d68baed708e95e3490e : SUCCESS in 12m 13s\n- swift-tox-func-encryption-py37 https://zuul.opendev.org/t/openstack/build/d82ae40031ac489f8c95c28d25e4311e : SUCCESS in 13m 02s\n- swift-tox-func-domain-remap-staticweb-py37 https://zuul.opendev.org/t/openstack/build/b88c42762d174bdd80bdcac4f0bd18ba : SUCCESS in 10m 42s\n- swift-tox-func-ec-py37 https://zuul.opendev.org/t/openstack/build/a12d608f59b5498e8512b1af9442c275 : SUCCESS in 11m 37s\n- swift-tox-func-s3api-py37 https://zuul.opendev.org/t/openstack/build/26a839a64f6041b6a3dd6fc61a31279e : SUCCESS in 14m 54s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/10442942d70b4762922532b053a63b73 : SUCCESS in 18m 57s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/9cf5daf2c6324f9286f7797f76b7208b : FAILURE in 41m 10s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/7db45955932d4d04b4494af09b831658 : SUCCESS in 30m 05s\n- swift-dsvm-functional-py3 https://zuul.opendev.org/t/openstack/build/604f4aeca70b4a80828122896cf01c20 : SUCCESS in 29m 23s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/fc7db99d31924519bd5e2b7e19e7dae3 : SUCCESS in 31m 29s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/9af4bbb8ad384172a5714a1a9af6b4e6 : SUCCESS in 12m 26s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/c077012b752142aa8711c239b098004b : SUCCESS in 5m 32s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/2faf34e330e74964bf6c2a5862077935 : FAILURE in 21m 22s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/06fa6a4dd28945679dfe14974ab33f8e : SUCCESS in 1h 02m 05s","accounts_in_message":[],"_revision_number":7},{"id":"aba5c008e31e64ff835f593dd2834165d219eda2","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2020-06-04 01:03:26.000000000","message":"Uploaded patch set 8: Patch Set 7 was rebased.","accounts_in_message":[],"_revision_number":8},{"id":"68d9400a18186a5847f90b54468117399e25de1d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2020-06-04 02:10:32.000000000","message":"Patch Set 8: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\n\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/e29adbfae144435c8cf387f8bd8c3f8b : SUCCESS in 7m 33s\n- grenade https://zuul.opendev.org/t/openstack/build/0f8f29564ae14238a2a52741a8d29d0a : SUCCESS in 1h 01m 45s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/ff0d13725e7a44a796c5d0bb94396a09 : FAILURE in 49m 53s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/1c55b552a72f4e849f5bac1e11b0ee91 : SUCCESS in 7m 59s (non-voting)\n- swift-build-image-py3 https://zuul.opendev.org/t/openstack/build/e4f6ddb4de4b4a7fa834dd921f448673 : SUCCESS in 8m 35s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/1c6297020a864db69f447b5cc8bb0894 : SUCCESS in 13m 19s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/2bd00f75800240f2bf9a113dd49bc133 : SUCCESS in 30m 48s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/ec02305041d0416ba3857e17e32b6e22 : SUCCESS in 13m 17s\n- swift-tox-py38 https://zuul.opendev.org/t/openstack/build/bbd994bd2de84010af6e97fb4f3005ff : SUCCESS in 18m 11s\n- swift-tox-func-py27 https://zuul.opendev.org/t/openstack/build/8443589c695d499a8f070c5ec9df0c24 : SUCCESS in 39m 07s\n- swift-tox-func-encryption-py27 https://zuul.opendev.org/t/openstack/build/214fdf537d804be6ba5be4d9bcac60d5 : SUCCESS in 15m 16s\n- swift-tox-func-ec-py27 https://zuul.opendev.org/t/openstack/build/e9d077d4694046b18ecc1a2f46a61441 : SUCCESS in 41m 06s\n- swift-tox-func-py37 https://zuul.opendev.org/t/openstack/build/ea82b2a1385e46aa98b983efcdd34a47 : SUCCESS in 17m 12s\n- swift-tox-func-encryption-py37 https://zuul.opendev.org/t/openstack/build/6efb11bdbf9d4c719ce654756c462ec9 : SUCCESS in 13m 58s\n- swift-tox-func-ec-py37 https://zuul.opendev.org/t/openstack/build/e4d20d40d78e45fdaf94fbb4c5df1304 : TIMED_OUT in 41m 03s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/920dbbc0713a40e8ad3aed868f28b6f4 : SUCCESS in 22m 57s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/c5f20896f62449669b5b67516043dc92 : FAILURE in 42m 09s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/c2f9746f5e774a80a0de98da557208ca : TIMED_OUT in 1h 03m 38s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/557a0dc8fd434daa9d0cf522002ddae7 : SUCCESS in 52m 27s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/d5ea80c7ac234e0ebb6db084ee7023b5 : SUCCESS in 11m 07s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/1ceb4da789c7458597be1136e760938f : SUCCESS in 7m 31s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/cf8fa47387ec43aeb31af409d659d201 : FAILURE in 7m 41s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/977938a2753241269a9700a170d04b78 : SUCCESS in 55m 11s","accounts_in_message":[],"_revision_number":8},{"id":"def0c65a9de6a8b2429a71566aea8ab424e23283","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2020-06-04 06:09:49.000000000","message":"Patch Set 8:\n\n(5 comments)","accounts_in_message":[],"_revision_number":8},{"id":"5cbc26ba185191e441bfaf158576d7bccbfc81c9","tag":"autogenerated:gerrit:abandon","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2024-03-25 04:08:04.000000000","message":"Abandoned\n\nsquashed into parent","accounts_in_message":[],"_revision_number":8},{"id":"7c5ea9a2281be8f06e34a2f75691eb0296c2c861","tag":"autogenerated:gerrit:restore","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2024-04-08 04:46:44.000000000","message":"Restored","accounts_in_message":[],"_revision_number":8},{"id":"952c4904b997dadded2c4e138561fbb8c3b67bfc","tag":"autogenerated:gerrit:abandon","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2024-04-08 04:49:29.000000000","message":"Abandoned\n\nthis is actually being worked on in another patch","accounts_in_message":[],"_revision_number":8}],"current_revision_number":8,"current_revision":"d28d816ab6bf55ac2a12ed24b7d090c4a23c5b2a","revisions":{"326ce0df1922972140dc66d774bbc024ff3b34f4":{"kind":"REWORK","_number":1,"created":"2019-06-26 10:54:47.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/79/667579/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/667579/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/667579/1"}}},"commit":{"parents":[{"commit":"af1f6122944617c443d41baa2e38ee99218e91e8","subject":"Auto-sharding: Initial steps","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/af1f6122944617c443d41baa2e38ee99218e91e8"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-06-26 10:22:47.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-06-26 10:22:47.000000000","tz":600},"subject":"sharding: first attempt at _elect_leader","message":"sharding: first attempt at _elect_leader\n\nThis patch builds up from the last in the chain and implements\nan initial version of the _elect_leader code in the sharder.\n\nIt starts by adding a little more to the ELECT container server verb\nby also returning the db state. Why? Because it means we can be\nsmarter about making a decision. (Though I should push this in the\nprevious patch in the chain).\n\nCurrently the auto-sharding has been implemented to search for x shards,\nadd them, and then next round find the next x. So scanning takes a while.\nWith the OP driven sharding, we scan for _all_ the shard ranges and then\ninsert them. This seems to be working even on large containers.\nI wonder if we should do the same in auto sharding? Scan for them all,\ncheck to see if we are still the leader (the authority on shard ranges)\nand if so insert them.\nBy getting the db state we can make a decison. I.E if one of the other\nprimaries are already in the the SHARDING or SHARDED state then the\nelection should fail as someone else has inserted something (an OP\nor a split brain leader election thing).\n\nWe are being very safe, initially using an ALL primary majority. This\ncould mean that on very large containers by the time the leader has\nfinally scanned all ranges and ready to insert, a rebalance may have\ntaken place and potentially a new leader will need to start again.\nTurns out if we ever get into a state that means the container can\u0027t\nprogress then we have the OP tool to fall back on.\n\nAn ELECT call returns a json response in the form of:\n\n  {\"node\": \u003cindex 0 node dict from ring\u003e,\n   \"part\": \u003cring partition\u003e,\n   \"status\": \u003cdb status\u003e,\n   \"version\": \u003cring version\u003e}\n\nThe current implementation goes something like this:\n - Send an ELECT call to all other primaries and gather responses.\n - Decide if I am the scanner based on some all the responses, including\nmy own. These entail:\n    ~ False if number of responses is \u003c quorum\n    ~ If there is more then one index 0 node (comparing only IP and\n      PORT) then filter the responses to only those with the latest ring\n      version[0].\n    ~ False if any of the responses are in SHARDING or SHARDED state.\n    ~ Make sure at least a quorum of responses are UNSHARDED[1]\n    ~ True if there is still a quorum of responses that think it\u0027s me[2]\n    ~ otherwise return false\n\nThis obviously only works in a scan all ranges scenario, currently the\ncode hasn\u0027t been modified to this, it\u0027s still X by X mode.\n\n[0] - If there is a new ring version it might not effect our primaries,\nso if they all agree it\u0027s me regardless on ring version then great\n(though I haven\u0027t added a return True here yet cause still not\nconvinced).\n\n[1] - At the moment we on ALL quorum, if this ever changes we want a\nquorum of primaries to agree noting that we\u0027d have bombed out if we found\nany in the SHARDING or SHARDED state. Why this then, if we hit a node\nthat doesn\u0027t have the DB (either because it\u0027s new or it\u0027s replicated it\naway already) then the db state will be NOTFOUND. But it still has a\nring so should know who it thinks index 0 should be, so maybe it\u0027s vote\nstill means something.\n\n[2] - This guy is convinced he is index 0, so just confirming, if it\nisn\u0027t then _elect_leader will return false (ie well it isn\u0027t me then).\n\nChange-Id: I7f9b3769406b1d139d75aaca166bdb1355b14b1a\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/326ce0df1922972140dc66d774bbc024ff3b34f4"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/326ce0df1922972140dc66d774bbc024ff3b34f4"}]},"branch":"refs/heads/master"},"fdf2d27865ed0ce5f99659f5354a7ba67874c30e":{"kind":"REWORK","_number":2,"created":"2019-06-28 07:17:52.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/79/667579/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/667579/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/667579/2"}}},"commit":{"parents":[{"commit":"5204e5b8e75c5ce57ee61c6398181af568df19bb","subject":"Auto-sharding: Initial steps","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/5204e5b8e75c5ce57ee61c6398181af568df19bb"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-06-26 10:22:47.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-06-28 07:16:32.000000000","tz":600},"subject":"sharding: first attempt at _elect_leader","message":"sharding: first attempt at _elect_leader\n\nThis patch builds up from the last in the chain and implements\nan initial version of the _elect_leader code in the sharder.\n\nCurrently the auto-sharding has been implemented to search for x shards,\nadd them, and then next round find the next x. So scanning takes a while.\nWith the OP driven sharding, we scan for _all_ the shard ranges and then\ninsert them. This seems to be working even on large containers.\nI wonder if we should do the same in auto sharding? Scan for them all,\ncheck to see if we are still the leader (the authority on shard ranges)\nand if so insert them.\nBy using the db state we can make a decison. I.E if one of the other\nprimaries are already in the the SHARDING or SHARDED state then the\nelection should fail as someone else has inserted something (an OP\nor a split brain leader election thing).\n\nWe are being very safe, initially using an ALL primary majority. This\ncould mean that on very large containers by the time the leader has\nfinally scanned all ranges and ready to insert, a rebalance may have\ntaken place and potentially a new leader will need to start again.\nTurns out if we ever get into a state that means the container can\u0027t\nprogress then we have the OP tool to fall back on.\n\nAn ELECT call returns a json response in the form of:\n\n  {\"node\": \u003cindex 0 node dict from ring\u003e,\n   \"part\": \u003cring partition\u003e,\n   \"status\": \u003cdb status\u003e,\n   \"version\": \u003cring version\u003e}\n\nThe current implementation goes something like this:\n - Send an ELECT call to all other primaries and gather responses.\n - Decide if I am the scanner based on some all the responses, including\nmy own. These entail:\n    ~ False if number of responses is \u003c quorum\n    ~ If there is more then one index 0 node (comparing only IP and\n      PORT) then filter the responses to only those with the latest ring\n      version[0].\n    ~ False if any of the responses are in SHARDING or SHARDED state.\n    ~ Make sure at least a quorum of responses are UNSHARDED[1]\n    ~ True if there is still a quorum of responses that think it\u0027s me[2]\n    ~ otherwise return false\n\nThis obviously only works in a scan all ranges scenario, currently the\ncode hasn\u0027t been modified to this, it\u0027s still X by X mode.\n\n[0] - If there is a new ring version it might not effect our primaries,\nso if they all agree it\u0027s me regardless on ring version then great\n(though I haven\u0027t added a return True here yet cause still not\nconvinced).\n\n[1] - At the moment we on ALL quorum, if this ever changes we want a\nquorum of primaries to agree noting that we\u0027d have bombed out if we found\nany in the SHARDING or SHARDED state. Why this then, if we hit a node\nthat doesn\u0027t have the DB (either because it\u0027s new or it\u0027s replicated it\naway already) then the db state will be NOTFOUND. But it still has a\nring so should know who it thinks index 0 should be, so maybe it\u0027s vote\nstill means something.\n\n[2] - This guy is convinced he is index 0, so just confirming, if it\nisn\u0027t then _elect_leader will return false (ie well it isn\u0027t me then).\n\nChange-Id: I7f9b3769406b1d139d75aaca166bdb1355b14b1a\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/fdf2d27865ed0ce5f99659f5354a7ba67874c30e"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/fdf2d27865ed0ce5f99659f5354a7ba67874c30e"}]},"branch":"refs/heads/master"},"fda1e8fe21320dc1110a849ca38c46971e14edbb":{"kind":"REWORK","_number":3,"created":"2019-07-02 05:18:02.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/79/667579/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/667579/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/667579/3"}}},"commit":{"parents":[{"commit":"5204e5b8e75c5ce57ee61c6398181af568df19bb","subject":"Auto-sharding: Initial steps","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/5204e5b8e75c5ce57ee61c6398181af568df19bb"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-06-26 10:22:47.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-07-02 05:17:07.000000000","tz":600},"subject":"sharding: first attempt at _elect_leader","message":"sharding: first attempt at _elect_leader\n\nThis patch builds up from the last in the chain and implements\nan initial version of the _elect_leader code in the sharder.\n\nCurrently the auto-sharding has been implemented to search for x shards,\nadd them, and then next round find the next x. So scanning takes a while.\nWith the OP driven sharding, we scan for _all_ the shard ranges and then\ninsert them. This seems to be working even on large containers.\nI wonder if we should do the same in auto sharding? Scan for them all,\ncheck to see if we are still the leader (the authority on shard ranges)\nand if so insert them.\nBy using the db state we can make a decison. I.E if one of the other\nprimaries are already in the the SHARDING or SHARDED state then the\nelection should fail as someone else has inserted something (an OP\nor a split brain leader election thing).\n\nWe are being very safe, initially using an ALL primary majority. This\ncould mean that on very large containers by the time the leader has\nfinally scanned all ranges and ready to insert, a rebalance may have\ntaken place and potentially a new leader will need to start again.\nTurns out if we ever get into a state that means the container can\u0027t\nprogress then we have the OP tool to fall back on.\n\nAn ELECT call returns a json response in the form of:\n\n  {\"node\": \u003cindex 0 node dict from ring\u003e,\n   \"part\": \u003cring partition\u003e,\n   \"status\": \u003cdb status\u003e,\n   \"version\": \u003cring version\u003e}\n\nThe current implementation goes something like this:\n - Send an ELECT call to all other primaries and gather responses.\n - Decide if I am the scanner based on some all the responses, including\nmy own. These entail:\n    ~ False if number of responses is \u003c quorum\n    ~ If there is more then one index 0 node (comparing only IP and\n      PORT) then filter the responses to only those with the latest ring\n      version[0].\n    ~ False if any of the responses are in SHARDING or SHARDED state.\n    ~ Make sure at least a quorum of responses are UNSHARDED[1]\n    ~ True if there is still a quorum of responses that think it\u0027s me[2]\n    ~ otherwise return false\n\nThis obviously only works in a scan all ranges scenario, currently the\ncode hasn\u0027t been modified to this, it\u0027s still X by X mode.\n\n[0] - If there is a new ring version it might not effect our primaries,\nso if they all agree it\u0027s me regardless on ring version then great\n(though I haven\u0027t added a return True here yet cause still not\nconvinced).\n\n[1] - At the moment we on ALL quorum, if this ever changes we want a\nquorum of primaries to agree noting that we\u0027d have bombed out if we found\nany in the SHARDING or SHARDED state. Why this then, if we hit a node\nthat doesn\u0027t have the DB (either because it\u0027s new or it\u0027s replicated it\naway already) then the db state will be NOTFOUND. But it still has a\nring so should know who it thinks index 0 should be, so maybe it\u0027s vote\nstill means something.\n\n[2] - This guy is convinced he is index 0, so just confirming, if it\nisn\u0027t then _elect_leader will return false (ie well it isn\u0027t me then).\n\nChange-Id: I7f9b3769406b1d139d75aaca166bdb1355b14b1a\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/fda1e8fe21320dc1110a849ca38c46971e14edbb"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/fda1e8fe21320dc1110a849ca38c46971e14edbb"}]},"branch":"refs/heads/master"},"ff946862499e0369f57fbfa65e2ee4e2f3af2c43":{"kind":"TRIVIAL_REBASE","_number":4,"created":"2019-07-22 09:49:07.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/79/667579/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/667579/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/667579/4"}}},"commit":{"parents":[{"commit":"815e12b9cf6e1937e24adff0c08e3b3f692771d8","subject":"Auto-sharding: Initial steps","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/815e12b9cf6e1937e24adff0c08e3b3f692771d8"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-06-26 10:22:47.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-07-22 09:45:43.000000000","tz":600},"subject":"sharding: first attempt at _elect_leader","message":"sharding: first attempt at _elect_leader\n\nThis patch builds up from the last in the chain and implements\nan initial version of the _elect_leader code in the sharder.\n\nCurrently the auto-sharding has been implemented to search for x shards,\nadd them, and then next round find the next x. So scanning takes a while.\nWith the OP driven sharding, we scan for _all_ the shard ranges and then\ninsert them. This seems to be working even on large containers.\nI wonder if we should do the same in auto sharding? Scan for them all,\ncheck to see if we are still the leader (the authority on shard ranges)\nand if so insert them.\nBy using the db state we can make a decison. I.E if one of the other\nprimaries are already in the the SHARDING or SHARDED state then the\nelection should fail as someone else has inserted something (an OP\nor a split brain leader election thing).\n\nWe are being very safe, initially using an ALL primary majority. This\ncould mean that on very large containers by the time the leader has\nfinally scanned all ranges and ready to insert, a rebalance may have\ntaken place and potentially a new leader will need to start again.\nTurns out if we ever get into a state that means the container can\u0027t\nprogress then we have the OP tool to fall back on.\n\nAn ELECT call returns a json response in the form of:\n\n  {\"node\": \u003cindex 0 node dict from ring\u003e,\n   \"part\": \u003cring partition\u003e,\n   \"status\": \u003cdb status\u003e,\n   \"version\": \u003cring version\u003e}\n\nThe current implementation goes something like this:\n - Send an ELECT call to all other primaries and gather responses.\n - Decide if I am the scanner based on some all the responses, including\nmy own. These entail:\n    ~ False if number of responses is \u003c quorum\n    ~ If there is more then one index 0 node (comparing only IP and\n      PORT) then filter the responses to only those with the latest ring\n      version[0].\n    ~ False if any of the responses are in SHARDING or SHARDED state.\n    ~ Make sure at least a quorum of responses are UNSHARDED[1]\n    ~ True if there is still a quorum of responses that think it\u0027s me[2]\n    ~ otherwise return false\n\nThis obviously only works in a scan all ranges scenario, currently the\ncode hasn\u0027t been modified to this, it\u0027s still X by X mode.\n\n[0] - If there is a new ring version it might not effect our primaries,\nso if they all agree it\u0027s me regardless on ring version then great\n(though I haven\u0027t added a return True here yet cause still not\nconvinced).\n\n[1] - At the moment we on ALL quorum, if this ever changes we want a\nquorum of primaries to agree noting that we\u0027d have bombed out if we found\nany in the SHARDING or SHARDED state. Why this then, if we hit a node\nthat doesn\u0027t have the DB (either because it\u0027s new or it\u0027s replicated it\naway already) then the db state will be NOTFOUND. But it still has a\nring so should know who it thinks index 0 should be, so maybe it\u0027s vote\nstill means something.\n\n[2] - This guy is convinced he is index 0, so just confirming, if it\nisn\u0027t then _elect_leader will return false (ie well it isn\u0027t me then).\n\nChange-Id: I7f9b3769406b1d139d75aaca166bdb1355b14b1a\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/ff946862499e0369f57fbfa65e2ee4e2f3af2c43"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/ff946862499e0369f57fbfa65e2ee4e2f3af2c43"}]},"branch":"refs/heads/master"},"be459b13cdea1f37a7acc3d3458d3f7eabf4d893":{"kind":"REWORK","_number":5,"created":"2019-10-08 03:54:49.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/79/667579/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/667579/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/667579/5"}}},"commit":{"parents":[{"commit":"74632cd8334914e7e8175be34bd88db08ba6d818","subject":"Auto-sharding: Initial steps","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/74632cd8334914e7e8175be34bd88db08ba6d818"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-06-26 10:22:47.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-10-08 03:53:44.000000000","tz":660},"subject":"sharding: first attempt at _elect_leader","message":"sharding: first attempt at _elect_leader\n\nThis patch builds up from the last in the chain and implements\nan initial version of the _elect_leader code in the sharder.\n\nCurrently the auto-sharding has been implemented to search for x shards,\nadd them, and then next round find the next x. So scanning takes a while.\nWith the OP driven sharding, we scan for _all_ the shard ranges and then\ninsert them. This seems to be working even on large containers.\nI wonder if we should do the same in auto sharding? Scan for them all,\ncheck to see if we are still the leader (the authority on shard ranges)\nand if so insert them.\nBy using the db state we can make a decison. I.E if one of the other\nprimaries are already in the the SHARDING or SHARDED state then the\nelection should fail as someone else has inserted something (an OP\nor a split brain leader election thing).\n\nWe are being very safe, initially using an ALL primary majority. This\ncould mean that on very large containers by the time the leader has\nfinally scanned all ranges and ready to insert, a rebalance may have\ntaken place and potentially a new leader will need to start again.\nTurns out if we ever get into a state that means the container can\u0027t\nprogress then we have the OP tool to fall back on.\n\nAn ELECT call returns a json response in the form of:\n\n  {\"node\": \u003cindex 0 node dict from ring\u003e,\n   \"part\": \u003cring partition\u003e,\n   \"status\": \u003cdb status\u003e,\n   \"version\": \u003cring version\u003e}\n\nThe current implementation goes something like this:\n - Send an ELECT call to all other primaries and gather responses.\n - Decide if I am the scanner based on some all the responses, including\nmy own. These entail:\n    ~ False if number of responses is \u003c quorum\n    ~ If there is more then one index 0 node (comparing only IP and\n      PORT) then filter the responses to only those with the latest ring\n      version[0].\n    ~ False if any of the responses are in SHARDING or SHARDED state.\n    ~ Make sure at least a quorum of responses are UNSHARDED[1]\n    ~ True if there is still a quorum of responses that think it\u0027s me[2]\n    ~ otherwise return false\n\nThis obviously only works in a scan all ranges scenario, currently the\ncode hasn\u0027t been modified to this, it\u0027s still X by X mode.\n\n[0] - If there is a new ring version it might not effect our primaries,\nso if they all agree it\u0027s me regardless on ring version then great\n(though I haven\u0027t added a return True here yet cause still not\nconvinced).\n\n[1] - At the moment we on ALL quorum, if this ever changes we want a\nquorum of primaries to agree noting that we\u0027d have bombed out if we found\nany in the SHARDING or SHARDED state. Why this then, if we hit a node\nthat doesn\u0027t have the DB (either because it\u0027s new or it\u0027s replicated it\naway already) then the db state will be NOTFOUND. But it still has a\nring so should know who it thinks index 0 should be, so maybe it\u0027s vote\nstill means something.\n\n[2] - This guy is convinced he is index 0, so just confirming, if it\nisn\u0027t then _elect_leader will return false (ie well it isn\u0027t me then).\n\nChange-Id: I7f9b3769406b1d139d75aaca166bdb1355b14b1a\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/be459b13cdea1f37a7acc3d3458d3f7eabf4d893"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/be459b13cdea1f37a7acc3d3458d3f7eabf4d893"}]},"branch":"refs/heads/master"},"f50c6933cc61b2ec0c1a7f5ce85f0d97e33aeb38":{"kind":"REWORK","_number":6,"created":"2020-04-20 07:15:38.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/79/667579/6","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/667579/6","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/667579/6"}}},"commit":{"parents":[{"commit":"6f4cc87b9d645b1c050e684964f48c744dd87a61","subject":"Auto-sharding: Initial steps","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6f4cc87b9d645b1c050e684964f48c744dd87a61"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-06-26 10:22:47.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2020-04-20 07:19:30.000000000","tz":0},"subject":"sharding: first attempt at _elect_leader","message":"sharding: first attempt at _elect_leader\n\nThis patch builds up from the last in the chain and implements\nan initial version of the _elect_leader code in the sharder.\n\nCurrently the auto-sharding has been implemented to search for x shards,\nadd them, and then next round find the next x. So scanning takes a while.\nWith the OP driven sharding, we scan for _all_ the shard ranges and then\ninsert them. This seems to be working even on large containers.\nI wonder if we should do the same in auto sharding? Scan for them all,\ncheck to see if we are still the leader (the authority on shard ranges)\nand if so insert them.\nBy using the db state we can make a decison. I.E if one of the other\nprimaries are already in the the SHARDING or SHARDED state then the\nelection should fail as someone else has inserted something (an OP\nor a split brain leader election thing).\n\nWe are being very safe, initially using an ALL primary majority. This\ncould mean that on very large containers by the time the leader has\nfinally scanned all ranges and ready to insert, a rebalance may have\ntaken place and potentially a new leader will need to start again.\nTurns out if we ever get into a state that means the container can\u0027t\nprogress then we have the OP tool to fall back on.\n\nAn ELECT call returns a json response in the form of:\n\n  {\"node\": \u003cindex 0 node dict from ring\u003e,\n   \"part\": \u003cring partition\u003e,\n   \"status\": \u003cdb status\u003e,\n   \"version\": \u003cring version\u003e}\n\nThe current implementation goes something like this:\n - Send an ELECT call to all other primaries and gather responses.\n - Decide if I am the scanner based on some all the responses, including\nmy own. These entail:\n    ~ False if number of responses is \u003c quorum\n    ~ If there is more then one index 0 node (comparing only IP and\n      PORT) then filter the responses to only those with the latest ring\n      version[0].\n    ~ False if any of the responses are in SHARDING or SHARDED state.\n    ~ Make sure at least a quorum of responses are UNSHARDED[1]\n    ~ True if there is still a quorum of responses that think it\u0027s me[2]\n    ~ otherwise return false\n\nThis obviously only works in a scan all ranges scenario, currently the\ncode hasn\u0027t been modified to this, it\u0027s still X by X mode.\n\n[0] - If there is a new ring version it might not effect our primaries,\nso if they all agree it\u0027s me regardless on ring version then great\n(though I haven\u0027t added a return True here yet cause still not\nconvinced).\n\n[1] - At the moment we on ALL quorum, if this ever changes we want a\nquorum of primaries to agree noting that we\u0027d have bombed out if we found\nany in the SHARDING or SHARDED state. Why this then, if we hit a node\nthat doesn\u0027t have the DB (either because it\u0027s new or it\u0027s replicated it\naway already) then the db state will be NOTFOUND. But it still has a\nring so should know who it thinks index 0 should be, so maybe it\u0027s vote\nstill means something.\n\n[2] - This guy is convinced he is index 0, so just confirming, if it\nisn\u0027t then _elect_leader will return false (ie well it isn\u0027t me then).\n\nChange-Id: I7f9b3769406b1d139d75aaca166bdb1355b14b1a\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/f50c6933cc61b2ec0c1a7f5ce85f0d97e33aeb38"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/f50c6933cc61b2ec0c1a7f5ce85f0d97e33aeb38"}]},"branch":"refs/heads/master"},"455b836fe96ce27c75ca620fd09cdd4be30f378c":{"kind":"TRIVIAL_REBASE","_number":7,"created":"2020-04-21 04:24:32.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/79/667579/7","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/667579/7","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/7 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/7 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/7 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/667579/7"}}},"commit":{"parents":[{"commit":"e4a2abb2aa191142b5c69e25b9db2a0b62e9872c","subject":"Auto-sharding: Initial steps","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e4a2abb2aa191142b5c69e25b9db2a0b62e9872c"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-06-26 10:22:47.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2020-04-21 03:26:33.000000000","tz":0},"subject":"sharding: first attempt at _elect_leader","message":"sharding: first attempt at _elect_leader\n\nThis patch builds up from the last in the chain and implements\nan initial version of the _elect_leader code in the sharder.\n\nCurrently the auto-sharding has been implemented to search for x shards,\nadd them, and then next round find the next x. So scanning takes a while.\nWith the OP driven sharding, we scan for _all_ the shard ranges and then\ninsert them. This seems to be working even on large containers.\nI wonder if we should do the same in auto sharding? Scan for them all,\ncheck to see if we are still the leader (the authority on shard ranges)\nand if so insert them.\nBy using the db state we can make a decison. I.E if one of the other\nprimaries are already in the the SHARDING or SHARDED state then the\nelection should fail as someone else has inserted something (an OP\nor a split brain leader election thing).\n\nWe are being very safe, initially using an ALL primary majority. This\ncould mean that on very large containers by the time the leader has\nfinally scanned all ranges and ready to insert, a rebalance may have\ntaken place and potentially a new leader will need to start again.\nTurns out if we ever get into a state that means the container can\u0027t\nprogress then we have the OP tool to fall back on.\n\nAn ELECT call returns a json response in the form of:\n\n  {\"node\": \u003cindex 0 node dict from ring\u003e,\n   \"part\": \u003cring partition\u003e,\n   \"status\": \u003cdb status\u003e,\n   \"version\": \u003cring version\u003e}\n\nThe current implementation goes something like this:\n - Send an ELECT call to all other primaries and gather responses.\n - Decide if I am the scanner based on some all the responses, including\nmy own. These entail:\n    ~ False if number of responses is \u003c quorum\n    ~ If there is more then one index 0 node (comparing only IP and\n      PORT) then filter the responses to only those with the latest ring\n      version[0].\n    ~ False if any of the responses are in SHARDING or SHARDED state.\n    ~ Make sure at least a quorum of responses are UNSHARDED[1]\n    ~ True if there is still a quorum of responses that think it\u0027s me[2]\n    ~ otherwise return false\n\nThis obviously only works in a scan all ranges scenario, currently the\ncode hasn\u0027t been modified to this, it\u0027s still X by X mode.\n\n[0] - If there is a new ring version it might not effect our primaries,\nso if they all agree it\u0027s me regardless on ring version then great\n(though I haven\u0027t added a return True here yet cause still not\nconvinced).\n\n[1] - At the moment we on ALL quorum, if this ever changes we want a\nquorum of primaries to agree noting that we\u0027d have bombed out if we found\nany in the SHARDING or SHARDED state. Why this then, if we hit a node\nthat doesn\u0027t have the DB (either because it\u0027s new or it\u0027s replicated it\naway already) then the db state will be NOTFOUND. But it still has a\nring so should know who it thinks index 0 should be, so maybe it\u0027s vote\nstill means something.\n\n[2] - This guy is convinced he is index 0, so just confirming, if it\nisn\u0027t then _elect_leader will return false (ie well it isn\u0027t me then).\n\nChange-Id: I7f9b3769406b1d139d75aaca166bdb1355b14b1a\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/455b836fe96ce27c75ca620fd09cdd4be30f378c"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/455b836fe96ce27c75ca620fd09cdd4be30f378c"}]},"branch":"refs/heads/master"},"d28d816ab6bf55ac2a12ed24b7d090c4a23c5b2a":{"kind":"TRIVIAL_REBASE","_number":8,"created":"2020-06-04 01:03:26.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/79/667579/8","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/667579/8","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/8 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/8 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/667579/8 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/667579/8"}}},"commit":{"parents":[{"commit":"a99faba07978e698ff6523bcb8f87088cdfb74c0","subject":"Auto-sharding: Initial steps","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/a99faba07978e698ff6523bcb8f87088cdfb74c0"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2019-06-26 10:22:47.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2020-06-04 01:02:31.000000000","tz":0},"subject":"sharding: first attempt at _elect_leader","message":"sharding: first attempt at _elect_leader\n\nThis patch builds up from the last in the chain and implements\nan initial version of the _elect_leader code in the sharder.\n\nCurrently the auto-sharding has been implemented to search for x shards,\nadd them, and then next round find the next x. So scanning takes a while.\nWith the OP driven sharding, we scan for _all_ the shard ranges and then\ninsert them. This seems to be working even on large containers.\nI wonder if we should do the same in auto sharding? Scan for them all,\ncheck to see if we are still the leader (the authority on shard ranges)\nand if so insert them.\nBy using the db state we can make a decison. I.E if one of the other\nprimaries are already in the the SHARDING or SHARDED state then the\nelection should fail as someone else has inserted something (an OP\nor a split brain leader election thing).\n\nWe are being very safe, initially using an ALL primary majority. This\ncould mean that on very large containers by the time the leader has\nfinally scanned all ranges and ready to insert, a rebalance may have\ntaken place and potentially a new leader will need to start again.\nTurns out if we ever get into a state that means the container can\u0027t\nprogress then we have the OP tool to fall back on.\n\nAn ELECT call returns a json response in the form of:\n\n  {\"node\": \u003cindex 0 node dict from ring\u003e,\n   \"part\": \u003cring partition\u003e,\n   \"status\": \u003cdb status\u003e,\n   \"version\": \u003cring version\u003e}\n\nThe current implementation goes something like this:\n - Send an ELECT call to all other primaries and gather responses.\n - Decide if I am the scanner based on some all the responses, including\nmy own. These entail:\n    ~ False if number of responses is \u003c quorum\n    ~ If there is more then one index 0 node (comparing only IP and\n      PORT) then filter the responses to only those with the latest ring\n      version[0].\n    ~ False if any of the responses are in SHARDING or SHARDED state.\n    ~ Make sure at least a quorum of responses are UNSHARDED[1]\n    ~ True if there is still a quorum of responses that think it\u0027s me[2]\n    ~ otherwise return false\n\nThis obviously only works in a scan all ranges scenario, currently the\ncode hasn\u0027t been modified to this, it\u0027s still X by X mode.\n\n[0] - If there is a new ring version it might not effect our primaries,\nso if they all agree it\u0027s me regardless on ring version then great\n(though I haven\u0027t added a return True here yet cause still not\nconvinced).\n\n[1] - At the moment we on ALL quorum, if this ever changes we want a\nquorum of primaries to agree noting that we\u0027d have bombed out if we found\nany in the SHARDING or SHARDED state. Why this then, if we hit a node\nthat doesn\u0027t have the DB (either because it\u0027s new or it\u0027s replicated it\naway already) then the db state will be NOTFOUND. But it still has a\nring so should know who it thinks index 0 should be, so maybe it\u0027s vote\nstill means something.\n\n[2] - This guy is convinced he is index 0, so just confirming, if it\nisn\u0027t then _elect_leader will return false (ie well it isn\u0027t me then).\n\nChange-Id: I7f9b3769406b1d139d75aaca166bdb1355b14b1a\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/d28d816ab6bf55ac2a12ed24b7d090c4a23c5b2a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/d28d816ab6bf55ac2a12ed24b7d090c4a23c5b2a"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{}}}]}
