)]}'
{"id":"openstack%2Foslo.messaging~993317","triplet_id":"openstack%2Foslo.messaging~master~I805cfc16d5805b0219bcb805ec998597f9350474","project":"openstack/oslo.messaging","branch":"master","topic":"bp/oslo-http-driver","attention_set":{},"removed_from_attention_set":{"10273":{"account":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"last_update":"2026-07-17 05:43:47.000000000","reason":"Change was abandoned"}},"hashtags":[],"change_id":"I805cfc16d5805b0219bcb805ec998597f9350474","subject":"HTTP-RPC driver: Kubernetes Lease service broker","status":"ABANDONED","created":"2026-06-15 09:23:39.000000000","updated":"2026-07-17 05:43:47.000000000","total_comment_count":9,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"bdb1db0a7ac8333ceca64ded852097371d71b341","_number":993317,"virtual_id_number":993317,"owner":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"actions":{},"labels":{"Verified":{"disliked":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":-1,"date":"2026-07-12 11:01:58.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"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-06-15 11:30:08.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"}],"messages":[{"id":"7e3c18f80b9a5b8e27e743ca5c0289b3134aa7a1","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-15 09:23:39.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"26c95aa97de646c2bd011415c18d68e07e87e933","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-15 11:30:08.000000000","message":"Patch Set 1: Verified-1\n\n(5 comments)\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/d5606d205d4b437085cd25c008535220\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/8dda48a817e84804823021b7cd417d43 : SUCCESS in 2m 36s\n- requirements-check https://zuul.opendev.org/t/openstack/build/07998caeb46f44e588d0059e652c83d1 : FAILURE in 2m 07s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/c1c31ab1d7de4f55a6357fe9278821c4 : SUCCESS in 55m 54s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/01746b889bb7448f9778beb2d4cbe4c5 : SUCCESS in 2m 52s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/8089e90bbc8f4a11912faf29bee4e1bb : FAILURE in 2m 59s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/152b3f63d5d34575b2fc71925a682a66 : SUCCESS in 4m 27s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/32f0ba974a4f4c3988b94078fc0a887c : SUCCESS in 3m 10s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/2bb8984b19294876ab2578270131d90e : SUCCESS in 4m 42s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/d4cda9bae3284570bc168ad33cadd0ed : SUCCESS in 3m 24s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/65abec924c234b93b3b480a869831079 : SUCCESS in 4m 00s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/28fb5ff3d933424ea8fbd3330b4a8ba6 : SUCCESS in 5m 46s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/c80dbd51e4914e9597120f9f56de65d0 : FAILURE in 14m 52s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/0aca6eaa05cd46fe9c1a78a4ee8334b1 : FAILURE in 2m 15s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/e0228f6eeec942c0bc6063d2ed609621 : POST_FAILURE in 1h 43m 58s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/43639a4ac30c4eba81448f8cd8576a85 : POST_FAILURE in 1h 59m 01s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/1424274eeb454bfe9582b52fe36a84f1 : SUCCESS in 1h 18m 47s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/777c3206eda44ec197995423dfca1959 : SUCCESS in 1h 15m 56s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"f6aceec8ae96694c9365da4b65fa4a9c42506c32","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-16 08:49:32.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"a849b5776d17658061548dee4f5a214b699c86c3","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-16 10:48:38.000000000","message":"Patch Set 2: Verified-1\n\n(3 comments)\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/7c4b93fc4f6b4a0398eb81450eb55e40\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/ee9b1499d9f94b25b8684fd740e26df3 : FAILURE in 2m 43s\n- requirements-check https://zuul.opendev.org/t/openstack/build/8a57432277e248a0ab39f4d2dbcdb34d : FAILURE in 2m 52s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/f5922d4ed8f64f99b260bf0a2d51d97a : SUCCESS in 53m 09s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/f3b589dfa4994274a34f54d020e15d1e : SUCCESS in 3m 36s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/8e31279fd7f54d958587c7bc91253ef0 : FAILURE in 4m 12s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/bec70248434f4ae49024741b39420a2a : SUCCESS in 4m 39s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/793b6fe07f5e41218a0b0de6b8f3b71b : SUCCESS in 4m 26s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/420521451ade46e7b6d6818aadf6f77e : SUCCESS in 7m 11s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/257acc45ecdf4cd08833bdfdd2b78b30 : SUCCESS in 3m 58s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/b553b16b04f64b91b68822570262aed6 : SUCCESS in 5m 34s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/dfc6acb7f4d14bfe9c5b6b856d1f9ea3 : SUCCESS in 5m 02s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/e92199b3594541deb7bf2889ffc4d50a : FAILURE in 12m 44s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/0538f1a663a94472aafc6364c592a8ff : FAILURE in 2m 47s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/a338f85d59774ac7bf1a3a7cffe00172 : SUCCESS in 1h 46m 54s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/55aa87a00c5947279cafa38c05a21fe4 : SUCCESS in 1h 41m 02s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/7123f44fc0f54d97ba62abbbbf51752c : SUCCESS in 1h 00m 53s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/ae3cdbe8b7c947829bb3ff32b34ef9ed : SUCCESS in 44m 44s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"1242f532786cb5cb78be50226fbb578f528c43f9","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-17 13:29:16.000000000","message":"Uploaded patch set 3.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":3},{"id":"98bf820128fba1b2da1052f55d59fc9261117ea0","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-17 15:17:40.000000000","message":"Patch Set 3: Verified-1\n\n(1 comment)\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/63ec474311a54265aadc210ecc2cc5d0\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/d2c4302f3d394bb9a0b4fd143e4ccbd8 : SUCCESS in 3m 14s\n- requirements-check https://zuul.opendev.org/t/openstack/build/52d47b8eef4d441e90b8e6ede477eda3 : FAILURE in 4m 55s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/8443fb1fec6f4f5c8802a0479d4902b1 : SUCCESS in 1h 29m 24s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/5ee9f443b83d4ecb9c2698734480113e : FAILURE in 4m 16s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/b7621a8dd8474171aa8a4509ad00b8aa : FAILURE in 2m 11s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/887ae26f6a8642c8b49df3ab730fd89a : FAILURE in 5m 14s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/d14ed1343f04448686e0a54ec9e53283 : FAILURE in 5m 21s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/8a36f39968fb42cea571932c0838b852 : FAILURE in 6m 23s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/bd63c1206c984a1a9b5dff4891674b0c : SUCCESS in 5m 02s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/41b6e5c312ee43e9b16ac8c424d33fae : SUCCESS in 5m 15s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/8f6b9a4bb11c41adbddd4d5b49143867 : SUCCESS in 5m 38s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/0b4c38d8279a413cbfae285900800967 : FAILURE in 6m 46s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/47e8f26a71cf4037ade6e3483923af63 : FAILURE in 3m 11s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/d7ca9feddf9149b18b65c5bbb28113b8 : SUCCESS in 1h 39m 39s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/cff95068410441e182e0f8ab91195ea0 : SUCCESS in 1h 20m 28s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/9aa8b25385f54671a8427dbae9090229 : SUCCESS in 40m 40s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/6006776c1e234415ab3b71718a5a1283 : SUCCESS in 48m 42s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"8cc98781e64fef20d077720e79dee2775fcfd318","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-23 02:12:14.000000000","message":"Uploaded patch set 4.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":4},{"id":"9ca03d8aa9f21a23d9f96dd08dbe146660c11b2b","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-23 04:52:48.000000000","message":"Patch Set 4: 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/bd6d3de87f1d43ea9072af763290e220\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/fa4ca3b89483449d93eee8fbdd82e2c9 : SUCCESS in 3m 41s\n- requirements-check https://zuul.opendev.org/t/openstack/build/42c6d51498c44d0f9535b4bf7c73cd11 : FAILURE in 3m 53s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/3db1ecbeebd0406885a6f4489367014e : SUCCESS in 1h 42m 55s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/90aba570957d4c8eaa0a8710a26a1161 : SUCCESS in 7m 10s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/7c8f30c81da24725b9fc64cd38c4fbc2 : SUCCESS in 3m 38s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/248fbfa71b984e7fadb075c5935610a2 : SUCCESS in 4m 52s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/7cc44f8a00954413a5223df69156678d : SUCCESS in 6m 33s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/5b54ba10b6e24673bc87f0400f5f6e9f : SUCCESS in 7m 52s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a7d99d4cf6e747508a63fee44df8b8e0 : SUCCESS in 5m 19s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/b46213197005400b8f45f52eca6a7a9f : SUCCESS in 5m 27s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/89ef14bdcc13479398af7ee6a154f6a2 : SUCCESS in 6m 07s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/0614d610dcd04c50ab79e791ac8883f4 : FAILURE in 6m 43s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/c197987c73ce4375932f6994bd9934d1 : FAILURE in 5m 10s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/6d4d670541a145829fc260ecf46d0722 : SUCCESS in 1h 38m 55s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/09926681ce3b450d9cd81a562099b0b9 : SUCCESS in 1h 52m 04s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/39b5f681a5fc44aeb7fe5464e4387182 : SUCCESS in 36m 32s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/fdf18bbac20a4073b93696a83411276b : SUCCESS in 1h 09m 51s (non-voting)","accounts_in_message":[],"_revision_number":4},{"id":"5af0f102c5de452ef7b8f3e254c04dec2a1dcc3f","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-23 19:22:34.000000000","message":"Uploaded patch set 5: Patch Set 4 was rebased.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":5},{"id":"a7d209baca20efd02cfd5b7e34510928456aa34b","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-23 21:12:24.000000000","message":"Patch Set 5: 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/a622053e27b545b0b904c849a5448a84\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/b4a57eccf23f40b3a4c1bb2347a602f0 : SUCCESS in 1m 53s\n- requirements-check https://zuul.opendev.org/t/openstack/build/73bc06be2b7547f6862c8f1b67c8c9ac : FAILURE in 2m 21s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/4b7dc4a0be09470e9671139061020e4c : SUCCESS in 1h 42m 46s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/7e2ff340222342a897eae5593ba3d17f : SUCCESS in 4m 28s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/bed481e3d3b24bedb6af89f50f2c4362 : SUCCESS in 3m 24s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/b7aa637e7bfc41918fda04b11b0f6994 : SUCCESS in 2m 53s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/f75ef0b78299470bb8721a8fc1b3c1ca : SUCCESS in 3m 47s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/c8f6a6038c964e94acbe629bebbb1b3a : SUCCESS in 6m 27s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6e58e08a6ea24f439eaab138f9c296b7 : SUCCESS in 5m 48s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/d48461b7b00c4a05944c32d2e76a6186 : SUCCESS in 4m 22s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/4720d41b026d421bb63975b5d15441ce : SUCCESS in 4m 19s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/8c448e087b114762884555a5148ef70e : FAILURE in 5m 33s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/7a4b460f3acf4320b1548f6b451203f9 : FAILURE in 2m 44s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/b47a5747d38d42f1b7ca729087b0613e : SUCCESS in 1h 26m 30s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/8068fb131f46445ebbc1ea3a42a13c54 : SUCCESS in 1h 15m 43s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/0582c1c51a9046ecb1a45b5c0503869f : SUCCESS in 56m 04s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/b50c853de6074a52ac3fd1abf9c20dc4 : SUCCESS in 37m 25s (non-voting)","accounts_in_message":[],"_revision_number":5},{"id":"0ea399dafb8dd54879f5c609216a02ba19a5bad3","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-23 21:27:05.000000000","message":"Uploaded patch set 6.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":6},{"id":"0d5c97dafe178adaba86c64586a97750c41b39da","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-23 23:36:08.000000000","message":"Patch Set 6: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/76edbee204494852b5963d7b76ca65cf\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/32175cd279c949a787e9e02fb66e0863 : SUCCESS in 2m 42s\n- requirements-check https://zuul.opendev.org/t/openstack/build/3433f66f15124d3d9f06c665dd125980 : SUCCESS in 2m 24s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/f76368abea494f64907c44769ba8a1dd : SUCCESS in 1h 30m 35s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/93d132c5d8094ba9b091883884c5f422 : SUCCESS in 4m 58s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/dd6c295f44bc405781301661577f707c : SUCCESS in 5m 55s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/a2e58ec2cf65429d9eda658432eee4e9 : SUCCESS in 4m 18s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/d85dfea2dabf4096b28f3e2f89e7b97c : SUCCESS in 2m 53s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/967fbddab69e452581d5ade456e069f8 : SUCCESS in 4m 17s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/45bf286bf81845ae922c2f40fdf0ed36 : SUCCESS in 3m 48s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/a4915fd3552a46ab8c59b2817a660ff9 : SUCCESS in 4m 23s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/3132a8b176ee41f980175c05e69b1ee9 : SUCCESS in 6m 26s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/22a9393a6ca745c3b0991058ed1ce71d : FAILURE in 6m 03s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/046be417a7c3487183a3209ffa6a5969 : FAILURE in 2m 02s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/28b5c2792bb44e7aac87c493d84c4f63 : SUCCESS in 1h 14m 55s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/f008763d332742e3905f1fcbdc141405 : SUCCESS in 1h 47m 55s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/3c5d30c4e4f943da9561b4f64013f652 : SUCCESS in 1h 12m 13s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/ef55f3d0aa494ef4a891cee6cc6cd085 : SUCCESS in 1h 14m 29s (non-voting)","accounts_in_message":[],"_revision_number":6},{"id":"9b8022931104aff06a363e2a1cdf366ebab3bdc8","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-25 09:09:08.000000000","message":"Uploaded patch set 7: Patch Set 6 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":7},{"id":"17dc707f6c1fb27f341721428c4e68f1add59665","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-25 10:34:53.000000000","message":"Patch Set 7: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/d7cdd3a9c5164607b0b08f54c485567b\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/e5fa255e680847ed9179bbca281f8a47 : SUCCESS in 3m 10s\n- requirements-check https://zuul.opendev.org/t/openstack/build/ebeeb38681ee4bf8b71b4e297348a5f9 : SUCCESS in 3m 05s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/89a9e5609b3e488f9740881cc1988361 : SUCCESS in 1h 21m 17s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/35a2913e394a4156a97e9d663f80fd01 : SUCCESS in 6m 06s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/c9215757b729455c87bcacf5ae3fb8b0 : SUCCESS in 3m 18s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/69d6bde5f599495b9cd2b25cb11bb71f : SUCCESS in 5m 53s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/98615eb6e4984f80a9bda3a7c3c0911b : SUCCESS in 4m 00s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/dcc2eab5090c4e078981c29c63f84a29 : SUCCESS in 6m 34s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/0af90ad3f7464b7daf3785c0843b78ca : FAILURE in 4m 11s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a8a7ec86d50540e6911f0309be96e5f6 : SUCCESS in 4m 25s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/f3e602fb3e094563b2862ed140405d8e : SUCCESS in 3m 51s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/e312ce37caa2408f9e8f6a2f83804c14 : SUCCESS in 5m 17s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/fa5bdf79a1ee44769ad31280b3f03cf6 : FAILURE in 13m 10s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/893f11117d784fb5b0e1c35adbc2335d : FAILURE in 4m 10s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/d13e1f6473e34824a7553374fa61f4c7 : SUCCESS in 1h 07m 44s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/c2466e8ce44c4e8a840a84eeff25f016 : SUCCESS in 1h 16m 21s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/1e1d7f1c70b844f688c442cc833a73c8 : SUCCESS in 35m 56s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/a0b68983d23545b1933838065b243acd : SUCCESS in 1h 16m 34s (non-voting)","accounts_in_message":[],"_revision_number":7},{"id":"cf63204455b620ad6dc451d1636050289d9511ab","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-26 00:41:12.000000000","message":"Uploaded patch set 8: Patch Set 7 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":8},{"id":"272c136523ebda233cfc6f685b1184557d43f15d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-26 02:29:19.000000000","message":"Patch Set 8: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/219119f6ba02457c959e9e32620d1e30\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/f7f0b45e9422453088a438081267b413 : SUCCESS in 3m 08s\n- requirements-check https://zuul.opendev.org/t/openstack/build/ede7e21a31144b64b08551c906354145 : SUCCESS in 1m 36s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/9ca1447e95ea430da721756df8bbeb95 : SUCCESS in 48m 14s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/b4aa81f39c324920a77355c77e9af5cc : SUCCESS in 4m 14s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/c76b3ba72026474da93a8bcd052d3973 : SUCCESS in 3m 03s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/a9b47689b7294b81a6f7869edecf864a : SUCCESS in 3m 40s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/ac16d44f008f4275a64a9735c6d2ffdd : SUCCESS in 4m 44s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/df59d7290a4744428d018a9a926b6a07 : SUCCESS in 8m 21s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/1269616878184ab890388514dc6488e2 : FAILURE in 5m 48s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/5dbb8ea311e94d82adf319c3cd00cfb5 : SUCCESS in 2m 21s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/05592cda88fa4628bcbe0bd09091c0a2 : SUCCESS in 4m 13s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/cfee4cb97b664210a0fb80b6ee48a272 : SUCCESS in 5m 18s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/f07e6075956e4fee896dcd187f18cd10 : FAILURE in 4m 41s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/feacd1eaf59d4a74a064f17cf303c76a : FAILURE in 5m 46s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/9cfee49e96b14ff4a0a52dcec8704387 : SUCCESS in 1h 34m 38s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/8c20d1228f1f406696b7f1ef06f2a034 : SUCCESS in 1h 41m 33s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/d1f7dacc879140df8b72dd116dd66b13 : SUCCESS in 53m 02s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/b5a4e604e7d14592baa41a27a24a9e93 : SUCCESS in 39m 28s (non-voting)","accounts_in_message":[],"_revision_number":8},{"id":"b40e158bddd2e35833076b1ca200b0f303091a6a","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-26 05:42:16.000000000","message":"Uploaded patch set 9: Patch Set 8 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":9},{"id":"dba09cff01100b1d7aba12b9f148ae9c19688858","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-26 07:37:33.000000000","message":"Patch Set 9: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/cf98c91d498f44d489ed50d95fec0cb1\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/dd0e8071258a4d8890b42d78017ded21 : SUCCESS in 2m 56s\n- requirements-check https://zuul.opendev.org/t/openstack/build/381665e1c4304b81ac29e53c7f039d20 : SUCCESS in 2m 22s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/40d939c1587444519d3a7bff0dc054ac : SUCCESS in 1h 35m 42s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/c187b9cf407f4dcebe46c64d5f98e5a4 : SUCCESS in 3m 19s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/3e1f254223374019913428711140daab : SUCCESS in 2m 25s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/cde9bbb76452498cbf28592191948209 : SUCCESS in 3m 44s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/44a92a9be0cb4571aa16bc4b743d48d7 : SUCCESS in 4m 17s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/fd4459080a7f46e8a030276524533a1b : SUCCESS in 4m 28s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/fcf1a316347c416bb70eb99a31883b6f : FAILURE in 5m 40s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/fcea7fe035994afcadae5c90527f5ba5 : SUCCESS in 3m 43s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/8e37002c9353414590c8b668a8494ca8 : SUCCESS in 4m 10s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/f453a4e64cd24869ad150921b12c635d : SUCCESS in 5m 09s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/a585c189f0684695b943933c7b3b2880 : FAILURE in 5m 18s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/1320177a74fb4775a5d8a173fe5db41d : FAILURE in 2m 45s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/ac2856de027d4eb894a7e26fed573128 : SUCCESS in 1h 44m 15s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/5284a256c3f2412486fec5bdc5658c95 : SUCCESS in 1h 48m 13s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/789ea9c5ae8d4d54bff943c1bc5cacff : SUCCESS in 1h 12m 44s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/58f6c5dbaf16442c85b9ebc20632fac1 : SUCCESS in 1h 17m 57s (non-voting)","accounts_in_message":[],"_revision_number":9},{"id":"cfe540342f9dc84d5164317bd720347d01ac5cc8","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-26 21:11:29.000000000","message":"Uploaded patch set 10: Patch Set 9 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":10},{"id":"42f3f18ef7aac9ed9f622b567ed2676dbebad28d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-26 22:31:07.000000000","message":"Patch Set 10: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/6c7ac8817ae84669b5fb176c92a1aec9\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/08fba709f24e4d0b88cfc486578cfce1 : SUCCESS in 3m 12s\n- requirements-check https://zuul.opendev.org/t/openstack/build/5437c416495c4b46b01bae6dd65ae72a : SUCCESS in 3m 14s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/8ecab577037942f39745a7b948ed93bf : SUCCESS in 46m 30s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/9c4b5a519043463cb3a6e3ebe7b12764 : SUCCESS in 4m 36s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/ffd85a70aaa142c5a3b1bdbc4f65a89d : SUCCESS in 3m 35s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/69a2b050807d42f3850fe3603577b2da : SUCCESS in 7m 23s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/6e868f90dd1e4e64888d22e70c373929 : SUCCESS in 3m 19s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/187ee43f0f544ca6a50c4e743e015a5b : SUCCESS in 7m 07s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/837690290ad340c68e4d0ba54e2ee9dd : FAILURE in 6m 08s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/84922f537d1c4065a98776af97095b79 : SUCCESS in 2m 53s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/26feb4ca6e9f4316a89639a30cef13e1 : SUCCESS in 4m 27s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/47235527c9e2490d94a98a719984f771 : SUCCESS in 5m 10s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/264c871054c14b039f3ecb395a15e558 : FAILURE in 4m 44s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/58492e44ee144ab0adea74003d68f0e0 : FAILURE in 3m 15s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/d5160a62a92547a9b9e409fc1b9d3c7f : SUCCESS in 1h 14m 10s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/6c441bbd16314bfca1682eb485cabdde : SUCCESS in 1h 13m 53s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/b77d16bba54943df8bf26222b858323b : SUCCESS in 1h 11m 28s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/0814ada96cee4cd1b99e02806ef82c2c : SUCCESS in 55m 07s (non-voting)","accounts_in_message":[],"_revision_number":10},{"id":"b70ae94a7c50b1b6494d0fca3124b9e6d6604166","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-26 23:22:34.000000000","message":"Uploaded patch set 11: Patch Set 10 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":11},{"id":"2bb29082c24cf2804ccab344f8b551bfe0c9e0e2","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-27 01:11:54.000000000","message":"Patch Set 11: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/02434466b0a0474da010e8c1f4a8e8cd\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/6a808aa1a19c40f3a873ff4579cbd680 : SUCCESS in 2m 43s\n- requirements-check https://zuul.opendev.org/t/openstack/build/a5001fe9348c4f4c9a0f663c875376bd : SUCCESS in 2m 41s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/32e42d5f05b440af8ef6efe05fbe1652 : SUCCESS in 1h 16m 07s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/fa2ac8dee1634f06a156fa06664394e0 : SUCCESS in 5m 53s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/c3bf2c6396f441a49dbadd95563e0cfc : SUCCESS in 4m 09s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/e58d96895fa3401f9996e9eb9785f472 : SUCCESS in 4m 21s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/dc81b96027514861990526b303bd81b8 : SUCCESS in 2m 45s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/d4f87b34b86343feacb6beb03be94f39 : SUCCESS in 4m 46s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/3d2cfc0a80a4451f889e2d35067952d9 : FAILURE in 5m 41s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2e189f86b6ee49eda2a8959b8f9b6022 : SUCCESS in 3m 58s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/b837f4b23cc9449e863b5e15d0260c60 : SUCCESS in 2m 14s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/61d603c78f0343caab53929f463cf0bb : SUCCESS in 4m 55s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/b6116de20a584e90bd760dd79177fcee : FAILURE in 4m 39s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/929e7cf940e64b3792642a6688ecfee5 : FAILURE in 2m 35s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/a52ba929308c42a2a62da79a682aef18 : SUCCESS in 1h 10m 44s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/938c3f47c172403ca47ea1e7f129a055 : SUCCESS in 1h 41m 51s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/dbd0335c227a4350ab44f17cc750e6dc : SUCCESS in 1h 00m 48s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/5887cc7db40348f2893b225dc1b6f033 : SUCCESS in 1h 18m 35s (non-voting)","accounts_in_message":[],"_revision_number":11},{"id":"9f7188c742235f97f39e9e84757997936a5f08bd","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-06-30 06:48:10.000000000","message":"Uploaded patch set 12.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":12},{"id":"deb01198b3ebaae726eba48ba132c56bfe9c4e45","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-01 07:00:07.000000000","message":"Uploaded patch set 13: Patch Set 12 was rebased.","accounts_in_message":[],"_revision_number":13},{"id":"28b4a116f96f5af0bdc40c4ea7d372e02c55c1fc","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-01 08:54:51.000000000","message":"Patch Set 13: 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/7764bf35cdee460fb2143607a37c7a6b\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/aea93351d13c494d8c503edd23dab118 : SUCCESS in 4m 28s\n- requirements-check https://zuul.opendev.org/t/openstack/build/95bc0449a4af4d0e908f778d9d5223ba : SUCCESS in 1m 57s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/568c82634eea40ec893596420132450a : SUCCESS in 1h 46m 53s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/a0f9951c7338461b8c4b2dba5ded794c : SUCCESS in 4m 55s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/aa2e33228dd4470fae0f073a6a811f5c : FAILURE in 2m 10s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/f979746867c54c10994e1a8f54c13142 : SUCCESS in 6m 45s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/d03349a072b74dd487b031b64bf79941 : SUCCESS in 3m 54s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/ef4871d7a27c4348af4b09f8d292ac0b : SUCCESS in 6m 34s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/cfbfc1c2eb3b49b8bedce56ca3da7660 : FAILURE in 6m 11s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6278b17be7df4562bdee5f08b909001e : SUCCESS in 5m 27s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/ca2966c50cd14243a856719e65c89dfa : SUCCESS in 3m 57s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/02d2a834aded4f09a8f4f07ccab76946 : SUCCESS in 5m 08s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/1394c50b6a0743fea20b7044810ac41a : FAILURE in 10m 04s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/e8c15c841a3345e99ee17eae03430af1 : FAILURE in 4m 03s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/57962468bd664007bb7c337fe7df904e : SUCCESS in 1h 07m 52s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/3339e241d7fb4f899c7513042cd8d27a : SUCCESS in 1h 47m 47s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/f6a17c29500248aba3b07a62188ef988 : SUCCESS in 1h 08m 36s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/cd94436918874fd1bc3cc198886fbcaa : SUCCESS in 40m 31s (non-voting)","accounts_in_message":[],"_revision_number":13},{"id":"6dfd363410aef32c20c7e1b7b334883071143057","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-08 05:39:36.000000000","message":"Uploaded patch set 14: Patch Set 13 was rebased.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":14},{"id":"4c6ebca75944a4e59a06e6bbe96c19348005d96b","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-08 06:19:42.000000000","message":"Uploaded patch set 15: Patch Set 14 was rebased.","accounts_in_message":[],"_revision_number":15},{"id":"1a5873bde835574a94d4b81afc89c098975bd554","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-08 08:20:52.000000000","message":"Patch Set 15: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/edadba120b364e829b0b933a9548f247\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/4e6d7b9db3c8407d8684bb35e78efc28 : SUCCESS in 5m 19s\n- requirements-check https://zuul.opendev.org/t/openstack/build/597e543397084d6da7e1dac16c9c461b : SUCCESS in 6m 30s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/88f7c633d06b4d45978b2f62274353ec : SUCCESS in 1h 42m 06s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/f421d174bd7a47dc95b5e867c5bcc141 : SUCCESS in 5m 45s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/f16c618e9fbf41149e12b9b0217660f3 : SUCCESS in 2m 26s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/53d51274a9904c9f94bac91d32fc9842 : SUCCESS in 4m 21s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/ba4fdae6ef57498295c5b11ca68129a4 : SUCCESS in 4m 01s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/9886c6fa84a94e5ab2f9d5bba6dd4407 : SUCCESS in 4m 19s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/7357d7b98cdb41349506ad147097e229 : FAILURE in 3m 50s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/1c8438841af24b68b32f02f7517ae997 : SUCCESS in 5m 21s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/1679bda473c54ad7bb76b70980ac019f : SUCCESS in 4m 28s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/ae59b8ef60bf42609ee477d789638bf3 : SUCCESS in 9m 19s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/a8804cdb6cf74b6c9b639d7a1e1a2f2e : FAILURE in 5m 11s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/e2659890aa2f4c87a3e54154c6c84b3f : FAILURE in 2m 14s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/9febd9180b874bcea99e76e626e4bca8 : SUCCESS in 1h 48m 17s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/3d94676936d0474e8cc7a2645c9ef1b0 : SUCCESS in 1h 48m 59s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/29818d58be9548529cc290f7a0d94337 : SUCCESS in 32m 17s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/15ae7ccfc61042f9aa57079bf4c78250 : SUCCESS in 39m 21s (non-voting)","accounts_in_message":[],"_revision_number":15},{"id":"d3a725215306658088834f27b97613b77bb2e85e","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-08 09:17:44.000000000","message":"Uploaded patch set 16: Patch Set 15 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":16},{"id":"7094848ab6bfbc114e5ce97ec72312ee0e2f3356","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-08 11:25:51.000000000","message":"Patch Set 16: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/97873a128d3d4c758bede7a7df8bed3d\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/7b2f5aaf127a43d28c736b06be26d699 : SUCCESS in 2m 58s\n- requirements-check https://zuul.opendev.org/t/openstack/build/fde064afa1284c759d0838a56e4c69c0 : SUCCESS in 2m 44s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/c9cf25017ec34f31b783dc3dc79ddab5 : SUCCESS in 1h 28m 58s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/6493ff0f137441eb9af93d34e6d28643 : SUCCESS in 5m 07s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/06265ca4fd814cb58fdbf2a905b58030 : SUCCESS in 3m 33s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/f31f19fb263049d7b361f6c702ea9f99 : SUCCESS in 4m 03s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/398aeb3faff043bf9b2cfdb66507fd49 : SUCCESS in 4m 33s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/21c3a580895948bf8dc361052842a472 : SUCCESS in 6m 27s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/bc04e02894f345888565283daa115341 : FAILURE in 6m 21s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c5d924a64f544dea9caac757a6ddb6ed : SUCCESS in 4m 20s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/fdecd424a90c4c64873053054e2d8fe2 : SUCCESS in 4m 17s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/7ce36fc394934db681f2280bc7d16b39 : SUCCESS in 5m 18s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/83b476ca6c1c475b83296117bf7617f2 : FAILURE in 17m 13s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/dfb5847ac542445eb4eb8cca97afdff1 : FAILURE in 3m 21s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/48f1a3df516140feb73cccd3394ae4b7 : SUCCESS in 1h 56m 33s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/922b7397787d424393fe9ff144f1764b : SUCCESS in 1h 41m 28s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/9b85f0171906472f98ee4ea86ab49dd0 : SUCCESS in 1h 09m 28s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/ab0dfedf101e46e6bb538baf4ac99fb9 : SUCCESS in 1h 10m 42s (non-voting)","accounts_in_message":[],"_revision_number":16},{"id":"82bee8e1842324dc99aa089f883801c036cb60be","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-08 18:31:36.000000000","message":"Uploaded patch set 17: Patch Set 16 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":17},{"id":"bb7eb8b8768e7958a5fa1f7d94e6ea82e31b28ea","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-08 18:52:56.000000000","message":"Uploaded patch set 18: New patch set was added with same tree, parent tree, and commit message as Patch Set 17.","accounts_in_message":[],"_revision_number":18},{"id":"2d3a45fa98792ec1b69a42bbee158744d905a40c","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-08 20:54:24.000000000","message":"Patch Set 18: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/4fe24bf48fb7473181111514e36bd0cf\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/0fa4829daca741e1be5c20c7e9e03d3d : SUCCESS in 3m 55s\n- requirements-check https://zuul.opendev.org/t/openstack/build/00b0c8823f6d477a94f08eb27f181e75 : SUCCESS in 3m 47s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/65fc6327843b47ca928359f31dc4c6e5 : SUCCESS in 1h 40m 15s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/78dfa11f8a5b4431a066dd17483d3fd5 : SUCCESS in 4m 44s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/241299a31b774bbc95f5a65b6be1b154 : SUCCESS in 4m 13s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/3278526eac774b359ef2ab71ddd4dd55 : SUCCESS in 2m 46s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/c8d53e3de7994aa88a004c8e3fc1cf16 : SUCCESS in 4m 21s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/2de5ca8bca08405bb3d0a62769528b4e : SUCCESS in 4m 07s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/c94a7dba6f0f4fac8129b12b6371329e : FAILURE in 3m 43s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/3f589a9b2ab64149b92d7282026e7d5a : SUCCESS in 4m 06s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/966ea13010124de7acf201268d616eaa : SUCCESS in 4m 37s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/4b8e6cefbe914d1aa2d62e2680adadb8 : SUCCESS in 6m 38s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/c91711fa59b54f11be8d2f37e342311d : FAILURE in 3m 36s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/0034bbc1f6d94625b991bd3aa094b72b : FAILURE in 2m 36s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/a2724e8b9def4b3e816a64bed52069c3 : SUCCESS in 1h 49m 43s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/84ecb9d385e14192a1c89663f9276e15 : SUCCESS in 1h 51m 33s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/21d379314d41419aa19d9d4b662c48be : SUCCESS in 1h 13m 23s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/df9dfb1877784bd98a19944eecf58fd4 : SUCCESS in 1h 15m 24s (non-voting)","accounts_in_message":[],"_revision_number":18},{"id":"cf7309539cdb3d4a938f6f2ef919a48d72ec1977","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-09 05:22:06.000000000","message":"Uploaded patch set 19: Patch Set 18 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":19},{"id":"201b85fc7a0077ca4c452b058a73eb1107a46813","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-09 07:28:30.000000000","message":"Patch Set 19: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/99042a3465da4d7ead68aa5b6dcd355d\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/88b66cb95e924036af21989aa87f76e5 : SUCCESS in 3m 02s\n- requirements-check https://zuul.opendev.org/t/openstack/build/27a48569dd774018a9bd8f591c195eec : SUCCESS in 1m 42s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/c98ca43797434ddd9d3d55ce5feca1e2 : SUCCESS in 1h 57m 48s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/0c480fde1b46454c8078981111f33d27 : SUCCESS in 4m 39s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/83f3a9e373b14a698eb000ec572b102c : SUCCESS in 4m 57s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/0d4808191f4342628f968119251d23f2 : SUCCESS in 3m 24s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/508b1fdf23fb4c618fb98c84c3d14ad8 : SUCCESS in 7m 15s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/a5018e2c9b7a4b09beb5b2bc4c44fb88 : SUCCESS in 9m 23s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/ce6890864d4741b09b51e33d6823a407 : FAILURE in 3m 43s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/df49d89f5808447384561b0b4c7df6a7 : SUCCESS in 2m 56s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/2428ff802996498283f827e367f45c5f : SUCCESS in 2m 30s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/b119d43401344bab843bc213aa860441 : SUCCESS in 4m 23s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/761cb39014e84a948b17043c3250a6df : FAILURE in 4m 46s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/bd3cc24942774ed8af3b19fc253c1b17 : FAILURE in 2m 35s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/24ed6a3001c547b0a336fe3dba7c5f2a : SUCCESS in 1h 41m 42s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/07d60e1b93c044b2b044fb9e63b15cec : SUCCESS in 1h 49m 43s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/863078b0faab4016aae0c05c5dcc4410 : SUCCESS in 48m 26s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/3128d46c97c4440eae292db9c82181c7 : SUCCESS in 1h 16m 35s (non-voting)","accounts_in_message":[],"_revision_number":19},{"id":"515cf1e16934efd8907cba4ba12b0f20764bee84","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-09 10:18:01.000000000","message":"Uploaded patch set 20: Patch Set 19 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":20},{"id":"1e437c457a22a9a6eb98226a99fc3dfcab133947","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-09 10:47:32.000000000","message":"Uploaded patch set 21: Patch Set 20 was rebased.","accounts_in_message":[],"_revision_number":21},{"id":"26a9d6e9b4404193cb1120751aa121402539219d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-09 12:30:41.000000000","message":"Patch Set 21: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/9fa72d323c3c4064becb5fd88c34c6f1\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/ce3488a0ad9544fcb3f0981088f51482 : SUCCESS in 3m 01s\n- requirements-check https://zuul.opendev.org/t/openstack/build/36efd90a9ec346eeb0b98f0e271b6b6b : SUCCESS in 1m 33s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/3a681350fd60417398a20332d93be687 : SUCCESS in 1h 37m 46s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/faf3cef7de8e49e689b42d9e5a22646c : SUCCESS in 4m 35s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/741bdef33c8a4b138f32d8450803b49c : SUCCESS in 3m 22s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/e8435d4d81ae458884b1cbd7d45bf569 : SUCCESS in 7m 11s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/4fde11b1ec4d4e1ab3c39b72d7792a17 : SUCCESS in 3m 41s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/a74d2f35f2dc4582a9884789712f64ed : SUCCESS in 6m 56s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/69a5a9ed7a15439184b8b5abd0965396 : FAILURE in 6m 36s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/7af183d9ee144a0f811cfbe017283102 : SUCCESS in 4m 02s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/68286984c7ae4af182a810dde514a2a5 : SUCCESS in 4m 22s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/3dfa95490c6d41918e4646772166d257 : SUCCESS in 5m 15s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/60b71a819a6e433b9f25b8d9a3070c29 : FAILURE in 3m 48s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/30d56bb2f3d04a248b076c08723e080c : FAILURE in 1m 49s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/35615f7c35b04c48a26253101efa59be : SUCCESS in 1h 33m 10s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/a9a845ffa3f142d09c791b3975f232f9 : SUCCESS in 1h 35m 41s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/162c0eb12ce5405aa4178fd5d78ac20e : SUCCESS in 1h 04m 50s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/f5dff9ee75004ef8bf97c19c828e8fce : SUCCESS in 1h 28m 10s (non-voting)","accounts_in_message":[],"_revision_number":21},{"id":"a085713ee3d3934dddb181cf12cff483062ace58","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-09 23:23:39.000000000","message":"Uploaded patch set 22: Patch Set 21 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":22},{"id":"72c9ec81484c0d91613f15464276fcccb34a2cd5","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-10 02:30:35.000000000","message":"Uploaded patch set 23: New patch set was added with same tree, parent tree, and commit message as Patch Set 22.","accounts_in_message":[],"_revision_number":23},{"id":"88bd7161c896f20bf29470dfa8fff323f069f868","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-10 04:51:06.000000000","message":"Uploaded patch set 24: Patch Set 23 was rebased.","accounts_in_message":[],"_revision_number":24},{"id":"2a8063fa9532def6e7b91168835ecd86dd94fada","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-10 06:33:45.000000000","message":"Patch Set 24: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/5b4dc1344b2b4ced8b358866f8c65ae7\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/2dd8fa818cc7437b81c21196621b07f7 : SUCCESS in 4m 12s\n- requirements-check https://zuul.opendev.org/t/openstack/build/669588cf1bdd4b5cb45850082d033de8 : SUCCESS in 2m 09s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/b9ed7587fdc64c9fb385921f007ffb11 : SUCCESS in 1h 05m 33s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/16272d5417b5459a954bb6a0d98a4f37 : SUCCESS in 3m 53s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/19beaad18ab342d1941b06c5b4bfaf12 : SUCCESS in 2m 36s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/111df87c8fc649098af9f676b85c6faa : SUCCESS in 3m 55s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/eb6e01d8deb8447f9bdb4cb819fc9c0a : SUCCESS in 3m 15s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/cce706a56fb044e4b5d80110cdc9634a : SUCCESS in 6m 46s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/e043564cf53247fda4909953cb2fb7a7 : FAILURE in 4m 04s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/0cadf384995a43c391717b04ca5a842c : SUCCESS in 4m 39s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/69f94f854e2b4dfc8b6b45e255b2c864 : SUCCESS in 2m 59s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/448d9f448c224a1eabaa5659c70935b2 : SUCCESS in 3m 57s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/c2567af746f8472b80a51eae03f25161 : FAILURE in 7m 23s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/60d5cd73fb79447d866d88d57c7d402f : FAILURE in 2m 51s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/bbfe2e97bf3d4b938c66b4ac02efa3ec : SUCCESS in 1h 38m 21s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/25b97a5fff3f49ebbb3782e571ee7a1c : SUCCESS in 1h 18m 48s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/79af1661a6a04e85ac41a8a0964144df : SUCCESS in 1h 02m 56s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/ad98227c67f24a1fa6494e57b4649131 : SUCCESS in 1h 14m 47s (non-voting)","accounts_in_message":[],"_revision_number":24},{"id":"b77f3301214349afe9793b5e57785d2ade7067a7","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-10 17:57:46.000000000","message":"Uploaded patch set 25: Patch Set 24 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":25},{"id":"164347cceccab48382d1c7f16a2fbb1a725b88cb","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-10 18:13:55.000000000","message":"Uploaded patch set 26: Patch Set 25 was rebased.","accounts_in_message":[],"_revision_number":26},{"id":"7ac8aafc060cfb193fe05b6e3b176ddfc4fe6953","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-10 20:15:03.000000000","message":"Patch Set 26: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/fe1079add3ba4a0e8187583d05f65512\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/0e88957574464cb1a61d3eb703446844 : SUCCESS in 2m 38s\n- requirements-check https://zuul.opendev.org/t/openstack/build/3baf717b46134c1a9395058f0d6901d2 : SUCCESS in 1m 58s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/ddff79c830ef4383bdcc178d22f48e0c : SUCCESS in 1h 53m 42s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/80e97fa572d742f8998c31bb1623355a : SUCCESS in 3m 27s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/76ba041d5e7b4732b085f04d8f59d1b1 : SUCCESS in 3m 08s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/e4b503602f7f4c178f65922160ae8971 : SUCCESS in 4m 22s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/3f127d20149d41248e36ed42e2986e37 : SUCCESS in 3m 52s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/4cbb625e2f3a434eaa1a8fab5e40213d : SUCCESS in 6m 28s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/eaa292dbfd264765a17ac41a71bae4d7 : FAILURE in 8m 01s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a3fe58cebd6c4ada80defc68b289622b : SUCCESS in 3m 28s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/0698d31546d947689ccc090cfc2af320 : SUCCESS in 4m 14s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/8a9e6505a1714cc2a5c55963b7442640 : SUCCESS in 5m 20s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/b5193d93f4dd4202aa0c936f052eb8e9 : FAILURE in 6m 11s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/3ff018bd4f164d24bebc01b8b91ae22b : FAILURE in 2m 24s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/5aec5c6577464b589d507535a009dd30 : SUCCESS in 1h 53m 12s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/ec141f260d4d476ca0c5f81d9e321a45 : SUCCESS in 1h 41m 18s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/cb32264aec6b412fa8c3dbe3294d82ec : SUCCESS in 1h 05m 36s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/b7387d9571f64e089268801ea8ae5365 : SUCCESS in 40m 34s (non-voting)","accounts_in_message":[],"_revision_number":26},{"id":"25176ef8f9792671e7709c03c85d30463c2f3b34","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-10 20:28:49.000000000","message":"Uploaded patch set 27: Patch Set 26 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":27},{"id":"7f4b13e0041f6f9bb75192289a84871f9ee8af48","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-10 21:54:16.000000000","message":"Patch Set 27: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/d39f1298ba8042008dfd6ba141c1df19\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/dc95bbdd80b741fb859503549e6634aa : SUCCESS in 3m 02s\n- requirements-check https://zuul.opendev.org/t/openstack/build/7ddb0659326a41b99fa39ef37134d803 : SUCCESS in 2m 25s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/b08c4ae4f5b64541b112037383fd6671 : SUCCESS in 49m 50s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/70109fcad3904425bf2580493c9eefbd : SUCCESS in 4m 49s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/97ec288395b949519c9aea76c6ad7f82 : SUCCESS in 3m 18s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/19fd83b9b704488db3b9c39092117de8 : SUCCESS in 3m 08s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/c009c3d4644a4b32bcd5625ed1f9270d : SUCCESS in 3m 03s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/7310ff18c1d2459d8038226841a233d6 : SUCCESS in 6m 57s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/1d05c2beba614457bc3a361fbfe7b268 : FAILURE in 4m 05s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/48b646b0679c4b89adc43366f3419b9f : SUCCESS in 2m 30s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/ee2549ea0cc14d03818339681c5a3bb5 : SUCCESS in 4m 02s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/e088d7b625194fb88ee31b293b184842 : SUCCESS in 5m 30s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/898b969b93ca49af9e5588d8a226408f : FAILURE in 4m 51s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/adf25df70aa34095aa0326da890f6019 : FAILURE in 2m 03s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/e009c59099ea4fff9f95af57d461b065 : SUCCESS in 1h 05m 38s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/28b3a478f3ad4672b6da1c6fa23bf2f6 : SUCCESS in 1h 21m 25s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/80839a6f23a34ad1a6c64014059edd50 : SUCCESS in 54m 17s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/69aa4b2ce6ff439ab5c22dddef5ffe78 : SUCCESS in 1h 17m 38s (non-voting)","accounts_in_message":[],"_revision_number":27},{"id":"3d8d124b830c0954bf849f33521c0d26cf8b99c1","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-10 23:06:58.000000000","message":"Uploaded patch set 28: Patch Set 27 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":28},{"id":"20a278b19810f5707e8074cdff35a456746275ac","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-11 00:57:41.000000000","message":"Patch Set 28: 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/821e91b552bc48c08ec63de38f7b051e\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/f24641306ae94d2d834c5bdef67bbbd3 : SUCCESS in 4m 27s\n- requirements-check https://zuul.opendev.org/t/openstack/build/f38636e00095475798f2a89c57a4f9ea : SUCCESS in 2m 18s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/706a66fff1834b25a0e15174a3725401 : FAILURE in 1h 12m 55s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/035517e2b0c94209bb4ae2ec85471b7a : SUCCESS in 4m 33s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/4cc54e59a0204f77b651cafcedbf545d : SUCCESS in 3m 55s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/0e1852ef23484ff4967aadbe89dd095c : SUCCESS in 4m 14s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/d16df1c0c55a47e88fd0269250a56413 : SUCCESS in 3m 58s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/761d24cb7d234f62b8218ffab368853f : SUCCESS in 6m 32s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/a07271744ffe4005adab97b8a606c968 : FAILURE in 5m 49s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/fad9ac4686264f78a9ada90e345746eb : SUCCESS in 3m 34s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/eba5473e8f9e478d9840684bc2d118cf : SUCCESS in 4m 10s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/037c2c48c4e2487bb6da1e83e52b8b28 : SUCCESS in 4m 35s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/5bf3216bc47642e09f97bafc84194336 : FAILURE in 2m 45s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/5787ee99524443939a511c6400c5c0e9 : FAILURE in 3m 15s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/636927819dcd4ae9943f80b245a73017 : SUCCESS in 1h 06m 59s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/85429eefec4248588662766fd943f0a4 : SUCCESS in 1h 42m 28s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/1d78af94a2b14387b341c8d9e7075624 : SUCCESS in 34m 21s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/67e3c6e7cee34afeb287f22045919189 : SUCCESS in 1h 11m 32s (non-voting)","accounts_in_message":[],"_revision_number":28},{"id":"25100e6352fd896c55af9667969c2dad4d641284","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-11 01:26:56.000000000","message":"Uploaded patch set 29: Patch Set 28 was rebased.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":29},{"id":"f458f3d2ab91318cc2fd790d50f380a113ee0a87","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-11 02:35:08.000000000","message":"Uploaded patch set 30: Patch Set 29 was rebased.","accounts_in_message":[],"_revision_number":30},{"id":"658dd23d44fef61e8c8850dc6b6ec0bab1ffaffd","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-11 05:06:51.000000000","message":"Patch Set 30: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/f052b790651f44e4972f9ef950b4303f\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/ffa603468638423db6ef0628a90162b2 : SUCCESS in 3m 15s\n- requirements-check https://zuul.opendev.org/t/openstack/build/1d6f56ca28a942aabb73bd2ea8824392 : SUCCESS in 2m 32s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/666eca5e5bc54ae2b1b80308d80257e9 : SUCCESS in 1h 30m 13s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/19766d9823774d139a70c6662e420b9a : SUCCESS in 5m 02s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/acf8c486e07e4bcaa5631e8eb55f9096 : SUCCESS in 4m 59s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/678f36fb18f543efa7fbbd9f6bbaf74d : SUCCESS in 3m 25s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/7750f16f3cae48d7ba9d209edeb08575 : SUCCESS in 6m 17s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/2ca9778145094e46984dfc1918c54424 : SUCCESS in 6m 29s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/4fbec41b8608468292a81703fb3628ce : FAILURE in 8m 30s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/70e73526663a4236a5c7ad42dca70b8f : SUCCESS in 5m 22s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/c6213ae76cdc43aab8aaef722a086754 : SUCCESS in 5m 07s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/ac4e43427df2498fb600b2b7f5245ee9 : SUCCESS in 7m 53s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/e899d84ad62d4706a9ad0d0d17a56202 : FAILURE in 4m 15s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/fe83ac581f71423784cedbd9ec3e512a : FAILURE in 3m 19s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/9a114a91c21e42aea4d39eb93a4f52c3 : SUCCESS in 1h 53m 39s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/dbb7f38d50be4c8683b2cf3e1bdcee3a : SUCCESS in 1h 12m 10s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/ea00ea8d356e41748493f263c84db4fc : SUCCESS in 50m 25s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/d3d846983dbb47589960c0c7dbc8600e : SUCCESS in 38m 12s (non-voting)","accounts_in_message":[],"_revision_number":30},{"id":"59b9d2861e788679c65e4aa9acbffc9aa6cf5292","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-11 08:11:42.000000000","message":"Uploaded patch set 31: Patch Set 30 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":31},{"id":"e8a7b01c07569c2324b8e6b773beab7726b6a240","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-11 10:03:48.000000000","message":"Patch Set 31: 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/be2759ab1408404295382d0107829741\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/06abc6c4b10f450d8e49ad4c3227e8e2 : SUCCESS in 3m 15s\n- requirements-check https://zuul.opendev.org/t/openstack/build/25423d0e43dd438ebc4e835e6eaed619 : SUCCESS in 2m 50s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/aabdea68adbb4311b5cc4c6e10a0974e : SUCCESS in 1h 31m 13s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/582c7db61ca14af6b63d1e62fa617f0b : SUCCESS in 7m 08s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/3e110a5792024daba2533b47d9ccf542 : SUCCESS in 3m 20s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/997638ea64974a7b8878b89c67ffc00b : SUCCESS in 5m 20s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/78d393d4408e494a883f62a6e7618c03 : FAILURE in 7m 24s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/c0dbad0add484affbe0d0789bc9ba81b : SUCCESS in 6m 30s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/29e06dfa00d94857a0325eeb7637fa0d : FAILURE in 7m 04s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/0f80713193f5497e981d2c22ea5b0536 : SUCCESS in 4m 06s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/71f55c08414e47c18e707d9f4866151c : SUCCESS in 4m 28s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/2d73a3a92ad74e4cb5b329f262ccbf74 : SUCCESS in 5m 19s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/9993de615bf146fa95b9b63275b09078 : FAILURE in 5m 31s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/a8872a895a964400988c24e66b124ffc : FAILURE in 2m 34s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/35e0795a0ed84139adce0d8a490ab21b : SUCCESS in 1h 43m 24s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/6616ee4377144563823760aea453087e : SUCCESS in 1h 10m 26s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/637b39724e6b4ecdab870462e9854e46 : SUCCESS in 51m 21s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/9014deb7d8ec407ba525b91834ec79cf : SUCCESS in 1h 13m 26s (non-voting)","accounts_in_message":[],"_revision_number":31},{"id":"bf90e46bc1364ce601396052617e4b242806313a","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-11 20:02:12.000000000","message":"Uploaded patch set 32: Patch Set 31 was rebased.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":32},{"id":"040c578e23c57ccb75d2280b7760bceb9973d4d0","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-11 21:49:53.000000000","message":"Patch Set 32: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/a7fdff159246483ebf59911c2789dd27\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/e6633b662cc7473280d7de7965718937 : SUCCESS in 3m 06s\n- requirements-check https://zuul.opendev.org/t/openstack/build/dcb790c3286e41de87f5864fa596c013 : SUCCESS in 2m 26s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/10bc22fca45f41f1b756f00dec373030 : SUCCESS in 1h 29m 49s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/e0e6d28e0fed4954934b2d7ef84f0a36 : SUCCESS in 4m 33s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/46f9c5b10ae64e95885249b782e07fc7 : SUCCESS in 2m 55s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/4ac2721da335449694caabe7ed04fa12 : SUCCESS in 3m 36s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/e55623726fde4952976d9acff36cfa48 : SUCCESS in 3m 02s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/2f3c2b821ee4420e998e29e74207fa1f : SUCCESS in 4m 48s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/ef483664f5eb4dcdbfa7b5a8e10ead9e : FAILURE in 7m 53s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a300125fe381410e985392075bf9a901 : SUCCESS in 3m 36s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/18505580ef864f3eb52290187d9a091b : SUCCESS in 4m 06s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/39e5eafb8eef4e91ad316e0762c6aee9 : SUCCESS in 4m 49s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/668cdcf0acae4b9a8929deae491ff14e : FAILURE in 4m 12s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/c5fcb388a4fe48578a21827f27f83d91 : FAILURE in 2m 13s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/b4932767df2b4f5c829ce06e3af46c81 : SUCCESS in 1h 33m 17s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/cfade295e0204c2baf7198cb86b4d4d8 : SUCCESS in 1h 40m 19s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/58cc66c9f2f041b3884b003d0796c8d5 : SUCCESS in 29m 14s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/1d42409d4f7d471786c2d7a7833903c1 : SUCCESS in 1h 12m 38s (non-voting)","accounts_in_message":[],"_revision_number":32},{"id":"e815aed9a0cfe4ee9d0bb161c61104b21f0873e9","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-11 23:31:49.000000000","message":"Uploaded patch set 33: Patch Set 32 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":33},{"id":"4e8b48eb296050e8c738c4f451cac48ff0ccd18f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-12 00:48:55.000000000","message":"Patch Set 33: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/6ade43b1cf9f49149cdb341f8382dadf\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/4188e052c2ce4ea68abb24c93bc5f45a : SUCCESS in 1m 46s\n- requirements-check https://zuul.opendev.org/t/openstack/build/5a41388a780e4fa9978cc7eeb9b387c3 : SUCCESS in 2m 30s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/1ff2ea8e26fb4cd8b61c6c6cd35f4cbb : SUCCESS in 1h 02m 31s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/233e6b5b2d084cedbb1a0a93885160ed : SUCCESS in 4m 58s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/0376daa43f2b468794b92d039daac88e : SUCCESS in 3m 17s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/cbe1151d12ca4b63b197f439384455f7 : SUCCESS in 2m 46s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/e885ecb87e74447b9d406dd9ae857c60 : SUCCESS in 4m 09s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/0115313f15ee4b89816f21321b9c6966 : SUCCESS in 8m 19s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/ff6fb50f19a74710add32511c0abbbb3 : FAILURE in 6m 01s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/395ec0a9281649b28bdc0dcf3965a59d : SUCCESS in 4m 29s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/78e1db013b2b4a0fa255f274fcb852a8 : SUCCESS in 3m 52s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/90ce4e086ed046f280ee31cc15c2a878 : SUCCESS in 4m 47s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/51e25c2c307748e78b33647657ba3658 : FAILURE in 2m 53s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/747f939c8d3441f7bceb1fc12233cc11 : FAILURE in 2m 55s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/49a4900fee1d404c8c54bb15f18c15ec : SUCCESS in 1h 01m 35s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/d495b69dc8f840e4af21764011f2c126 : SUCCESS in 1h 03m 10s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/b4410b95069045bfa590a7eaf4be7354 : SUCCESS in 1h 08m 53s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/1de538786def4439befe7ac9fe6e445a : SUCCESS in 39m 33s (non-voting)","accounts_in_message":[],"_revision_number":33},{"id":"f79cc05d88b43beac56be36858a2f2e9941697b1","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-12 03:18:51.000000000","message":"Uploaded patch set 34: Patch Set 33 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":34},{"id":"d9918923c7ac00ea18901e1a141f6f3c9e3a527d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-12 05:07:02.000000000","message":"Patch Set 34: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/322729b5e3ed4854889af53d2310f840\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/457f5f7045ab42e6ba1c1199db6f13de : SUCCESS in 3m 02s\n- requirements-check https://zuul.opendev.org/t/openstack/build/8f0cc66801de47e08ac5e448bdea8ed5 : SUCCESS in 2m 19s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/c669a65d40344c72a03615e2b4999fd4 : SUCCESS in 53m 31s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/a09ba35de78645c28654372f8315f261 : SUCCESS in 3m 11s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/b585fb533826481f8590fe6edf013c46 : SUCCESS in 3m 16s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/e7200b7fb6cd4087b52ad5c9076a35c4 : SUCCESS in 4m 16s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/77a181ec69dc4a829ee6e9f8e13c1661 : SUCCESS in 2m 59s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/fae4cc02d7324f77812f6b97c45245bc : SUCCESS in 6m 40s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/b70cc2d921294fedbb524ecf23c51976 : FAILURE in 5m 05s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/54c2fa3535344b479fe5e2b053d81795 : SUCCESS in 2m 24s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/ec13f8996a224519925efcb80ea517eb : SUCCESS in 4m 27s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/e239ca4499314f2bbfd117781710315b : SUCCESS in 7m 16s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/d34a6ebc57df45799e090205bd89a445 : FAILURE in 3m 42s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/8aaf4705236f47869f0b993cb42dee16 : FAILURE in 2m 52s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/e6dff017145b44ac95a72b39ce57959f : SUCCESS in 1h 40m 42s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/0a9373e09631423da7a0394a41783558 : SUCCESS in 1h 38m 08s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/e4ad255911284f7b98b188bd3217bb74 : SUCCESS in 30m 16s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/2cd7f1655009425f9c26eb7dfe74e30a : SUCCESS in 1h 21m 07s (non-voting)","accounts_in_message":[],"_revision_number":34},{"id":"2cfbc178094e892880e8743032c31a8cefcd90f5","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-12 05:48:53.000000000","message":"Uploaded patch set 35: Patch Set 34 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":35},{"id":"302423130cac817fea8bf625b41631c76919c6e5","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-12 07:33:58.000000000","message":"Patch Set 35: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/8cea49d3ef894a5bafbdde586b2fe246\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/8509f8ad68d5424190245c4c28bb6b33 : SUCCESS in 4m 14s\n- requirements-check https://zuul.opendev.org/t/openstack/build/bb960314c40e4e17b9a54017717bd583 : SUCCESS in 1m 52s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/f564ee0f2ef144fe889c0595cce59051 : SUCCESS in 1h 30m 41s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/6483d65d09f8426f8b9edb45a2240ce2 : SUCCESS in 5m 07s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/c8fdf8f958c6494ab1e08726a658c2d1 : SUCCESS in 3m 25s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/817f818a20794b1baf5c89b60c0000a8 : SUCCESS in 4m 09s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/6890eb736d734688ae14fd187e59f45e : SUCCESS in 5m 53s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/0d62d4f3c3424a90ac19f23ff2c28e56 : SUCCESS in 6m 27s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/4e2dc12145d64ee689bacd02c4663206 : FAILURE in 4m 55s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2cbedfb6ef314cb1813cfeab4c67e363 : SUCCESS in 3m 35s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/df0c8ea2706f4619a38f8380d3e0200c : SUCCESS in 4m 04s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/ce8331965e10410db8f785a327fe3272 : SUCCESS in 5m 52s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/d9cc36e3640d4f82bae6ef5b718c6ffc : FAILURE in 3m 12s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/a49c183210ae4cb1b46c7b66906af222 : FAILURE in 1m 45s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/80a66fd602de41f095917dc5ea9136c5 : SUCCESS in 1h 32m 24s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/bdce0c4a6660437fb1e8b7a8a425dafb : SUCCESS in 1h 36m 54s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/c3a893b0fc484f99bc0c8eb57ece8a5f : SUCCESS in 34m 18s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/97c548ec3a84495eb9f86f724d5c2bfb : SUCCESS in 1h 27m 33s (non-voting)","accounts_in_message":[],"_revision_number":35},{"id":"bab3a409b02cb45f54f5a2ac00d0526f7b1cd842","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-12 09:23:40.000000000","message":"Uploaded patch set 36: Patch Set 35 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":36},{"id":"b5810607f2c9952536533102b04bb95628db1e74","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-12 11:01:58.000000000","message":"Patch Set 36: 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/99d5be1accae4f8195d665e7634db836\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/7a04efa36a7d49428963091eb4bc0dce : SUCCESS in 2m 14s\n- requirements-check https://zuul.opendev.org/t/openstack/build/6343582f179d4ae597d8af123f8a28a4 : SUCCESS in 2m 36s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/f3ffac1588054621a649094d4ed10441 : SUCCESS in 1h 26m 21s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/9925bd016e0c4c8495a15c9bb8e7a25a : SUCCESS in 4m 20s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/164ca163d9e54e22bf6fa9708201c194 : SUCCESS in 3m 08s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/7091633ee3934fada9854e78df86ddf1 : SUCCESS in 3m 29s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/020b100623ff42d0a444ecc6f84a0a6f : SUCCESS in 5m 52s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/417579ca84ad4f6884ae29b12dde7ddd : FAILURE in 8m 32s\n- openstack-tox-py315 https://zuul.opendev.org/t/openstack/build/7264e40f898f4ece9bd99afc03e2f40c : FAILURE in 5m 30s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/cdc4b61382df4cb89ccc6bd4f7f68103 : SUCCESS in 4m 25s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/b6de70e7c49b47a6819854bcda587f96 : SUCCESS in 4m 00s\n- oslo.messaging-tox-py311-func-scenario01 https://zuul.opendev.org/t/openstack/build/2901902c36644d36ba026e3edc3118d5 : SUCCESS in 5m 06s\n- oslo.messaging-tox-py311-func-scenario02 https://zuul.opendev.org/t/openstack/build/86d4b5716cea400d96cf451a40460583 : FAILURE in 4m 17s (non-voting)\n- oslo.messaging-tox-py310-func-http https://zuul.opendev.org/t/openstack/build/ac569ebef96a46dfb4f3fb9cf7dc23ce : FAILURE in 3m 19s (non-voting)\n- oslo.messaging-src-dsvm-full-rabbit https://zuul.opendev.org/t/openstack/build/9821ec0925394f77aa4f7eb4ca392475 : SUCCESS in 1h 26m 10s\n- oslo.messaging-src-dsvm-full-kafka-hybrid https://zuul.opendev.org/t/openstack/build/d2819b7722464298bda5ff90a852f54e : SUCCESS in 1h 31m 19s (non-voting)\n- oslo.messaging-grenade https://zuul.opendev.org/t/openstack/build/6ff7a6d15042464598da50bf65c9d416 : SUCCESS in 1h 02m 04s (non-voting)\n- oslo.messaging-grenade-multinode https://zuul.opendev.org/t/openstack/build/68bfd8ac72c140499e1112e4166e7bf4 : SUCCESS in 40m 59s (non-voting)","accounts_in_message":[],"_revision_number":36},{"id":"bdb1db0a7ac8333ceca64ded852097371d71b341","tag":"autogenerated:gerrit:abandon","author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"date":"2026-07-17 05:43:47.000000000","message":"Abandoned\n\nAbandoning the k8s-forked top of the original HTTP-RPC v1 chain. Service discovery has been rebuilt on tooz coordination (see the tooz Lease driver and the tooz-based service brokers), which supersedes this direct k8s_operator Lease service broker. No remaining change depends on this commit.","accounts_in_message":[],"_revision_number":36}],"current_revision_number":36,"current_revision":"265630f886b0e2d1ec3ad886adfa7933e990fff1","revisions":{"bb89c1a055675389e4486a38f6a325ce19b605a8":{"kind":"REWORK","_number":1,"created":"2026-06-15 09:23:39.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/1"}}},"commit":{"parents":[{"commit":"b59bc60aed25da8721912e7533ae89c5bafa586f","subject":"HTTP-RPC driver: httpx client, SNITransport, mTLS","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/b59bc60aed25da8721912e7533ae89c5bafa586f"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-15 09:23:04.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-15 09:23:04.000000000","tz":-240},"subject":"HTTP-RPC driver: K8s EndpointSlice service broker","message":"HTTP-RPC driver: K8s EndpointSlice service broker\n\nIntroduce a Kubernetes-native service broker that uses EndpointSlice\nresources for service discovery, replacing the Consul dependency for\nK8s deployments. Add _create_service_broker() factory function with\nservice_broker_backend config option to select between \u0027k8s\u0027 and\n\u0027consul\u0027 backends.\n\n- K8sEndpointsOperator: watches EndpointSlice resources via K8s API\n  with informer-style list/watch, exponential backoff reconnection,\n  and thread-safe service registry\n- Configurable via service_broker_backend option (must be explicitly set)\n- Broadcaster updated to use factory function\n- Full unit test coverage for K8s operator\n\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nGenerated-By: claude-opus-4-6 (OpenCode)\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/bb89c1a055675389e4486a38f6a325ce19b605a8"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/bb89c1a055675389e4486a38f6a325ce19b605a8"}]},"branch":"refs/heads/master"},"3d31af425602cb5b5965240148b11ea69e3e736a":{"kind":"REWORK","_number":2,"created":"2026-06-16 08:49:32.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/2"}}},"commit":{"parents":[{"commit":"cd0c5c7a6c29d5eed41a9420b51693c2c61ece9d","subject":"HTTP-RPC driver: httpx client, SNITransport, mTLS","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/cd0c5c7a6c29d5eed41a9420b51693c2c61ece9d"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-15 09:23:04.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-16 08:28:34.000000000","tz":-240},"subject":"HTTP-RPC driver: K8s EndpointSlice service broker","message":"HTTP-RPC driver: K8s EndpointSlice service broker\n\nIntroduce a Kubernetes-native service broker that uses EndpointSlice\nresources for service discovery, replacing the Consul dependency for\nK8s deployments. Add _create_service_broker() factory function with\nservice_broker_backend config option to select between \u0027k8s\u0027 and\n\u0027consul\u0027 backends.\n\n- K8sEndpointsOperator: watches EndpointSlice resources via K8s API\n  with informer-style list/watch, exponential backoff reconnection,\n  and thread-safe service registry\n- Configurable via service_broker_backend option (must be explicitly set)\n- Broadcaster updated to use factory function\n- Full unit test coverage for K8s operator\n\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nGenerated-By: claude-opus-4-6 (OpenCode)\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/3d31af425602cb5b5965240148b11ea69e3e736a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/3d31af425602cb5b5965240148b11ea69e3e736a"}]},"branch":"refs/heads/master"},"f7671e598d075c4a4aa38fa1c068d2abc42d5ebc":{"kind":"REWORK","_number":3,"created":"2026-06-17 13:29:16.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/3"}}},"commit":{"parents":[{"commit":"99a9cb15a5d4d55ddc2b17a6e3cb6e2a5e1c50f0","subject":"HTTP-RPC driver: httpx client, SNITransport, mTLS","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/99a9cb15a5d4d55ddc2b17a6e3cb6e2a5e1c50f0"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-15 09:23:04.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-17 13:24:43.000000000","tz":-240},"subject":"HTTP-RPC driver: K8s Lease service broker","message":"HTTP-RPC driver: K8s Lease service broker\n\nIntroduce a Kubernetes-native service broker that uses coordination.k8s.io/v1 Lease resources for service registration and discovery,\nreplacing the Consul dependency for K8s deployments. Add the\n_create_service_broker() factory with the service_broker_backend\nconfig option to select between \u0027k8s\u0027 and \u0027consul\u0027 backends.\n\nUnlike an EndpointSlice, a Lease carries native liveness: holders\nrefresh renewTime on a timer (lease_renew_interval) and consumers\nignore any Lease whose renewTime is older than its leaseDurationSeconds.\nA process that crashes without unregistering stops renewing and its\nLease ages out within one duration window, so consumers no longer\nselect dead endpoints. This needs no external service and no controller.\n\n- K8sLeaseOperator: Lease registration/renewal via PATCH-first upsert\n  (merge-patch the renewTime, falling back to create on 404 — a PUT/\n  replace is rejected without a resourceVersion), expiry-filtered\n  cross-namespace discovery, and reaping of\n  obviously-dead Leases (renewTime older than\n  lease_reap_grace_factor * lease_duration_seconds) for the holder\u0027s\n  own host. Connection metadata (address, port, advertise-host,\n  enable-ssl, reverse-proxy) is carried in annotations; the wire\n  connection always targets the routable POD_IP and, under TLS, passes\n  the advertise host as the SNI/cert name so no consumer-side DNS is\n  required.\n- HTTPListenerBase gains a heartbeat loop (supports_heartbeat) that\n  re-registers every lease_renew_interval; the Broadcaster participates\n  too.\n- New config options: lease_duration_seconds, lease_renew_interval,\n  lease_reap_interval, lease_reap_grace_factor.\n- ownerReference GC remains as a backstop on pod deletion.\n- Full unit test coverage for the Lease operator.\n\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nGenerated-By: claude-opus-4-6 (OpenCode)\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/f7671e598d075c4a4aa38fa1c068d2abc42d5ebc"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/f7671e598d075c4a4aa38fa1c068d2abc42d5ebc"}]},"branch":"refs/heads/master"},"8cb02e1ee4d98f7c3809811f1cd9f59a914c65ea":{"kind":"REWORK","_number":4,"created":"2026-06-23 02:12:14.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/4"}}},"commit":{"parents":[{"commit":"93a8c394ec81a93eefd58ad5414e7296d641acc3","subject":"HTTP-RPC driver: httpx client and Hypercorn ASGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/93a8c394ec81a93eefd58ad5414e7296d641acc3"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-23 00:41:49.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/8cb02e1ee4d98f7c3809811f1cd9f59a914c65ea"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/8cb02e1ee4d98f7c3809811f1cd9f59a914c65ea"}]},"branch":"refs/heads/master"},"48fbddf119debaf8f0dc7e391dad10d7749cc088":{"kind":"TRIVIAL_REBASE","_number":5,"created":"2026-06-23 19:22:34.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/5"}}},"commit":{"parents":[{"commit":"a391c50575642c64c542c5e2f42ada2f3ecde9e9","subject":"HTTP-RPC driver: httpx client and Hypercorn ASGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/a391c50575642c64c542c5e2f42ada2f3ecde9e9"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-23 19:20:21.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/48fbddf119debaf8f0dc7e391dad10d7749cc088"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/48fbddf119debaf8f0dc7e391dad10d7749cc088"}]},"branch":"refs/heads/master"},"77a61b7489f147bfdebaa238669bb610df494f88":{"kind":"REWORK","_number":6,"created":"2026-06-23 21:27:05.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/6","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/6","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/6"}}},"commit":{"parents":[{"commit":"a391c50575642c64c542c5e2f42ada2f3ecde9e9","subject":"HTTP-RPC driver: httpx client and Hypercorn ASGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/a391c50575642c64c542c5e2f42ada2f3ecde9e9"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-23 21:19:50.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/77a61b7489f147bfdebaa238669bb610df494f88"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/77a61b7489f147bfdebaa238669bb610df494f88"}]},"branch":"refs/heads/master"},"1540bdc754b3cf3d67c5c17bef25e63ff8a340b1":{"kind":"TRIVIAL_REBASE","_number":7,"created":"2026-06-25 09:09:08.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/7","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/7","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/7 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/7 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/7 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/7"}}},"commit":{"parents":[{"commit":"a6b655d66b783241fc269b5ea6e059f3bd3a869a","subject":"HTTP-RPC driver: httpx client and Hypercorn ASGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/a6b655d66b783241fc269b5ea6e059f3bd3a869a"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-25 08:19:59.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/1540bdc754b3cf3d67c5c17bef25e63ff8a340b1"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/1540bdc754b3cf3d67c5c17bef25e63ff8a340b1"}]},"branch":"refs/heads/master"},"acde52aaac98e3152616503953a5e71be2dd8b7a":{"kind":"TRIVIAL_REBASE","_number":8,"created":"2026-06-26 00:41:12.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/8","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/8","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/8 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/8 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/8 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/8"}}},"commit":{"parents":[{"commit":"a764b4f1fad2bd363e17297dc96f05ccbfd1e92d","subject":"HTTP-RPC driver: httpx client and Hypercorn ASGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/a764b4f1fad2bd363e17297dc96f05ccbfd1e92d"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-26 00:33:12.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/acde52aaac98e3152616503953a5e71be2dd8b7a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/acde52aaac98e3152616503953a5e71be2dd8b7a"}]},"branch":"refs/heads/master"},"d69d099ad8844cbbe418c4b95bacb3bc5af190c5":{"kind":"TRIVIAL_REBASE","_number":9,"created":"2026-06-26 05:42:16.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/9","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/9","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/9 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/9 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/9 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/9"}}},"commit":{"parents":[{"commit":"75a89403c7637d9594df4d659fee16b251ea6bdc","subject":"HTTP-RPC driver: httpx client and Hypercorn ASGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/75a89403c7637d9594df4d659fee16b251ea6bdc"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-26 05:24:08.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/d69d099ad8844cbbe418c4b95bacb3bc5af190c5"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/d69d099ad8844cbbe418c4b95bacb3bc5af190c5"}]},"branch":"refs/heads/master"},"6f5382def7111e0991ceccf1807b39ef6ef6cf3a":{"kind":"TRIVIAL_REBASE","_number":10,"created":"2026-06-26 21:11:29.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/10","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/10","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/10 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/10 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/10 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/10"}}},"commit":{"parents":[{"commit":"dc822e49a32de4af7b015841704b5d00e8a1792a","subject":"HTTP-RPC driver: httpx client and Hypercorn ASGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/dc822e49a32de4af7b015841704b5d00e8a1792a"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-26 21:06:44.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/6f5382def7111e0991ceccf1807b39ef6ef6cf3a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/6f5382def7111e0991ceccf1807b39ef6ef6cf3a"}]},"branch":"refs/heads/master"},"69f7cd7e5434176f00e4ad6034f61af87502d2e9":{"kind":"TRIVIAL_REBASE","_number":11,"created":"2026-06-26 23:22:34.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/11","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/11","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/11 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/11 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/11 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/11"}}},"commit":{"parents":[{"commit":"dc9d7432a38f88e42c22e5ba4d35a54b3b9b47ec","subject":"HTTP-RPC driver: httpx client and Hypercorn ASGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/dc9d7432a38f88e42c22e5ba4d35a54b3b9b47ec"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-26 22:02:55.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/69f7cd7e5434176f00e4ad6034f61af87502d2e9"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/69f7cd7e5434176f00e4ad6034f61af87502d2e9"}]},"branch":"refs/heads/master"},"133e8a8cd898cd34ccbef939171e56f4c6db1c88":{"kind":"REWORK","_number":12,"created":"2026-06-30 06:48:10.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/12","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/12","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/12 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/12 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/12 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/12"}}},"commit":{"parents":[{"commit":"e222cca796d10a57cdfe8016be9a7d4a71a1d44f","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/e222cca796d10a57cdfe8016be9a7d4a71a1d44f"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-30 06:34:37.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/133e8a8cd898cd34ccbef939171e56f4c6db1c88"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/133e8a8cd898cd34ccbef939171e56f4c6db1c88"}]},"branch":"refs/heads/master"},"c59d5200d6197de7de164361c5f11e7aa438aeb9":{"kind":"TRIVIAL_REBASE","_number":13,"created":"2026-07-01 07:00:07.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/13","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/13","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/13 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/13 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/13 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/13"}}},"commit":{"parents":[{"commit":"04dfa52321c7e291f776a251649fcb27f7e99789","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/04dfa52321c7e291f776a251649fcb27f7e99789"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-01 06:57:54.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/c59d5200d6197de7de164361c5f11e7aa438aeb9"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/c59d5200d6197de7de164361c5f11e7aa438aeb9"}]},"branch":"refs/heads/master"},"2c80c4f593152f076e450cbd62b784abaf8bd59d":{"kind":"TRIVIAL_REBASE","_number":14,"created":"2026-07-08 05:39:36.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/14","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/14","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/14 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/14 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/14 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/14"}}},"commit":{"parents":[{"commit":"649fbfa3b0a97bbbe0c9c31bf36f51aa73c9b415","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/649fbfa3b0a97bbbe0c9c31bf36f51aa73c9b415"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-08 05:39:22.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/2c80c4f593152f076e450cbd62b784abaf8bd59d"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/2c80c4f593152f076e450cbd62b784abaf8bd59d"}]},"branch":"refs/heads/master"},"d8a99d6a6663fb7d868175c6c9c9cc13b40f0ca8":{"kind":"TRIVIAL_REBASE","_number":15,"created":"2026-07-08 06:19:42.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/15","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/15","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/15 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/15 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/15 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/15"}}},"commit":{"parents":[{"commit":"a729a5460e0f36b2bf7b20f9bb28935ff2d76db8","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/a729a5460e0f36b2bf7b20f9bb28935ff2d76db8"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-08 06:19:10.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/d8a99d6a6663fb7d868175c6c9c9cc13b40f0ca8"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/d8a99d6a6663fb7d868175c6c9c9cc13b40f0ca8"}]},"branch":"refs/heads/master"},"ae2474e5eaa9aa6b6157e585fe93f83f20e9f15e":{"kind":"TRIVIAL_REBASE","_number":16,"created":"2026-07-08 09:17:44.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/16","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/16","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/16 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/16 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/16 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/16"}}},"commit":{"parents":[{"commit":"a9801a83e745389c061f825b03ca753d374b2965","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/a9801a83e745389c061f825b03ca753d374b2965"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-08 09:07:29.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/ae2474e5eaa9aa6b6157e585fe93f83f20e9f15e"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/ae2474e5eaa9aa6b6157e585fe93f83f20e9f15e"}]},"branch":"refs/heads/master"},"fc14dfd8a87788b2c236e2bebba408ee1d225739":{"kind":"TRIVIAL_REBASE","_number":17,"created":"2026-07-08 18:31:36.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/17","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/17","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/17 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/17 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/17 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/17"}}},"commit":{"parents":[{"commit":"c8ef389a9a3f620a243486d8b40c06fdf4b034d1","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/c8ef389a9a3f620a243486d8b40c06fdf4b034d1"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-08 18:29:19.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/fc14dfd8a87788b2c236e2bebba408ee1d225739"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/fc14dfd8a87788b2c236e2bebba408ee1d225739"}]},"branch":"refs/heads/master"},"ecc996d703844244ae3f75603531e1b557500409":{"kind":"NO_CHANGE","_number":18,"created":"2026-07-08 18:52:56.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/18","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/18","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/18 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/18 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/18 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/18"}}},"commit":{"parents":[{"commit":"28fe3ec83a069e27b03718af3f0905ba1081c7a0","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/28fe3ec83a069e27b03718af3f0905ba1081c7a0"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-08 18:47:40.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/ecc996d703844244ae3f75603531e1b557500409"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/ecc996d703844244ae3f75603531e1b557500409"}]},"branch":"refs/heads/master"},"7b7bf0370e58796b5ade6eeb8c2d311192e1975d":{"kind":"TRIVIAL_REBASE","_number":19,"created":"2026-07-09 05:22:06.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/19","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/19","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/19 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/19 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/19 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/19"}}},"commit":{"parents":[{"commit":"818a7e91304e09b265370316247727bcebd0c68d","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/818a7e91304e09b265370316247727bcebd0c68d"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-09 05:01:20.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/7b7bf0370e58796b5ade6eeb8c2d311192e1975d"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/7b7bf0370e58796b5ade6eeb8c2d311192e1975d"}]},"branch":"refs/heads/master"},"319635fa5fbff875ddcf94426ea7da12a378bf07":{"kind":"TRIVIAL_REBASE","_number":20,"created":"2026-07-09 10:18:01.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/20","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/20","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/20 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/20 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/20 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/20"}}},"commit":{"parents":[{"commit":"e0b6cb1454c9b2152773e1cc03797c8c7c9186ae","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/e0b6cb1454c9b2152773e1cc03797c8c7c9186ae"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-09 10:15:36.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/319635fa5fbff875ddcf94426ea7da12a378bf07"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/319635fa5fbff875ddcf94426ea7da12a378bf07"}]},"branch":"refs/heads/master"},"06f342a10c26db4e89a563c25bcf51b3dfa59f6c":{"kind":"TRIVIAL_REBASE","_number":21,"created":"2026-07-09 10:47:32.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/21","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/21","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/21 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/21 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/21 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/21"}}},"commit":{"parents":[{"commit":"6656af3b81ac40cd7ee8eac3e203a57d7459e7b6","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/6656af3b81ac40cd7ee8eac3e203a57d7459e7b6"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-09 10:46:48.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/06f342a10c26db4e89a563c25bcf51b3dfa59f6c"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/06f342a10c26db4e89a563c25bcf51b3dfa59f6c"}]},"branch":"refs/heads/master"},"74e7fc13c5f185f0687551cc60a2bd44b1bac7f5":{"kind":"TRIVIAL_REBASE","_number":22,"created":"2026-07-09 23:23:39.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/22","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/22","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/22 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/22 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/22 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/22"}}},"commit":{"parents":[{"commit":"2240c6cb371c3bffc6dceeee4eb16099d4af5490","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/2240c6cb371c3bffc6dceeee4eb16099d4af5490"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-09 23:21:16.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/74e7fc13c5f185f0687551cc60a2bd44b1bac7f5"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/74e7fc13c5f185f0687551cc60a2bd44b1bac7f5"}]},"branch":"refs/heads/master"},"20613505dedbc81bd0e2e3803f226ff1badb276c":{"kind":"NO_CHANGE","_number":23,"created":"2026-07-10 02:30:35.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/23","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/23","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/23 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/23 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/23 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/23"}}},"commit":{"parents":[{"commit":"f803eb63f6bbc5e69cae0385cfc6c80d8cc4494c","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/f803eb63f6bbc5e69cae0385cfc6c80d8cc4494c"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-10 02:26:53.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/20613505dedbc81bd0e2e3803f226ff1badb276c"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/20613505dedbc81bd0e2e3803f226ff1badb276c"}]},"branch":"refs/heads/master"},"f84b9982902521fa6e7ecb110e85141286c9be90":{"kind":"TRIVIAL_REBASE","_number":24,"created":"2026-07-10 04:51:06.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/24","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/24","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/24 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/24 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/24 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/24"}}},"commit":{"parents":[{"commit":"5940a6c9d36709445a90ff2c6efbf15f600beb09","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/5940a6c9d36709445a90ff2c6efbf15f600beb09"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-10 04:49:05.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/f84b9982902521fa6e7ecb110e85141286c9be90"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/f84b9982902521fa6e7ecb110e85141286c9be90"}]},"branch":"refs/heads/master"},"c32b713ecedab1af8de00246468fbd1815fee112":{"kind":"TRIVIAL_REBASE","_number":25,"created":"2026-07-10 17:57:46.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/25","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/25","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/25 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/25 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/25 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/25"}}},"commit":{"parents":[{"commit":"71f19144fab782717e8d067c5520a87b3ae3c901","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/71f19144fab782717e8d067c5520a87b3ae3c901"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-10 17:57:00.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/c32b713ecedab1af8de00246468fbd1815fee112"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/c32b713ecedab1af8de00246468fbd1815fee112"}]},"branch":"refs/heads/master"},"1b5399b49af720fbb3f86c36ce8e41da97f817af":{"kind":"TRIVIAL_REBASE","_number":26,"created":"2026-07-10 18:13:55.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/26","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/26","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/26 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/26 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/26 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/26"}}},"commit":{"parents":[{"commit":"4895cc7d413abae91774c1d6c136861c07eb9296","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/4895cc7d413abae91774c1d6c136861c07eb9296"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-10 18:13:28.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/1b5399b49af720fbb3f86c36ce8e41da97f817af"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/1b5399b49af720fbb3f86c36ce8e41da97f817af"}]},"branch":"refs/heads/master"},"0cb3da2489607e7c66dc053d2dcadb1c2d323c86":{"kind":"TRIVIAL_REBASE","_number":27,"created":"2026-07-10 20:28:49.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/27","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/27","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/27 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/27 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/27 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/27"}}},"commit":{"parents":[{"commit":"e295c5334e1a0cd8ee1cc10034c2c44a93885dab","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/e295c5334e1a0cd8ee1cc10034c2c44a93885dab"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-10 20:28:43.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/0cb3da2489607e7c66dc053d2dcadb1c2d323c86"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/0cb3da2489607e7c66dc053d2dcadb1c2d323c86"}]},"branch":"refs/heads/master"},"d076355943a0fe62cfd3dda543ad753d875456e5":{"kind":"TRIVIAL_REBASE","_number":28,"created":"2026-07-10 23:06:58.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/28","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/28","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/28 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/28 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/28 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/28"}}},"commit":{"parents":[{"commit":"c84214064e1b9754fa8a65f3d62a05c9bc9bcee8","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/c84214064e1b9754fa8a65f3d62a05c9bc9bcee8"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-10 23:06:50.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/d076355943a0fe62cfd3dda543ad753d875456e5"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/d076355943a0fe62cfd3dda543ad753d875456e5"}]},"branch":"refs/heads/master"},"d2ab0d2659ec2451e344c1db03b6f01faf8a8f99":{"kind":"TRIVIAL_REBASE","_number":29,"created":"2026-07-11 01:26:56.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/29","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/29","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/29 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/29 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/29 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/29"}}},"commit":{"parents":[{"commit":"870bdb5a8db888d068a03c431fe2fafb7ecc43c5","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/870bdb5a8db888d068a03c431fe2fafb7ecc43c5"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-11 01:26:46.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/d2ab0d2659ec2451e344c1db03b6f01faf8a8f99"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/d2ab0d2659ec2451e344c1db03b6f01faf8a8f99"}]},"branch":"refs/heads/master"},"86876c5bf2b69cc07cc1b6073a17faf90be9f4b9":{"kind":"TRIVIAL_REBASE","_number":30,"created":"2026-07-11 02:35:08.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/30","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/30","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/30 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/30 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/30 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/30"}}},"commit":{"parents":[{"commit":"73928880f69faf140ea5f9a275cbda13d9461137","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/73928880f69faf140ea5f9a275cbda13d9461137"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-11 02:34:59.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/86876c5bf2b69cc07cc1b6073a17faf90be9f4b9"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/86876c5bf2b69cc07cc1b6073a17faf90be9f4b9"}]},"branch":"refs/heads/master"},"8c6452c64802834f8ad33f633fe3748fe391d2f1":{"kind":"TRIVIAL_REBASE","_number":31,"created":"2026-07-11 08:11:42.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/31","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/31","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/31 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/31 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/31 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/31"}}},"commit":{"parents":[{"commit":"c5c9775c9287936990a0d3a32bc4eff4bf80fa5e","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/c5c9775c9287936990a0d3a32bc4eff4bf80fa5e"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-11 08:10:57.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/8c6452c64802834f8ad33f633fe3748fe391d2f1"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/8c6452c64802834f8ad33f633fe3748fe391d2f1"}]},"branch":"refs/heads/master"},"0d9aabbaff4b0685df1d3ae3f9cdfc598ebfd978":{"kind":"TRIVIAL_REBASE","_number":32,"created":"2026-07-11 20:02:12.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/32","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/32","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/32 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/32 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/32 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/32"}}},"commit":{"parents":[{"commit":"50dd95cd796de7a839afc716b1ccac2524392fa6","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/50dd95cd796de7a839afc716b1ccac2524392fa6"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-11 20:01:44.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/0d9aabbaff4b0685df1d3ae3f9cdfc598ebfd978"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/0d9aabbaff4b0685df1d3ae3f9cdfc598ebfd978"}]},"branch":"refs/heads/master"},"eb7708cf045b7f5bf3b945c87f91ffdd3e3c5c45":{"kind":"TRIVIAL_REBASE","_number":33,"created":"2026-07-11 23:31:49.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/33","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/33","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/33 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/33 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/33 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/33"}}},"commit":{"parents":[{"commit":"99c5a6e35cda96d59716eb573a018ed59cd158f6","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/99c5a6e35cda96d59716eb573a018ed59cd158f6"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-11 23:31:08.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/eb7708cf045b7f5bf3b945c87f91ffdd3e3c5c45"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/eb7708cf045b7f5bf3b945c87f91ffdd3e3c5c45"}]},"branch":"refs/heads/master"},"f57db73e496a84ba3e497bc91bce7ee6834eee34":{"kind":"TRIVIAL_REBASE","_number":34,"created":"2026-07-12 03:18:51.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/34","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/34","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/34 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/34 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/34 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/34"}}},"commit":{"parents":[{"commit":"3aecc6dcf572220596c5207fd327ede328d1c619","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/3aecc6dcf572220596c5207fd327ede328d1c619"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-12 03:17:13.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/f57db73e496a84ba3e497bc91bce7ee6834eee34"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/f57db73e496a84ba3e497bc91bce7ee6834eee34"}]},"branch":"refs/heads/master"},"07c2f3a9b6c652fc04234940c22c52bd1c49e947":{"kind":"TRIVIAL_REBASE","_number":35,"created":"2026-07-12 05:48:53.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/35","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/35","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/35 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/35 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/35 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/35"}}},"commit":{"parents":[{"commit":"d3f170d58226be961c2ae1b10cf0363249541809","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/d3f170d58226be961c2ae1b10cf0363249541809"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-12 05:48:43.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/07c2f3a9b6c652fc04234940c22c52bd1c49e947"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/07c2f3a9b6c652fc04234940c22c52bd1c49e947"}]},"branch":"refs/heads/master"},"265630f886b0e2d1ec3ad886adfa7933e990fff1":{"kind":"TRIVIAL_REBASE","_number":36,"created":"2026-07-12 09:23:40.000000000","uploader":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"ref":"refs/changes/17/993317/36","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.messaging","ref":"refs/changes/17/993317/36","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/36 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/36 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/36 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.messaging refs/changes/17/993317/36"}}},"commit":{"parents":[{"commit":"1a2593bf23e8e580c5c9a5434b12eb20cca7de5c","subject":"HTTP-RPC driver: httpx client and pluggable ASGI/WSGI server","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/1a2593bf23e8e580c5c9a5434b12eb20cca7de5c"}]}],"author":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-06-22 22:46:55.000000000","tz":-240},"committer":{"name":"Adam Harwell","email":"flux.adam@gmail.com","date":"2026-07-12 09:23:30.000000000","tz":-240},"subject":"HTTP-RPC driver: Kubernetes Lease service broker","message":"HTTP-RPC driver: Kubernetes Lease service broker\n\nAdd a Kubernetes-native service broker that uses coordination.k8s.io/v1\nLease resources for service discovery, as an alternative to Consul.\nThis plugs into the _create_service_broker() factory via the\nservice_broker_backend option (\u0027consul\u0027 or \u0027k8s\u0027) and requires no\nexternal service or controller.\n\nWhy Leases: unlike an EndpointSlice, a Lease carries native liveness.\nHolders refresh renewTime on a timer; consumers ignore any Lease whose\nrenewTime is older than its leaseDurationSeconds. A process that dies\nwithout unregistering simply stops renewing and its Lease ages out\nwithin one duration window, so consumers stop selecting dead endpoints.\n\nK8sLeaseOperator:\n- register_service() writes the Lease (PATCH-first upsert, create on\n  404) and starts an internal background renewal thread that refreshes\n  renewTime every lease_renew_interval. The renewal is self-contained\n  in the operator; the listener has no heartbeat responsibility.\n- Renewal threads are tracked per service_id and are stopped/joined by\n  unregister_service(), which then deletes the Lease.\n- Consumers discover endpoints by listing Leases (label-filtered,\n  cross-namespace) and dropping any whose renewTime has expired;\n  results are cached with a short TTL.\n- Holders opportunistically reap obviously-dead Leases for their own\n  host (renewTime older than lease_reap_grace_factor *\n  lease_duration_seconds), at startup and at most once per\n  lease_reap_interval. Reaping only deletes provably-dead Leases, so it\n  never races a live holder.\n- ownerReference to the pod enables Kubernetes garbage collection on\n  pod deletion. The wire address prefers POD_IP; advertise_host is used\n  as the TLS server name (SNI) for certificate verification.\n- fanout_endpoint: when set, get_services(\u0027fanout\u0027) returns a static\n  Service pointing at a stable URL (e.g. a ClusterIP Service fronting\n  the broadcaster pods), bypassing Lease discovery for fanout.\n\nConfiguration ([oslo_messaging_http_k8s]): namespace, kubeconfig,\ncache_max_age, cache_evict_after, lease_duration_seconds,\nlease_renew_interval, lease_reap_interval, lease_reap_grace_factor,\nfanout_endpoint. Consul becomes an optional extra (http-consul); the\nK8s backend is the http-k8s extra (kubernetes\u003e\u003d12.0.0).\n\nDEPLOYMENT.md documents RBAC, liveness/reaping, and example manifests.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nChange-Id: I805cfc16d5805b0219bcb805ec998597f9350474\nSigned-off-by: flux.adam@gmail.com\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/265630f886b0e2d1ec3ad886adfa7933e990fff1"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.messaging/commit/265630f886b0e2d1ec3ad886adfa7933e990fff1"}]},"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":{"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":""}}}]}
