)]}'
{"id":"openstack%2Fdesignate~1004013","triplet_id":"openstack%2Fdesignate~master~I4613d45306b37ed2ef849bcfaf149372ce78dc8e","project":"openstack/designate","branch":"master","attention_set":{},"removed_from_attention_set":{"30176":{"account":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"last_update":"2026-09-05 06:24:05.000000000","reason":"removed on reply"}},"hashtags":[],"change_id":"I4613d45306b37ed2ef849bcfaf149372ce78dc8e","subject":"Recover ACTIVE zones with records stranded in PENDING","status":"NEW","created":"2026-09-04 17:06:44.000000000","updated":"2026-09-05 07:40:14.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"26f6077e49ac224d2c5128b60821e5a15a11e530","_number":1004013,"virtual_id_number":1004013,"owner":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},{"tag":"autogenerated:zuul:check","value":1,"date":"2026-09-05 07:40:14.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":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},{"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":[{"value":0,"permitted_voting_range":{"min":-1,"max":0},"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},{"_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},"Review-Priority":{"all":[{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Branch Freeze"," 0":"No Priority","+1":"Important Change","+2":"Gate Blocker Fix / Urgent Change"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-09-04 20:04:35.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":"fccc4b1306882df3730d29e554a1a86d0f55a936","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"date":"2026-09-04 17:06:44.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"66d4cc10323a7db16ba069b10681723f37a5dfd9","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"date":"2026-09-04 17:52:16.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"dab38f3a116ac0eece99a9a8a25db1cb8cf7fa23","author":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"date":"2026-09-04 17:53:06.000000000","message":"Patch Set 2: Workflow-1\n\nSetting Workflow-1 (WIP): reworking the RecoverShard self-heal to serial-based strand detection; validating on an AIO before review.","accounts_in_message":[],"_revision_number":2},{"id":"ee574f75a56a7b6121d5f5bd4a30142a934b05b1","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"date":"2026-09-04 18:00:35.000000000","message":"Uploaded patch set 3: Patch Set 2 was rebased.\n\nOutdated Votes:\n* Workflow-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":3},{"id":"754caab8d2f63f0dfe0f2006d6e48d4ad7157056","author":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"date":"2026-09-04 18:03:12.000000000","message":"Patch Set 3: Workflow-1\n\nRe-marking WIP after re-parenting onto master (now unrelated to 1004012); validating on an AIO before review.","accounts_in_message":[],"_revision_number":3},{"id":"45110d16d70be3c4404ce73fb4cdfb133295443c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"date":"2026-09-04 18:06:13.000000000","message":"Uploaded patch set 4: Commit message was updated.\n\nOutdated Votes:\n* Workflow-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":4},{"id":"0d1e5bd798be87269f9f36f0d9cabe4fa367ba2a","author":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"date":"2026-09-04 18:18:38.000000000","message":"Patch Set 4: Workflow-1\n\nWIP: held for AIO validation of the increment_serial PENDING-race fixes.","accounts_in_message":[],"_revision_number":4},{"id":"fcf7e430db5370bb695e11d9986fe12cb7e3acd2","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"date":"2026-09-04 18:46:56.000000000","message":"Uploaded patch set 5: Commit message was updated.\n\nOutdated Votes:\n* Workflow-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":5},{"id":"b319d353cad53a1449a53c2acdf08a8f3d0d7a02","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-04 20:04:35.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/2c7880d1fc6e445f953e4b3137e01eaf\n\n- designate-bind9-core https://zuul.opendev.org/t/openstack/build/dc01e4ec902d4369b6c3164f9089923c : SUCCESS in 40m 32s\n- designate-bind9-with-keystone-default-roles https://zuul.opendev.org/t/openstack/build/d87b15bea203421489573a494280beba : SUCCESS in 43m 51s\n- designate-pdns4-core https://zuul.opendev.org/t/openstack/build/5b8d60624e814f37a900592ffae020dc : SUCCESS in 44m 10s\n- designate-bind9-multipool https://zuul.opendev.org/t/openstack/build/58c86c96266e4ba5922f23a9c6a0e79b : SUCCESS in 32m 02s\n- designate-grenade-bind9 https://zuul.opendev.org/t/openstack/build/b371908c1127484f90ae7854e7612515 : SUCCESS in 51m 52s\n- designate-grenade-pdns4 https://zuul.opendev.org/t/openstack/build/0ce4da111c6c4204879ecbf3b90a8379 : SUCCESS in 1h 10m 48s\n- designate-grenade-bind9-skip-level https://zuul.opendev.org/t/openstack/build/2eff069be8644812a0de8d7d4eee25e2 : SUCCESS in 58m 54s\n- designate-grenade-pdns4-skip-level https://zuul.opendev.org/t/openstack/build/df48d06d54fd4d42bdd2c0b3e4b1c9ff : SUCCESS in 1h 07m 39s\n- designate-bind9-core-catalog-zones https://zuul.opendev.org/t/openstack/build/4363eb99619d4f60b69f9d6478303c9a : SUCCESS in 38m 47s (non-voting)\n- designate-only-ipv6-pdns4 https://zuul.opendev.org/t/openstack/build/352885bce7ee402d9fc219ce6a6ca4b4 : SUCCESS in 36m 59s\n- designate-only-ipv6-bind9 https://zuul.opendev.org/t/openstack/build/373e8bfac5d04408b07f21d1d28375dd : SUCCESS in 44m 54s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/2b8d8ed9ef2c4e408a1ba51d6b890d14 : SUCCESS in 7m 57s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/fcf374f593dc46cbb2724dfadf853cec : SUCCESS in 4m 52s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/e489c62b288a4e0db712d29904199d6f : SUCCESS in 4m 51s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/e5621f4e04ec4bf1b72d2ca65c1cacac : SUCCESS in 8m 00s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/c55b9237e0944d49868c76d3c74b875b : SUCCESS in 10m 49s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/80637991071845aa8821097c323e7773 : SUCCESS in 8m 48s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/99f79a69134e4c419abdaeae24333c0a : SUCCESS in 6m 03s\n- neutron-tempest-plugin-designate-scenario https://zuul.opendev.org/t/openstack/build/04b6101ac1cf4bac9da76517da914881 : SUCCESS in 30m 26s\n- designate-tox-dnspython-latest https://zuul.opendev.org/t/openstack/build/ad01fddfb2674dd5a08e7931adc26750 : FAILURE in 6m 24s","accounts_in_message":[],"_revision_number":5},{"id":"055713e2b0d3cbd6519dc8add5f5110e3b9cec4c","author":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"date":"2026-09-05 06:24:05.000000000","message":"Patch Set 5:\n\nrecheck - the only failing job (designate-tox-dnspython-latest) failed on an unrelated heartbeat_emitter/oslo_service looping-call error in test_is_valid_zone_name_with_tlds, not this change.","accounts_in_message":[],"_revision_number":5},{"id":"26f6077e49ac224d2c5128b60821e5a15a11e530","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-05 07:40:14.000000000","message":"Patch Set 5: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/408bfea1d40e4438b70e6931075b7b7f\n\n- designate-bind9-core https://zuul.opendev.org/t/openstack/build/d194396050384beaa96e791cd8d0ae99 : SUCCESS in 42m 00s\n- designate-bind9-with-keystone-default-roles https://zuul.opendev.org/t/openstack/build/397a49766cd944dc95d9d4cef0422754 : SUCCESS in 49m 16s\n- designate-pdns4-core https://zuul.opendev.org/t/openstack/build/b19d1113e00f45e9b3e0ea0f51b488dc : SUCCESS in 45m 52s\n- designate-bind9-multipool https://zuul.opendev.org/t/openstack/build/50a661fc309e483ca38644ee306c59f8 : SUCCESS in 31m 07s\n- designate-grenade-bind9 https://zuul.opendev.org/t/openstack/build/e89bb1e3ab444d14acc6c36fc35822da : SUCCESS in 47m 46s\n- designate-grenade-pdns4 https://zuul.opendev.org/t/openstack/build/c873b4db144c444c89aa7e470ea988f6 : SUCCESS in 1h 02m 34s\n- designate-grenade-bind9-skip-level https://zuul.opendev.org/t/openstack/build/14a0f11f3d254f358f9eb2879e0f79f8 : SUCCESS in 1h 10m 46s\n- designate-grenade-pdns4-skip-level https://zuul.opendev.org/t/openstack/build/159713ba7e924da493193bf952f7cfaf : SUCCESS in 1h 07m 29s\n- designate-bind9-core-catalog-zones https://zuul.opendev.org/t/openstack/build/8906ec9b9fc1448cb6c9b82d0331b0e3 : SUCCESS in 41m 29s (non-voting)\n- designate-only-ipv6-pdns4 https://zuul.opendev.org/t/openstack/build/6b1593f2f64740adae8394d308475b00 : SUCCESS in 48m 03s\n- designate-only-ipv6-bind9 https://zuul.opendev.org/t/openstack/build/dee38710797d4c9da38b8dd0c82c5ed9 : SUCCESS in 39m 18s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/68747189a434493d98cdd1056d53aa47 : SUCCESS in 3m 34s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/2501eef48a6a4b598475cdf7cd3b7960 : SUCCESS in 1m 53s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/5ed3593fb3fb4c5592e3b0e8ee3c2593 : SUCCESS in 8m 18s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/3885ba84edb14fe5a0e4d377d90a734b : SUCCESS in 6m 40s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/0d9e1c78aed94d5cbb3301bd695c6cea : SUCCESS in 6m 51s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/eae39567396e4c2aa1c9a4926ab11852 : SUCCESS in 8m 57s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/7f515c8780894ca2a4f79fb1338345aa : SUCCESS in 3m 32s\n- neutron-tempest-plugin-designate-scenario https://zuul.opendev.org/t/openstack/build/883b61ae105d4a0fb2c05fbdfd661407 : SUCCESS in 30m 02s\n- designate-tox-dnspython-latest https://zuul.opendev.org/t/openstack/build/1d43cd31f35048fd8480ac7e5ca96f6b : SUCCESS in 3m 33s","accounts_in_message":[],"_revision_number":5}],"current_revision_number":5,"current_revision":"d0ef59ad6b0d4e4028019ca5063b1a231d559436","revisions":{"57ee3e4d784ee7cd113cc173f6f41e1eb385bb9b":{"kind":"REWORK","_number":1,"created":"2026-09-04 17:06:44.000000000","uploader":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"ref":"refs/changes/13/1004013/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/designate","ref":"refs/changes/13/1004013/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/designate refs/changes/13/1004013/1"}}},"commit":{"parents":[{"commit":"01af441c7d047a5965489f01042b2d8bcf89c707","subject":"Keep increment_serial flag raised for newer pending records","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/01af441c7d047a5965489f01042b2d8bcf89c707"}]}],"author":{"name":"Michiel Piscaer","email":"michiel@piscaer.com","date":"2026-09-04 15:50:54.000000000","tz":120},"committer":{"name":"Michiel Piscaer","email":"michiel@piscaer.com","date":"2026-09-04 17:06:33.000000000","tz":120},"subject":"Recover ACTIVE zones with records stranded in PENDING","message":"Recover ACTIVE zones with records stranded in PENDING\n\nThe periodic worker recovery (RecoverShard) only re-drove zones that\nwere in ERROR or stuck PENDING. A record stranded by the increment_serial\nlost-update race leaves the zone ACTIVE while the record stays PENDING\nwith a serial past the published one, so neither the producer (needs the\nincrement_serial flag set) nor RecoverShard (keyed on zone status) ever\nrevisited it -- the record stayed PENDING until the zone was manually\npoked.\n\nAdd storage.find_stranded_zone_ids() to locate ACTIVE zones (action\nNONE) that still carry a PENDING record older than the propagation\nwindow, and have RecoverShard re-drive them by republishing a fresh\nserial (which now covers the stranded record) and re-notifying the\nbackend, mirroring PeriodicIncrementSerialTask. update_status then flips\nthe record ACTIVE. This is a belt-and-braces self-heal that also clears\nhistorical strands and covers the consensus-lag variant of the race.\n\nChange-Id: I4613d45306b37ed2ef849bcfaf149372ce78dc8e\nSigned-off-by: Michiel Piscaer \u003cmichiel@piscaer.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/57ee3e4d784ee7cd113cc173f6f41e1eb385bb9b"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/57ee3e4d784ee7cd113cc173f6f41e1eb385bb9b"}]},"branch":"refs/heads/master"},"965f292c8ca6990f67e50511002ecb0e7d866bc6":{"kind":"REWORK","_number":2,"created":"2026-09-04 17:52:16.000000000","uploader":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"ref":"refs/changes/13/1004013/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/designate","ref":"refs/changes/13/1004013/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/designate refs/changes/13/1004013/2"}}},"commit":{"parents":[{"commit":"01af441c7d047a5965489f01042b2d8bcf89c707","subject":"Keep increment_serial flag raised for newer pending records","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/01af441c7d047a5965489f01042b2d8bcf89c707"}]}],"author":{"name":"Michiel Piscaer","email":"michiel@piscaer.com","date":"2026-09-04 15:50:54.000000000","tz":120},"committer":{"name":"Michiel Piscaer","email":"michiel@piscaer.com","date":"2026-09-04 17:51:57.000000000","tz":120},"subject":"Recover ACTIVE zones with records stranded in PENDING","message":"Recover ACTIVE zones with records stranded in PENDING\n\nThe periodic worker recovery (RecoverShard) only re-drove zones that were\nin ERROR or stuck PENDING. A record stranded by the increment_serial race\nleaves the zone ACTIVE while the record stays PENDING, so neither the\nproducer (needs the increment_serial flag set) nor RecoverShard (keyed on\nzone status) ever revisited it -- the record stayed PENDING until the zone\nwas manually poked.\n\nAdd storage.find_stranded_zone_ids() to locate ACTIVE zones (action NONE)\nthat still carry a PENDING record whose serial is not newer than the zone\u0027s\nown published serial. Once a zone has converged ACTIVE at serial S,\nupdate_status has flipped every record with serial \u003c\u003d S ACTIVE in the same\ntransaction, so a PENDING record with serial \u003c\u003d the ACTIVE zone\u0027s serial is\nprovably stranded (the backend already knows a serial that covers it). A\ngenuinely in-flight write always carries a higher serial and keeps the zone\nPENDING, so it is excluded without any time-based cutoff.\n\nRecoverShard re-drives these zones by republishing the serial and\nre-notifying the backend, mirroring PeriodicIncrementSerialTask;\nupdate_status then flips the record ACTIVE. This is a belt-and-braces\nself-heal that clears historical strands and covers the consensus-lag\nvariant of the race that the increment_serial flag fix alone cannot.\n\nSigned-off-by: Michiel Piscaer \u003cmichiel@piscaer.com\u003e\nChange-Id: I4613d45306b37ed2ef849bcfaf149372ce78dc8e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/965f292c8ca6990f67e50511002ecb0e7d866bc6"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/965f292c8ca6990f67e50511002ecb0e7d866bc6"}]},"branch":"refs/heads/master"},"a28d26a08281f171a80d3b01880148a52a78d32f":{"kind":"TRIVIAL_REBASE","_number":3,"created":"2026-09-04 18:00:35.000000000","uploader":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"ref":"refs/changes/13/1004013/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/designate","ref":"refs/changes/13/1004013/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/designate refs/changes/13/1004013/3"}}},"commit":{"parents":[{"commit":"057946092766379132b64bfb56dd5c0c3d07f3a0","subject":"Merge \"Document pool update merge behavior\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/057946092766379132b64bfb56dd5c0c3d07f3a0"}]}],"author":{"name":"Michiel Piscaer","email":"michiel@piscaer.com","date":"2026-09-04 15:50:54.000000000","tz":120},"committer":{"name":"Michiel Piscaer","email":"michiel@piscaer.com","date":"2026-09-04 18:00:33.000000000","tz":120},"subject":"Recover ACTIVE zones with records stranded in PENDING","message":"Recover ACTIVE zones with records stranded in PENDING\n\nThe periodic worker recovery (RecoverShard) only re-drove zones that were\nin ERROR or stuck PENDING. A record stranded by the increment_serial race\nleaves the zone ACTIVE while the record stays PENDING, so neither the\nproducer (needs the increment_serial flag set) nor RecoverShard (keyed on\nzone status) ever revisited it -- the record stayed PENDING until the zone\nwas manually poked.\n\nAdd storage.find_stranded_zone_ids() to locate ACTIVE zones (action NONE)\nthat still carry a PENDING record whose serial is not newer than the zone\u0027s\nown published serial. Once a zone has converged ACTIVE at serial S,\nupdate_status has flipped every record with serial \u003c\u003d S ACTIVE in the same\ntransaction, so a PENDING record with serial \u003c\u003d the ACTIVE zone\u0027s serial is\nprovably stranded (the backend already knows a serial that covers it). A\ngenuinely in-flight write always carries a higher serial and keeps the zone\nPENDING, so it is excluded without any time-based cutoff.\n\nRecoverShard re-drives these zones by republishing the serial and\nre-notifying the backend, mirroring PeriodicIncrementSerialTask;\nupdate_status then flips the record ACTIVE. This is a belt-and-braces\nself-heal that clears historical strands and covers the consensus-lag\nvariant of the race that the increment_serial flag fix alone cannot.\n\nSigned-off-by: Michiel Piscaer \u003cmichiel@piscaer.com\u003e\nChange-Id: I4613d45306b37ed2ef849bcfaf149372ce78dc8e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/a28d26a08281f171a80d3b01880148a52a78d32f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/a28d26a08281f171a80d3b01880148a52a78d32f"}]},"branch":"refs/heads/master"},"90dcc5b85e19e4dd82b2cbc38f3fbee40d09049d":{"kind":"NO_CODE_CHANGE","_number":4,"created":"2026-09-04 18:06:13.000000000","uploader":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"ref":"refs/changes/13/1004013/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/designate","ref":"refs/changes/13/1004013/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/designate refs/changes/13/1004013/4"}}},"commit":{"parents":[{"commit":"057946092766379132b64bfb56dd5c0c3d07f3a0","subject":"Merge \"Document pool update merge behavior\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/057946092766379132b64bfb56dd5c0c3d07f3a0"}]}],"author":{"name":"Michiel Piscaer","email":"michiel@piscaer.com","date":"2026-09-04 15:50:54.000000000","tz":120},"committer":{"name":"Michiel Piscaer","email":"michiel@piscaer.com","date":"2026-09-04 18:06:09.000000000","tz":120},"subject":"WIP: Recover ACTIVE zones with records stranded in PENDING","message":"WIP: Recover ACTIVE zones with records stranded in PENDING\n\nThe periodic worker recovery (RecoverShard) only re-drove zones that were\nin ERROR or stuck PENDING. A record stranded by the increment_serial race\nleaves the zone ACTIVE while the record stays PENDING, so neither the\nproducer (needs the increment_serial flag set) nor RecoverShard (keyed on\nzone status) ever revisited it -- the record stayed PENDING until the zone\nwas manually poked.\n\nAdd storage.find_stranded_zone_ids() to locate ACTIVE zones (action NONE)\nthat still carry a PENDING record whose serial is not newer than the zone\u0027s\nown published serial. Once a zone has converged ACTIVE at serial S,\nupdate_status has flipped every record with serial \u003c\u003d S ACTIVE in the same\ntransaction, so a PENDING record with serial \u003c\u003d the ACTIVE zone\u0027s serial is\nprovably stranded (the backend already knows a serial that covers it). A\ngenuinely in-flight write always carries a higher serial and keeps the zone\nPENDING, so it is excluded without any time-based cutoff.\n\nRecoverShard re-drives these zones by republishing the serial and\nre-notifying the backend, mirroring PeriodicIncrementSerialTask;\nupdate_status then flips the record ACTIVE. This is a belt-and-braces\nself-heal that clears historical strands and covers the consensus-lag\nvariant of the race that the increment_serial flag fix alone cannot.\n\nSigned-off-by: Michiel Piscaer \u003cmichiel@piscaer.com\u003e\nChange-Id: I4613d45306b37ed2ef849bcfaf149372ce78dc8e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/90dcc5b85e19e4dd82b2cbc38f3fbee40d09049d"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/90dcc5b85e19e4dd82b2cbc38f3fbee40d09049d"}]},"branch":"refs/heads/master"},"d0ef59ad6b0d4e4028019ca5063b1a231d559436":{"kind":"NO_CODE_CHANGE","_number":5,"created":"2026-09-04 18:46:56.000000000","uploader":{"_account_id":30176,"name":"masterpe","email":"michiel@piscaer.com","username":"masterpe"},"ref":"refs/changes/13/1004013/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/designate","ref":"refs/changes/13/1004013/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/designate refs/changes/13/1004013/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/designate refs/changes/13/1004013/5"}}},"commit":{"parents":[{"commit":"057946092766379132b64bfb56dd5c0c3d07f3a0","subject":"Merge \"Document pool update merge behavior\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/057946092766379132b64bfb56dd5c0c3d07f3a0"}]}],"author":{"name":"Michiel Piscaer","email":"michiel@piscaer.com","date":"2026-09-04 15:50:54.000000000","tz":120},"committer":{"name":"Michiel Piscaer","email":"michiel@piscaer.com","date":"2026-09-04 18:46:52.000000000","tz":120},"subject":"Recover ACTIVE zones with records stranded in PENDING","message":"Recover ACTIVE zones with records stranded in PENDING\n\nThe periodic worker recovery (RecoverShard) only re-drove zones that were\nin ERROR or stuck PENDING. A record stranded by the increment_serial race\nleaves the zone ACTIVE while the record stays PENDING, so neither the\nproducer (needs the increment_serial flag set) nor RecoverShard (keyed on\nzone status) ever revisited it -- the record stayed PENDING until the zone\nwas manually poked.\n\nAdd storage.find_stranded_zone_ids() to locate ACTIVE zones (action NONE)\nthat still carry a PENDING record whose serial is not newer than the zone\u0027s\nown published serial. Once a zone has converged ACTIVE at serial S,\nupdate_status has flipped every record with serial \u003c\u003d S ACTIVE in the same\ntransaction, so a PENDING record with serial \u003c\u003d the ACTIVE zone\u0027s serial is\nprovably stranded (the backend already knows a serial that covers it). A\ngenuinely in-flight write always carries a higher serial and keeps the zone\nPENDING, so it is excluded without any time-based cutoff.\n\nRecoverShard re-drives these zones by republishing the serial and\nre-notifying the backend, mirroring PeriodicIncrementSerialTask;\nupdate_status then flips the record ACTIVE. This is a belt-and-braces\nself-heal that clears historical strands and covers the consensus-lag\nvariant of the race that the increment_serial flag fix alone cannot.\n\nSigned-off-by: Michiel Piscaer \u003cmichiel@piscaer.com\u003e\nChange-Id: I4613d45306b37ed2ef849bcfaf149372ce78dc8e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/d0ef59ad6b0d4e4028019ca5063b1a231d559436"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/designate/commit/d0ef59ad6b0d4e4028019ca5063b1a231d559436"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY"},{"label":"Workflow","status":"MAY"},{"label":"Review-Priority","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"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":"Review-Priority","description":"Review priority","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"-label:Review-Priority\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":[],"failing_atoms":["label:Review-Priority\u003dMIN"],"atom_explanations":{"label:Review-Priority\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":""}}}]}
