Hi Rob,
It's a regression. Funny enough, caused by the commit optimization for you :-D
Daniel
On 10/1/25 14:10, Robert Mueller wrote:
Hi
We recently tried to upgrade to knot 3.5.0, but ran into a problem. It appears zones
added via |conf-set include| are not working until knot is reloaded.
So to reduce calls to knotc when inserting a number of domains, we build a config
fragment and then use |knotc conf-set include fragment.conf| to load it
With 3.4.8 this worked fine. For example:
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock status
version
3.4.8
# dig +short
foo.com @10.37.129.215 SOA
# cat > /local/knot_dns/zones/foo.com.zone <<EOF
foo.com. 3600 IN SOA (
ns1.fastmaildev.com.
postmaster.fastmaildev.com.
2025091802 ;serial
86133 ;refresh
600 ;retry
1209600 ;expire
3600 ;minimum
)
foo.com. 3600 IN NS
ns1.fastmaildev.com.
foo.com. 3600 IN NS
ns2.fastmaildev.com.
EOF
# cat > /tmp/zone.conf <<EOF
zone:
- domain:
foo.com
template: "default"
EOF
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock conf-begin
OK
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock conf-set
include /tmp/zone.conf
OK
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock
conf-commit
OK
# dig +short
foo.com @10.37.129.215 SOA
ns1.fastmaildev.com.
postmaster.fastmaildev.com. 2025091802 86133 600 1209600 3600
As you can see, immediately after the |conf-commit|, the zone can be queried via dig.
However this doesn't work in 3.5.0.
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock status
version
3.5.0
# dig +short
foo2.com @10.37.129.215 SOA
# cat > /local/knot_dns/zones/foo2.com.zone <<EOF
foo2.com. 3600 IN SOA (
ns1.fastmaildev.com.
postmaster.fastmaildev.com.
2025091802 ;serial
86133 ;refresh
600 ;retry
1209600 ;expire
3600 ;minimum
)
foo2.com. 3600 IN NS
ns1.fastmaildev.com.
foo2.com. 3600 IN NS
ns2.fastmaildev.com.
EOF
# cat > /tmp/zone.conf <<EOF
zone:
- domain:
foo2.com
template: "default"
EOF
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock conf-begin
OK
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock conf-set
include /tmp/zone.conf
OK
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock
conf-commit
OK
# dig +short
foo2.com @10.37.129.215 SOA
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock
zone-status
foo2.com
error: [
foo2.com] (no such zone found)
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock
zone-reload
foo2.com
error: [
foo2.com] (no such zone found)
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock zone-check
foo2.com
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock reload
Reloaded
# dig +short
foo2.com @10.37.129.215 SOA
ns1.fastmaildev.com.
postmaster.fastmaildev.com. 2025091802 86133 600 1209600 3600
# /opt/knot/sbin/knotc -C /local/knot_dns/conf/ -s /run/knot_dns/knot_dns.sock
zone-status
foo2.com
[
foo2.com.] role: master | serial: 2025091802
As you can see, after the |conf-commit| the zone isn't visible in knot at all, either
via dig or even via knotc commands |zone-status| or |zone-reload|. However immediately
after a knot server |reload|, it does become visible.
This feels like a bug and regression in 3.5.0 to me, or am I holding something wrong?
Rob Mueller
robm(a)fastmail.com <mailto:robm@fastmail.com>
--