Catalog zone UPDATE is not processed if previous UPDATE processing is not finished yet.
Knot is configured as primary for a master zone and this zone gets dynamic updates. When and UPDATE is sent before the previous UPDATE was finished, the new UPDATE will not be processed.
Here a short example with adding/deleting 2 zones from catalog:
./update.py add 25619749 test2.klaus
12:17:54 debug: [catz.] ACL, allowed, action update, remote 95.179.153.21@52926, key 'knot_test.'
12:17:54 info: [catz.] DDNS, processing 1 updates
12:17:54 info: [catz.] catalog reloaded, 1 updates
12:17:54 info: [catz.] DDNS, finished, serial 1650637901 -> 1650637902, 0.04 seconds
12:17:54 info: [catz.] zone file updated, serial 1650637901 -> 1650637902
6 seconds delay
12:18:01 info: [test2.klaus.] zone will be loaded
12:18:01 info: [test2.klaus.] zone added from catalog
12:18:01 info: [test2.klaus.] zone will be bootstrapped
12:18:02 info: [test2.klaus.] AXFR, incoming, remote 127.0.0.1@14001, started
12:18:02 info: [test2.klaus.] AXFR, incoming, remote 127.0.0.1@14001, finished, 0.00 seconds, 3 messages, 314 bytes
12:18:02 info: [test2.klaus.] zone stored to journal, serial 2022042501
12:18:02 info: [test2.klaus.] refresh, remote 127.0.0.1@14001, zone updated, 0.00 seconds, serial none -> 2022042501
./update.py add 25619750 test3.klaus
12:18:10 debug: [catz.] ACL, allowed, action update, remote 95.179.153.21@53002, key 'knot_test.'
12:18:10 info: [catz.] DDNS, processing 1 updates
12:18:10 info: [catz.] catalog reloaded, 1 updates
12:18:10 info: [catz.] DDNS, finished, serial 1650637902 -> 1650637903, 0.03 seconds
12:18:10 info: [catz.] zone file updated, serial 1650637902 -> 1650637903
6 seconds delay
12:18:16 info: [test3.klaus.] zone will be loaded
12:18:16 info: [test3.klaus.] zone will be bootstrapped
12:18:16 info: [test3.klaus.] zone added from catalog
12:18:17 info: [types.test.] zone will be bootstrapped
12:18:17 info: [test3.klaus.] AXFR, incoming, remote 127.0.0.1@14001, started
12:18:17 info: [test3.klaus.] AXFR, incoming, remote 127.0.0.1@14001, finished, 0.00 seconds, 3 messages, 314 bytes
12:18:17 info: [test3.klaus.] zone stored to journal, serial 2022042501
12:18:17 info: [test3.klaus.] refresh, remote 127.0.0.1@14001, zone updated, 0.00 seconds, serial none -> 2022042501
./update.py del 25619749 test2.klaus
12:21:11 debug: [catz.] ACL, allowed, action update, remote 95.179.153.21@53580, key 'knot_test.'
12:21:11 info: [catz.] DDNS, processing 1 updates
12:21:11 info: [catz.] catalog reloaded, 1 updates
12:21:11 info: [catz.] DDNS, finished, serial 1650637903 -> 1650637904, 0.03 seconds
12:21:11 info: [catz.] zone file updated, serial 1650637903 -> 1650637904
6 seconds delay
12:21:17 notice: [test2.klaus.] zone purged
./update.py del 25619750 test3.klaus
12:22:00 debug: [catz.] ACL, allowed, action update, remote 95.179.153.21@53724, key 'knot_test.'
12:22:00 info: [catz.] DDNS, processing 1 updates
12:22:00 info: [catz.] catalog reloaded, 1 updates
12:22:00 info: [catz.] DDNS, finished, serial 1650637904 -> 1650637905, 0.03 seconds
12:22:00 info: [catz.] zone file updated, serial 1650637904 -> 1650637905
6 seconds delay
12:22:06 notice: [test3.klaus.] zone purged
Adding a second member zones shortly after the other
./update.py add 25619749 test2.klaus
./update.py add 25619750 test3.klaus
12:25:58 debug: [catz.] ACL, allowed, action update, remote 95.179.153.21@54498, key 'knot_test.'
12:25:58 info: [catz.] DDNS, processing 1 updates
12:25:59 info: [catz.] catalog reloaded, 1 updates
12:25:59 info: [catz.] DDNS, finished, serial 1650637907 -> 1650637908, 0.04 seconds
12:25:59 info: [catz.] zone file updated, serial 1650637907 -> 1650637908
12:26:00 debug: [catz.] ACL, allowed, action update, remote 95.179.153.21@54506, key 'knot_test.'
6 seconds delay
12:26:05 info: [test2.klaus.] zone will be loaded
12:26:05 info: [test2.klaus.] zone added from catalog
12:26:05 info: [test2.klaus.] zone will be bootstrapped
12:26:06 info: [test2.klaus.] AXFR, incoming, remote 127.0.0.1@14001, started
12:26:06 info: [test2.klaus.] AXFR, incoming, remote 127.0.0.1@14001, finished, 0.00 seconds, 3 messages, 314 bytes
12:26:06 info: [test2.klaus.] zone stored to journal, serial 2022042501
12:26:06 info: [test2.klaus.] refresh, remote 127.0.0.1@14001, zone updated, 0.01 seconds, serial none -> 2022042501
--> test3.klaus is missing. The second UPDATE gets "allowed", is counted by "global-stats", but the "25619750.zones.catz. PTR klaus3.test" RR is not added to the catz zone and hence klaus3.test zone is not created.
Our config:
server:
# Listen on all configured IPv4 interfaces.
...
# keep connections open
remote-pool-limit: 5
tcp-idle-timeout: 90 # default 10
rundir: /var/lib/knot-shared1
database:
storage: "/var/lib/knot-shared1"
timer-db-max-size: 500000000
log:
- target: stdout
any: debug
remote:
- id: primary
address: 127.0.0.1@14001
key:
- id: knot_test
...
acl:
- id: acl_primary
address: 95.179.153.21
action: [notify, transfer]
- id: update_acl
address: 95.179.153.21
action: [update, transfer]
key: knot_test
- id: axfr_acl
address: 95.179.153.21
action: transfer
mod-dnstap:
- id: querylogging
sink: /tmp/knot-shared1-querylogging
identity: reg-amy1-shared1
log-queries: on
log-responses: on
responses-with-queries: on
template:
- id: default
storage: "/var/lib/knot-shared1"
zonefile-sync: -1
zonefile-load: none
journal-content: all
master: primary
acl: acl_primary
refresh-min-interval: 72000 # 20h
refresh-max-interval: 86400 # 24h
retry-min-interval: 72000 # 20h
retry-max-interval: 86400 # 24h
semantic-checks: soft
global-module: mod-dnstap/querylogging
global-module: mod-stats
- id: catz
storage: "/var/lib/knot-shared1"
file: "catz.zone"
journal-content: all
zonefile-load: difference
module: mod-dnstap/querylogging
zone:
- domain: catz.
catalog-role: interpret
catalog-template: default
template: catz
acl: [update_acl, axfr_acl]