)]}'
{"id":"openstack%2Ftooz~1007408","triplet_id":"openstack%2Ftooz~master~I79eb9ae75d489e55fc12c3b2c550d21b48d6c4b6","project":"openstack/tooz","branch":"master","attention_set":{"10273":{"account":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"last_update":"2026-10-12 03:53:18.000000000","reason":"\u003cGERRIT_ACCOUNT_9816\u003e replied on the change","reason_account":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"}}},"removed_from_attention_set":{"9816":{"account":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"last_update":"2026-10-12 03:53:18.000000000","reason":"\u003cGERRIT_ACCOUNT_9816\u003e replied on the change","reason_account":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"}}},"hashtags":[],"change_id":"I79eb9ae75d489e55fc12c3b2c550d21b48d6c4b6","subject":"redis: Read groups without WATCH","status":"NEW","created":"2026-09-25 05:23:50.000000000","updated":"2026-10-12 03:53:18.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":5,"unresolved_comment_count":1,"has_review_started":true,"meta_rev_id":"00b27f44b31afefc6d5951fa8d584ed61f4527ba","_number":1007408,"virtual_id_number":1007408,"owner":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-10-11 19:47:34.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"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":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"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":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Backport-Candidate":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do Not Backport","-1":"Not A Backport Candidate"," 0":"Backport Review Needed","+1":"Proposed Backport","+2":"Should Backport"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"CC":[{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-09-25 07:04:13.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":"2026-10-11 18:18:52.000000000","updated_by":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"reviewer":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"state":"CC"}],"messages":[{"id":"23a061076887c9e417ca04623263ac09f66e7c92","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-09-25 05:23:50.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"5712d59885b45313f34c6ec94aedd8ba564de906","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-25 07:04:13.000000000","message":"Patch Set 1: 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\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/bd307d122e704b4fa34ff75aad3c99d4\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/21838a4414ca4e598a94fb16bd207888 : SUCCESS in 1h 34m 58s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/ab55f7216d8c479dacdd003466a66ecd : SUCCESS in 5m 00s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/466dbee4a50a46f4957f99282453d82f : SUCCESS in 5m 28s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/81458ee5e7bf454cb7caf442348c2dd7 : SUCCESS in 4m 27s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/7199716956e14819ae2b8abfc12a6897 : SUCCESS in 6m 54s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/3b5083f2b2a0460d90fa5dacf08183e2 : SUCCESS in 8m 05s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/37c94dc212584525adc0a3c8c553dd1e : SUCCESS in 4m 33s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/f5b5adc8e3f8471a8c8880d999f161f1 : SUCCESS in 4m 01s\n- tooz-tox-examples https://zuul.opendev.org/t/openstack/build/0e9e12741a804817a617dca9d356cb6b : SUCCESS in 5m 25s\n- tooz-tox-py311-etcd3gw https://zuul.opendev.org/t/openstack/build/8c6771d050e545e79c99c2e103db7124 : FAILURE in 6m 06s\n- tooz-tox-py314-etcd3gw https://zuul.opendev.org/t/openstack/build/7801c273d2a746b0bf5f6fd3a6c38983 : SUCCESS in 7m 53s\n- tooz-tox-py311-zookeeper https://zuul.opendev.org/t/openstack/build/ad615a9c80ec4bf3a858de27e0f03e1f : SUCCESS in 5m 23s\n- tooz-tox-py314-zookeeper https://zuul.opendev.org/t/openstack/build/57ede773a6654868b3d9293573021cf3 : SUCCESS in 7m 12s\n- tooz-tox-py311-redis https://zuul.opendev.org/t/openstack/build/8131a8da4242474395d9f3f7cf1d2825 : SUCCESS in 5m 51s\n- tooz-tox-py314-redis https://zuul.opendev.org/t/openstack/build/ec93a25625f74d4d8ce87ba3f26f00e3 : SUCCESS in 8m 26s\n- tooz-tox-py311-sentinel https://zuul.opendev.org/t/openstack/build/19d20b695db94dd6aad6fc396a3e791c : SUCCESS in 6m 04s\n- tooz-tox-py314-sentinel https://zuul.opendev.org/t/openstack/build/6be1bf021422497b9af748b9f058d985 : SUCCESS in 8m 15s\n- tooz-tox-py311-memcached https://zuul.opendev.org/t/openstack/build/bc357217e67e4a38937fdceaade1e3ad : SUCCESS in 4m 46s\n- tooz-tox-py314-memcached https://zuul.opendev.org/t/openstack/build/3b69e0b9fb8a44ddb280085f83114161 : SUCCESS in 7m 08s\n- tooz-tox-py311-postgresql https://zuul.opendev.org/t/openstack/build/fdd4091634894648a3ab2d92ba60499e : SUCCESS in 4m 26s\n- tooz-tox-py314-postgresql https://zuul.opendev.org/t/openstack/build/98a753e7ec674190a2a39d09b0622f70 : SUCCESS in 6m 55s\n- tooz-tox-py311-mysql https://zuul.opendev.org/t/openstack/build/336b4918ee504e0fbebf2bff59c1f4ca : SUCCESS in 6m 14s\n- tooz-tox-py314-mysql https://zuul.opendev.org/t/openstack/build/884d5aa7609140f4b53121ae1406854c : SUCCESS in 7m 30s","accounts_in_message":[],"_revision_number":1},{"id":"04f97343c26a90f552d5f20fdbb3205c85ffd95e","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-09-25 18:20:19.000000000","message":"Patch Set 1:\n\nrecheck","accounts_in_message":[],"_revision_number":1},{"id":"e63e91f238d8ccf5fdf8e801ccd2c8ed4daa2e07","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-25 20:06:08.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/d8faade9515843d6bb2a98c395492dcb\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/df892d0862714680bf04cf0deb7f0506 : SUCCESS in 1h 40m 09s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/5e8a21f13ce045aa94a461b2e7f3672e : SUCCESS in 5m 30s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/6f7bae8fe88f4023bf5058769e44c186 : SUCCESS in 3m 37s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/fc63fbc2f973405e986b5877094731e6 : SUCCESS in 4m 49s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/1c26a82c62f6497a8f99c2675a5f75a1 : SUCCESS in 7m 20s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/e0535935f97d4d96a3dc4eec87967d67 : SUCCESS in 7m 38s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/b9e7e4df656d4c86ba2443d1caf77662 : SUCCESS in 6m 05s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/3cb09e40ae854ff680b9892aa7062b29 : SUCCESS in 2m 59s\n- tooz-tox-examples https://zuul.opendev.org/t/openstack/build/288385efca8548a0a4b48c335b6ba9f0 : SUCCESS in 4m 31s\n- tooz-tox-py311-etcd3gw https://zuul.opendev.org/t/openstack/build/1623d388fb014e2cb97d5e5ac8195f90 : SUCCESS in 5m 29s\n- tooz-tox-py314-etcd3gw https://zuul.opendev.org/t/openstack/build/f18fb8b6dd6d4e87ba9fb91589f39557 : SUCCESS in 7m 34s\n- tooz-tox-py311-zookeeper https://zuul.opendev.org/t/openstack/build/456f23d61e194fac926c7c53d3f0a826 : SUCCESS in 4m 50s\n- tooz-tox-py314-zookeeper https://zuul.opendev.org/t/openstack/build/78a1c8a640da418b81155dbb38fbd239 : SUCCESS in 5m 42s\n- tooz-tox-py311-redis https://zuul.opendev.org/t/openstack/build/916249027314489fb1409d82553ac7bd : SUCCESS in 6m 01s\n- tooz-tox-py314-redis https://zuul.opendev.org/t/openstack/build/258d84cea5ff45f4b95d9a36bf727523 : SUCCESS in 8m 51s\n- tooz-tox-py311-sentinel https://zuul.opendev.org/t/openstack/build/61ae4a73efb5472d83fb26a69165384a : SUCCESS in 5m 19s\n- tooz-tox-py314-sentinel https://zuul.opendev.org/t/openstack/build/7bd2c76a2dd74e48bb080fb6b2bee1a9 : SUCCESS in 6m 45s\n- tooz-tox-py311-memcached https://zuul.opendev.org/t/openstack/build/290dfc94a3cd4ab89dc78d2af13a633a : SUCCESS in 3m 26s\n- tooz-tox-py314-memcached https://zuul.opendev.org/t/openstack/build/ae6777d8052343128477c1b258e0e032 : SUCCESS in 7m 52s\n- tooz-tox-py311-postgresql https://zuul.opendev.org/t/openstack/build/b47fe1a686474fb2ba091dd588d5dd2a : SUCCESS in 6m 58s\n- tooz-tox-py314-postgresql https://zuul.opendev.org/t/openstack/build/aea04e5bae7646679d45edb7aeda1183 : SUCCESS in 5m 10s\n- tooz-tox-py311-mysql https://zuul.opendev.org/t/openstack/build/502796e1c0e547da9d52fa470a043693 : SUCCESS in 5m 02s\n- tooz-tox-py314-mysql https://zuul.opendev.org/t/openstack/build/8f3847c7bf6840a2be12417f4360ddbc : SUCCESS in 7m 49s","accounts_in_message":[],"_revision_number":1},{"id":"c5cdfb1d863ec40789cbad29807f38525b98c3d3","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-10-11 07:59:45.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"7a3aa1e5992f3f3171a4149103a6bfb03c6546dd","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-11 09:46:09.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/0d63c717a3834ce2a1e8fd41cc5ec023\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/07f0e5463f7f416db48bf90b50274eec : SUCCESS in 1h 39m 53s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/892a60252ae944a59b0f289263729fc6 : SUCCESS in 4m 52s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/d827aa938a28457cb441cba16f72c524 : SUCCESS in 4m 25s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/29caad8eb3d541bcb8f4ac9d701aab08 : SUCCESS in 4m 02s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/b960f48517684553bae1a53e37bdd662 : SUCCESS in 6m 55s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/3bd1041b6cd94dd699eae7e8e843cdd7 : SUCCESS in 11m 43s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/26dd95248829444f8859a7f1356d975c : SUCCESS in 3m 49s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/17979f0fba6d416f8e78b7fd341fad1d : SUCCESS in 3m 14s\n- tooz-tox-examples https://zuul.opendev.org/t/openstack/build/a541d6f80e8d4260bdde6816e544c195 : SUCCESS in 4m 12s\n- tooz-tox-py311-etcd3gw https://zuul.opendev.org/t/openstack/build/6b5bfcbd4a384d18b82d5e5c82e7126c : SUCCESS in 3m 51s\n- tooz-tox-py314-etcd3gw https://zuul.opendev.org/t/openstack/build/5d6547691e0b4cd69e40fc3e5dc9fe86 : SUCCESS in 8m 03s\n- tooz-tox-py311-zookeeper https://zuul.opendev.org/t/openstack/build/15c86834b06f4707aeca90b13302ac5c : SUCCESS in 4m 33s\n- tooz-tox-py314-zookeeper https://zuul.opendev.org/t/openstack/build/7b1a7ed9a76245ce86e56c8b859f7f91 : SUCCESS in 5m 16s\n- tooz-tox-py311-redis https://zuul.opendev.org/t/openstack/build/09ca63e94a3b4cc180ae2b373516a111 : SUCCESS in 5m 18s\n- tooz-tox-py314-redis https://zuul.opendev.org/t/openstack/build/90c07d0db61a45e086c2255179298a83 : SUCCESS in 10m 53s\n- tooz-tox-py311-sentinel https://zuul.opendev.org/t/openstack/build/60cf8e4db51846acabf5ab93ae76fca5 : SUCCESS in 4m 49s\n- tooz-tox-py314-sentinel https://zuul.opendev.org/t/openstack/build/7f54da12f0214ae6bb6b3ddf1b7d7533 : SUCCESS in 7m 33s\n- tooz-tox-py311-memcached https://zuul.opendev.org/t/openstack/build/2b4c6a930dae462ba87d4e38b7ac2fff : SUCCESS in 4m 02s\n- tooz-tox-py314-memcached https://zuul.opendev.org/t/openstack/build/5e381d0624df4dcca201ee4c0f411f85 : SUCCESS in 4m 55s\n- tooz-tox-py311-postgresql https://zuul.opendev.org/t/openstack/build/fdd583297a9b4a16b93b9236ffe0cf19 : SUCCESS in 7m 57s\n- tooz-tox-py314-postgresql https://zuul.opendev.org/t/openstack/build/ab892602a99e4dcca7bf0ce336f06fae : SUCCESS in 6m 45s\n- tooz-tox-py311-mysql https://zuul.opendev.org/t/openstack/build/4150c60f7b114fe2866634e6f07c4ec0 : SUCCESS in 7m 18s\n- tooz-tox-py314-mysql https://zuul.opendev.org/t/openstack/build/9fd19f8febc140b998eeb2a3e2b51eeb : SUCCESS in 7m 38s","accounts_in_message":[],"_revision_number":2},{"id":"1ebb92d9d9552a30998e12e1c313d41fa56eea4f","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-10-11 17:47:21.000000000","message":"Uploaded patch set 3: Patch Set 2 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":3},{"id":"ac13eb6cf85518cc10a6051d7e674a14f1816216","author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"date":"2026-10-11 18:18:52.000000000","message":"Patch Set 3:\n\n(2 comments)","accounts_in_message":[],"_revision_number":3},{"id":"f4b33095c56b994b105d08ead9b6837c6c0223dc","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-11 18:30:17.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/f854f677ba9d46989bb3f109ca20a1d4\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/2f0a3ead98a84e2bb0e81ae79bbc8795 : SUCCESS in 41m 21s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/7942a68e64584efb8003a1947ba2359e : SUCCESS in 4m 51s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/7760f448523f40f6985efa1ffa6008e6 : SUCCESS in 3m 07s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/24b653097ada4beab179dbf32832e758 : SUCCESS in 4m 11s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/8a28eeb3b79c4f6dabe0b19675a4770d : SUCCESS in 6m 19s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/81535d5cbd0946ccbc5c0e91a161ae8e : SUCCESS in 6m 52s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/62e03187f7de49748bb4669cef4cfb37 : SUCCESS in 2m 56s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/e8ea7de1fdd64c87a68d7f4200466a3c : SUCCESS in 2m 51s\n- tooz-tox-examples https://zuul.opendev.org/t/openstack/build/5cd067522fe343d1843c1731b708daf1 : SUCCESS in 3m 01s\n- tooz-tox-py311-etcd3gw https://zuul.opendev.org/t/openstack/build/575b10f15e704ef088c31744a68d9b06 : SUCCESS in 3m 55s\n- tooz-tox-py314-etcd3gw https://zuul.opendev.org/t/openstack/build/871f9d5ffa2c4ed487bca97d55967a8b : SUCCESS in 7m 02s\n- tooz-tox-py311-zookeeper https://zuul.opendev.org/t/openstack/build/ca73961e20b8401382cfb276435d0ecb : SUCCESS in 4m 26s\n- tooz-tox-py314-zookeeper https://zuul.opendev.org/t/openstack/build/67e783da86dc4cd0ad45e9655269e4d7 : SUCCESS in 8m 54s\n- tooz-tox-py311-redis https://zuul.opendev.org/t/openstack/build/85986a1f8893405cb880980606616130 : SUCCESS in 5m 19s\n- tooz-tox-py314-redis https://zuul.opendev.org/t/openstack/build/d5455cbce50b4c5798519369f75d562e : SUCCESS in 6m 10s\n- tooz-tox-py311-sentinel https://zuul.opendev.org/t/openstack/build/8be3799731a44f4da4d13201d3a54015 : SUCCESS in 4m 58s\n- tooz-tox-py314-sentinel https://zuul.opendev.org/t/openstack/build/4cdb0ee4eb774065a5ee24fffddae7f0 : SUCCESS in 8m 17s\n- tooz-tox-py311-memcached https://zuul.opendev.org/t/openstack/build/3b464cc4c6b5417fa0438312d6ab5146 : SUCCESS in 4m 35s\n- tooz-tox-py314-memcached https://zuul.opendev.org/t/openstack/build/ebf58f5be29440618d98462d5a562ff1 : SUCCESS in 7m 07s\n- tooz-tox-py311-postgresql https://zuul.opendev.org/t/openstack/build/ef78a67a6ee9410aa459e0f90876edc3 : SUCCESS in 4m 26s\n- tooz-tox-py314-postgresql https://zuul.opendev.org/t/openstack/build/661ee6f81e3e4df1b24f1a2ccd1da83c : SUCCESS in 6m 14s\n- tooz-tox-py311-mysql https://zuul.opendev.org/t/openstack/build/42636c07a57943c3bff1a23ddefcfa23 : SUCCESS in 6m 53s\n- tooz-tox-py314-mysql https://zuul.opendev.org/t/openstack/build/73ff31af31ba4e10bfa7634dbc025a99 : SUCCESS in 7m 15s","accounts_in_message":[],"_revision_number":3},{"id":"416aaf799849be9a83edde96de06fd4778c45439","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-10-11 18:43:17.000000000","message":"Uploaded patch set 4.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":4},{"id":"5ca6a933c2b545d549822167912280b76df1b18e","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-11 19:47:34.000000000","message":"Patch Set 4: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/9b8ff77984804aa9be276c36a65f3269\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/597d776517d54a6fa51160cbcc6192d8 : SUCCESS in 1h 02m 13s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/2dd6e5ef9fd0472cafdbb55efb39edad : SUCCESS in 3m 13s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/82097c343c8b439e89cef060c34419d0 : SUCCESS in 5m 37s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/db2e79d08f8a4a00a3f13f100f8b2711 : SUCCESS in 4m 33s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/37903027693d44a596add9699f9d4487 : SUCCESS in 6m 58s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/3e275978c87f48b48636b326c2aa40d0 : SUCCESS in 8m 56s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/af444b25b650483d847e831caaf96aa8 : SUCCESS in 3m 32s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/901004ca67ec4287b96f585e181a5727 : SUCCESS in 2m 54s\n- tooz-tox-examples https://zuul.opendev.org/t/openstack/build/a293243b650348f5ac0bc1eee4144dde : SUCCESS in 2m 22s\n- tooz-tox-py311-etcd3gw https://zuul.opendev.org/t/openstack/build/1baed87412244bb2b0d89ad4d0a9dc6d : SUCCESS in 4m 47s\n- tooz-tox-py314-etcd3gw https://zuul.opendev.org/t/openstack/build/5d5c0ee2d4d044ee98a6788ac41e7818 : SUCCESS in 6m 55s\n- tooz-tox-py311-zookeeper https://zuul.opendev.org/t/openstack/build/51301819bd5a4305be3283952f9db762 : SUCCESS in 5m 16s\n- tooz-tox-py314-zookeeper https://zuul.opendev.org/t/openstack/build/a9bcfde4083145e18d5b9e3024b9ed44 : SUCCESS in 4m 19s\n- tooz-tox-py311-redis https://zuul.opendev.org/t/openstack/build/5e7b4fea9e93425c882d7de25d745bde : SUCCESS in 5m 08s\n- tooz-tox-py314-redis https://zuul.opendev.org/t/openstack/build/41d5980af7a34ba69faaa54f397a94d9 : SUCCESS in 7m 09s\n- tooz-tox-py311-sentinel https://zuul.opendev.org/t/openstack/build/ab5daa0af1e745598f42e75e5c184e15 : SUCCESS in 4m 29s\n- tooz-tox-py314-sentinel https://zuul.opendev.org/t/openstack/build/0085db3dbbfd462a9610be2ab295da01 : SUCCESS in 5m 49s\n- tooz-tox-py311-memcached https://zuul.opendev.org/t/openstack/build/d74bdc0abc2b4068918cfa09161efb89 : SUCCESS in 3m 09s\n- tooz-tox-py314-memcached https://zuul.opendev.org/t/openstack/build/ee903d265349409b912b19d36b0b1e4a : SUCCESS in 8m 52s\n- tooz-tox-py311-postgresql https://zuul.opendev.org/t/openstack/build/77e83c4bcacc44c2a88b402d820a7614 : SUCCESS in 5m 41s\n- tooz-tox-py314-postgresql https://zuul.opendev.org/t/openstack/build/1de940579c7c42a6810ae1ea914f4868 : SUCCESS in 4m 38s\n- tooz-tox-py311-mysql https://zuul.opendev.org/t/openstack/build/f36d9fdc3ad144e496d3451565dd0625 : SUCCESS in 4m 58s\n- tooz-tox-py314-mysql https://zuul.opendev.org/t/openstack/build/72bd9d6d3e27404d88f7025446588883 : SUCCESS in 8m 58s","accounts_in_message":[],"_revision_number":4},{"id":"b04b4cf23b6b2ca442f6f0452addf5c44394d4f3","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-10-11 20:08:17.000000000","message":"Patch Set 4:\n\n(2 comments)","accounts_in_message":[],"_revision_number":4},{"id":"00b27f44b31afefc6d5951fa8d584ed61f4527ba","author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"date":"2026-10-12 03:53:18.000000000","message":"Patch Set 4:\n\n(1 comment)","accounts_in_message":[],"_revision_number":4}],"current_revision_number":4,"current_revision":"2fa54b848a33b7bc69be69024184758c76a82f5d","revisions":{"8169284b9a24c6ddc67296854744a8cce442749e":{"kind":"REWORK","_number":1,"created":"2026-09-25 05:23:50.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/08/1007408/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/tooz","ref":"refs/changes/08/1007408/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/tooz refs/changes/08/1007408/1"}}},"commit":{"parents":[{"commit":"b016a0b1fa83e47d1cc147b100218bc218a7b779","subject":"Merge \"Use etcd from distribution\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/b016a0b1fa83e47d1cc147b100218bc218a7b779"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-09-25 04:45:43.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-09-25 05:22:51.000000000","tz":-240},"subject":"redis: Read groups without WATCH","message":"redis: Read groups without WATCH\n\nget_members(), get_members_with_capabilities() and\nget_member_capabilities() read a group inside a WATCH transaction. Any\njoin, leave or removal of an expired member before EXEC aborts the\ntransaction, and the whole read starts again, without limit. The number\nof attempts grows exponentially with the write rate and the time a read\ntakes, which grows with the group. With 10,000 members, 20 writes per\nsecond make a read cost 2.5 to 3 full reads, 100 writes per second stop\nreads almost entirely, and no read completes during a burst of rejoins\nsuch as the one after a failover.\n\nRead groups without a transaction: HGETALL or HKEYS, then MGET of the\nmembers\u0027 liveness keys. Remove expired members with a script that checks\neach liveness key again before deleting the member, so a member that\nheartbeats after the read is kept. Each script call handles at most\n1,000 members, and members whose removal fails are still left out of\nthe result. A read is no longer atomic with that removal, but callers\ncannot tell a member that leaves during the read from one that leaves\njust after it. get_member_capabilities() now sends one command, not\nfive, when the member exists.\n\nGenerated-By: Anthropic Claude Opus 5.5\nChange-Id: I79eb9ae75d489e55fc12c3b2c550d21b48d6c4b6\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/8169284b9a24c6ddc67296854744a8cce442749e"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/8169284b9a24c6ddc67296854744a8cce442749e"}]},"branch":"refs/heads/master"},"651facc193909c8df4abc28d41a8410bd76bb89f":{"kind":"REWORK","_number":2,"created":"2026-10-11 07:59:45.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/08/1007408/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/tooz","ref":"refs/changes/08/1007408/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/tooz refs/changes/08/1007408/2"}}},"commit":{"parents":[{"commit":"c84d853e3022ec0d29568ec2b27c7f732f918393","subject":"redis: Translate errors of group operations","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/c84d853e3022ec0d29568ec2b27c7f732f918393"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-09-25 04:45:43.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-10-11 07:55:06.000000000","tz":-240},"subject":"redis: Read groups without WATCH","message":"redis: Read groups without WATCH\n\nget_members(), get_members_with_capabilities() and\nget_member_capabilities() read a group inside a WATCH transaction. Any\njoin, leave or removal of an expired member before EXEC aborts the\ntransaction, and the whole read starts again, without limit. The number\nof attempts grows exponentially with the write rate and the time a read\ntakes, which grows with the group. With 10,000 members, 20 writes per\nsecond make a read cost 2.5 to 3 full reads, 100 writes per second stop\nreads almost entirely, and no read completes during a burst of rejoins\nsuch as the one after a failover.\n\nRead groups without a transaction: HGETALL or HKEYS, then MGET of the\nmembers\u0027 liveness keys. Remove expired members with a script that checks\neach liveness key again before deleting the member, so a member that\nheartbeats after the read is kept. Each script call handles at most\n1,000 members, and members whose removal fails are still left out of\nthe result. A read is no longer atomic with that removal, but callers\ncannot tell a member that leaves during the read from one that leaves\njust after it. get_member_capabilities() now sends one command, not\nfive, when the member exists.\n\nGenerated-By: Anthropic Claude Opus 5.5\nChange-Id: I79eb9ae75d489e55fc12c3b2c550d21b48d6c4b6\nGenerated-By: OpenAI GPT-6\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/651facc193909c8df4abc28d41a8410bd76bb89f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/651facc193909c8df4abc28d41a8410bd76bb89f"}]},"branch":"refs/heads/master"},"c3e6803f3798fefc6d577c4cc71215d92c5ebbc6":{"kind":"TRIVIAL_REBASE","_number":3,"created":"2026-10-11 17:47:21.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/08/1007408/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/tooz","ref":"refs/changes/08/1007408/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/tooz refs/changes/08/1007408/3"}}},"commit":{"parents":[{"commit":"a6496b06077223f8040ad264a721ebeb0349db1a","subject":"redis: Translate errors of group operations","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/a6496b06077223f8040ad264a721ebeb0349db1a"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-09-25 04:45:43.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-10-11 17:40:50.000000000","tz":-240},"subject":"redis: Read groups without WATCH","message":"redis: Read groups without WATCH\n\nget_members(), get_members_with_capabilities() and\nget_member_capabilities() read a group inside a WATCH transaction. Any\njoin, leave or removal of an expired member before EXEC aborts the\ntransaction, and the whole read starts again, without limit. The number\nof attempts grows exponentially with the write rate and the time a read\ntakes, which grows with the group. With 10,000 members, 20 writes per\nsecond make a read cost 2.5 to 3 full reads, 100 writes per second stop\nreads almost entirely, and no read completes during a burst of rejoins\nsuch as the one after a failover.\n\nRead groups without a transaction: HGETALL or HKEYS, then MGET of the\nmembers\u0027 liveness keys. Remove expired members with a script that checks\neach liveness key again before deleting the member, so a member that\nheartbeats after the read is kept. Each script call handles at most\n1,000 members, and members whose removal fails are still left out of\nthe result. A read is no longer atomic with that removal, but callers\ncannot tell a member that leaves during the read from one that leaves\njust after it. get_member_capabilities() now sends one command, not\nfive, when the member exists.\n\nGenerated-By: Anthropic Claude Opus 5.5\nChange-Id: I79eb9ae75d489e55fc12c3b2c550d21b48d6c4b6\nGenerated-By: OpenAI GPT-6\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/c3e6803f3798fefc6d577c4cc71215d92c5ebbc6"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/c3e6803f3798fefc6d577c4cc71215d92c5ebbc6"}]},"branch":"refs/heads/master"},"2fa54b848a33b7bc69be69024184758c76a82f5d":{"kind":"REWORK","_number":4,"created":"2026-10-11 18:43:17.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/08/1007408/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/tooz","ref":"refs/changes/08/1007408/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/tooz refs/changes/08/1007408/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/tooz refs/changes/08/1007408/4"}}},"commit":{"parents":[{"commit":"a6496b06077223f8040ad264a721ebeb0349db1a","subject":"redis: Translate errors of group operations","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/a6496b06077223f8040ad264a721ebeb0349db1a"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-09-25 04:45:43.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-10-11 18:39:58.000000000","tz":-240},"subject":"redis: Read groups without WATCH","message":"redis: Read groups without WATCH\n\nget_members(), get_members_with_capabilities() and\nget_member_capabilities() pass their callback and encoded group key to\nRedis.transaction(). That redis-py helper calls pipe.watch() before\nthe callback, then pipe.execute() after it returns. Because the pipeline\nis still watching, execute sends MULTI/EXEC even when the callback did\nnot queue a write. A concurrent group update aborts EXEC and the helper\nrepeats the entire callback without a retry limit. This can stall reads\nof large groups during membership churn or mass rejoins after failover.\n\nRead groups using HGETALL or HKEYS, then MGET of the liveness keys.\nRemove expired members with a script that rechecks each liveness key,\npreserving members that heartbeat after the read. Limit each pruning\ncall to 1,000 members. Pruning failures propagate through the result\u0027s\nexisting error translation, preserving failure reporting to callers.\n\nA read is no longer atomic with pruning; a member can leave during the\nread just as it can leave after the result is returned. Reading one\nmember\u0027s capabilities uses HGET, with an existence check only when the\nmember is absent, instead of the previous WATCH/EXISTS/HGET/MULTI/EXEC.\n\nGenerated-By: Anthropic Claude Opus 5.5\nChange-Id: I79eb9ae75d489e55fc12c3b2c550d21b48d6c4b6\nGenerated-By: OpenAI GPT-6\nSigned-off-by: Adam Harwell \u003cflux.adam@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/2fa54b848a33b7bc69be69024184758c76a82f5d"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/tooz/commit/2fa54b848a33b7bc69be69024184758c76a82f5d"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY"},{"label":"Workflow","status":"MAY"},{"label":"Backport-Candidate","status":"MAY"}]}],"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":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Backport-Candidate","description":"Backport candidate status","status":"NOT_APPLICABLE","is_legacy":false,"applicability_expression_result":{"fulfilled":false,"status":"FAIL"},"submittability_expression_result":{"expression":"is:true","fulfilled":true,"status":"NOT_EVALUATED","passing_atoms":[],"failing_atoms":[],"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":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"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":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
