Change history — designate — branch stable/2026.2
Branch
stable/2026.2@e3dd774db145— rangec96809e315e8..stable/2026.2(automatic: the point wherestable/2026.2leftmaster, which is the23.0.0tag), 11 non-merge commits — target: none — analysed on 2026-10-29
Raw facts (trailers, files, release notes, carry-over commands): [_inventory/history_stable-2026.2.md](_inventory/history_stable-2026.2.md). No target project was given, so the "in target" column is not computed.
| # | Commit | Date | Category | Change | Bug | Impact | In target |
|---|---|---|---|---|---|---|---|
| 3 | 26d9b96afaa7 | 2025-09-15 | fix | SOA polling treats a non-authoritative, recursive answer as "zone absent" | 1802227 | worker polling; zone deletion on BIND with recursion | — |
| 4 | 9b394e82b56a | 2026-02-11 | fix | sink: IPv6 addresses expanded with ipaddress before building record names; invalid addresses skipped | 1919495 | sink record names (octetN) | — |
| 5 | e860d65b8725 | 2026-03-18 | fix | PATCH /v2/zones/{id} changing only description no longer increments the serial | 1960487 | 01 § PATCH zone; fewer pushes | — |
| 6 | 29efeab55875 | 2026-01-09 | fix | CAA flags accepts 0–255 instead of 0–1 | 1966982 | recordset validation (CAA) | — |
| 7 | 181f61c2ac19 | 2024-04-15 | fix | stopping a service whose tooz coordinator never started no longer raises | 2061457 | shutdown of central/producer | — |
| 8 | ab98ecb5e11b | 2026-07-10 | fix | deleting a pool that only contains its catalog zone is allowed | 2095170 | DELETE /v2/pools/{id}, designate-manage pool update --delete | — |
| 10 | 326b33eb76dd | 2026-10-20 | security | new policy set_floatingip_reverse enforced on PATCH /v2/reverse/floatingips/… | 2161499 | 01 § reverse DNS; policies | — |
| 11 | e3dd774db145 | 2026-10-20 | security | the reverse zone of a floating IP is only looked up among the managed-resource tenant's zones; a name taken by another project → 409 | 2167104 | 01 § reverse DNS; 02 DuplicateZone | — |
3. SOA polling ignores recursive answers — fix
- Commit:
26d9b96afaa74e791202e0cd6ee76f3813416b4b(backport of7e51612545ca) — review https://review.opendev.org/q/I89c5ef0645f9688afb16c6d3c48b55f9c52b6d76 — bug 1802227. - Before / after: after a zone was deleted from a BIND server that is also a recursive resolver, BIND answered the worker's SOA query from the Internet (no
AAflag,RAset); the worker read a serial and kept the zoneDELETE/PENDING, thenERROR. Now such an answer counts as serial 0, i.e. the zone is gone (designate/dnsutils.py:281). - Impact on the specification: 05 polling rules; scenario 3 of 04.
- Upgrade / operations: none.
- Carrying it over: self-contained; test
designate/tests/unit/test_dnsutils.py.
4. IPv6 addresses in sink record names — fix
- Commit:
9b394e82b56a0ec09cb952090f12636828c692de(backport off8599673d2b3) — bug 1919495. - Before / after: the
octetNvariables offormatv6came from splitting the compressed address on::and:, so2001:db8::1gave wrong groups; now the address is expanded (2001:0db8:0000:…:0001) and every group is available; an invalid address is logged and skipped instead of failing the notification (designate/notification_handler/base.py:83,designate/notification_handler/base.py:133). - Impact on the specification: 05 § sink. Deployments using
%(octetN)sinformatv6get different (correct) names: existing records keep their old names until the instance is recreated [inferred]. - Carrying it over: self-contained; the test fixture claiming IPv6 with an IPv4 address was fixed in the same commit.
5. No serial increment for description-only zone updates — fix
- Commit:
e860d65b872565c1d5ed1941c82c5dc8da98eed8(backport ofb125e005bbf4) — bug 1960487. - Before / after: any
PATCHof a PRIMARY zone setincrement_serial, so editing the description triggered a serial bump, a push to every target and NOTIFYs. Now the serial moves only when a field other thandescriptionchanged (designate/api/v2/controllers/zones/__init__.py:175). The zone still goesUPDATE/PENDINGand is answered 202 **[inferred:_update_zone_in_storagealways sets PENDING,designate/central/service.py:1106]**. - Impact on the specification: 01 § PATCH zone.
- Carrying it over: API-only change; test in
designate/tests/functional/api/v2/test_zones.py.
6. CAA flags 0–255 — fix
- Commit:
29efeab55875bac97ce3308d2f4a26f4abdd02f1(backport of527277b8c767) — bug 1966982. - Before / after:
128 issue "ca.example"(critical flag) was refused with 400; any 8-bit value is now accepted (designate/objects/rrdata_caa.py:29). - Carrying it over: one-line change; test
designate/tests/unit/objects/test_rrdata_caa.py.
7. Safe stop of an unstarted coordinator — fix
- Commit:
181f61c2ac19eabd29ec038e767182f028d96acf(backport of2705ee83949e) — bug 2061457. - Before / after: stopping central or the producer when the tooz backend never connected raised
ToozErrorduring shutdown; nowstop()only leaves the group and stops the coordinator when it is started (designate/coordination.py:91). - Carrying it over: test
designate/tests/unit/test_coordination.py.
8. Pool delete with only a catalog zone — fix
- Commit:
ab98ecb5e11bca11bcf93c6f78353668628bb6ad(backport ofcd29b44d819f) — bug 2095170. - Before / after: the "pool must not contain zones" check counted the pool's own catalog zone (the elevated context bypasses the non-admin
!CATALOGfilter), so a pool with a catalog zone could never be deleted (400invalid_operation). The check now excludesCATALOGzones; storage deletes the catalog zone with the pool (designate/central/service.py:2522). - Impact on the specification: 01 § administration resources, 02
InvalidOperation. - Carrying it over: test in
designate/tests/functional/central/test_service.py.
10. Authorisation on floating IP PTR updates — security
- Commit:
326b33eb76ddf35418b2be09b1c9256d379850c4(backport ofe77e3182fdad) — bug 2161499 — release notereleasenotes/notes/fix-floatingip-ptr-authz-0ad8d3636b1dcded.yaml. - Before / after:
update_floatingipcalled no policy, so a projectreadercould set or unset the PTR records of the project's floating IPs. The new ruleset_floatingip_reverse=admin or (member and project_id)is checked first (designate/central/service.py:2341,designate/common/policies/record.py:63). - Upgrade / operations: deployments with custom
policy.yamlfiles must add the rule if they restrict members; readers now get 403. - Carrying it over: prerequisite of 11 (same function area); tests in
designate/tests/functional/api/v2/test_floatingips.pyanddesignate/tests/functional/central/test_service.py.
11. Reverse zone hijack — security
- Commit:
e3dd774db145f27dbae214fcee50d3a4f5b7e2b5(backport of794d99c5bb66) — bug 2167104 — release notereleasenotes/notes/fix-floatingip-ptr-zone-hijack-26fa38fa4e1bb2f4.yaml. - Before / after: the reverse zone (
x.y.z.in-addr.arpa.) was looked up by name across all projects. A project could create that zone first and receive the PTR records of every other project's floating IPs in the range. The lookup and its race-condition fallback are now restricted tomanaged_resource_tenant_id; a zone of that name owned by anyone else → 409duplicate_zone(designate/central/service.py:2073,designate/central/service.py:2134). - Upgrade / operations: existing hijacked zones are not cleaned up: operators should look for
*.in-addr.arpa.zones not owned by the managed-resource tenant [inferred]. - Carrying it over: apply after 10; test in
designate/tests/functional/central/test_service.py.
Maintenance-only changes
| Commit | Subject | Why it is usually not carried over |
|---|---|---|
e437032be7d3 | Update .gitreview for stable/2026.2 | branch bookkeeping |
543ba092a125 | Update TOX_CONSTRAINTS_FILE for stable/2026.2 | CI constraints |
8cc2b33ca225 | Send raw zone files in the import tests | test-only (bug 2170787): the import tests now post text/dns bodies as raw bytes |
Carry-over plan
git cherry-pick -x 26d9b96afaa74e791202e0cd6ee76f3813416b4b # fix: SOA polling ignores recursive answers
git cherry-pick -x 9b394e82b56a0ec09cb952090f12636828c692de # fix: IPv6 addresses in sink record names
git cherry-pick -x e860d65b872565c1d5ed1941c82c5dc8da98eed8 # fix: no serial increment for description-only updates
git cherry-pick -x 29efeab55875bac97ce3308d2f4a26f4abdd02f1 # fix: CAA flags 0-255
git cherry-pick -x 181f61c2ac19eabd29ec038e767182f028d96acf # fix: safe stop of an unstarted coordinator
git cherry-pick -x ab98ecb5e11bca11bcf93c6f78353668628bb6ad # fix: pool delete with only a catalog zone
git cherry-pick -x 326b33eb76ddf35418b2be09b1c9256d379850c4 # security: policy on floating IP PTR updates (before the next one)
git cherry-pick -x e3dd774db145f27dbae214fcee50d3a4f5b7e2b5 # security: reverse zone hijack
For openkeel-designate, items 3 (polling semantics, if an SOA check is kept), 5, 6, 8, 10 and 11 are behaviour to implement from the start; 4 applies to the sink replacement; 7 has no equivalent.
Source: reverse-spec-designate/06-change-history_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.