Page MenuHomeVyOS Platform

PowerDNS >= 4.7 does not get reloaded by vyos-hostsd
Closed, ResolvedPublicBUG

Description

On DHCP events and changes to the active configuration the process vyos-hostsd is responsible to issue a command to PowerDNS via rec_control in order to get the forwarding resolver to load the new changes.

Since T4652 however, the upgrade to PDNS 4.7 has changed the name of the process that PDNS runs under, causing vyos-hostsd to believe PDNS is not running even when it is, which then inhibits the calls to rec_control. The end effect being PDNS never getting any state updates from it's configuration files or zone files unless it's manually restarted or a manual rec_control with the appropriate arguments is issued.

Evidence of this issue can be seen by running journalctl -eu vyos-hostsd after an apply operation takes place, displaying:

vyos-hostsd[854]: pdns_recursor not running, not sending "reload-lua-config"
vyos-hostsd[854]: pdns_recursor not running, not sending "reload-zones"

Details

Version
1.4
Is it a breaking change?
Perfectly compatible
Issue type
Bug (incorrect behavior)

Event Timeline

Viacheslav changed the task status from Open to Needs testing.Nov 7 2022, 7:41 PM
Viacheslav assigned this task to initramfs.

@c-po I noticed you've reverted the commit, may I ask how you're able to reproduce the process name of 'pdns-r/worker'? Just doing the testing again with the latest build as of writing (vyos-1.4-rolling-202211060813-amd64.iso), I get:

psutil.Process(pid=2847, name='pdns_recursor', status='sleeping', started='08:37:00')

The code I used to get the process print is via:

import psutil

for p in psutil.process_iter():
    print(p)

I could only get the old name of 'pdns-r/worker' if I explicitly downgrade PowerDNS to version 4.5.

We use p.name from process_iter and it returns pdns-r/worker. That‘s why I have reverted the commits as in the latest 1.4 VyOS iso with PDNS 4.8 beta it‘s how they names the worker thread

Hmm, I can't seem to reproduce that name with "pdns-recursor/now 4.8.0~beta1-1pdns.bullseye amd64" or "pdns-recursor/now 4.8.0~beta2-1pdns.bullseye amd64" both in a live bare-metal system or in a VM. Both versions return pdns_recursor for me when printed from p.name(). The worker thread names (as listed from ps or htop) also don't match: "rec/web+stat" and "rec/taskThread", not that either of these are returned by p.name().

Just as a point of additional reference, I've bisected the PowerDNS source code to see where the change from 'pdns-r/worker' to something else occurred and successfully found that commit 69b39198 in the repository changes the thread names away from the prefix of 'pdns-r'. Since that change, the string pdns-r/ no longer exists in the source code. The aforementioned commit is included in the following tags:

  • auth-4.7.0
  • auth-4.7.0-alpha1
  • auth-4.7.0-beta1
  • auth-4.7.0-beta2
  • auth-4.7.0-rc1
  • auth-4.7.1
  • auth-4.7.2
  • auth-4.8.0-alpha0
  • rec-4.7.0
  • rec-4.7.0-alpha1
  • rec-4.7.0-beta1
  • rec-4.7.0-rc1
  • rec-4.7.1
  • rec-4.7.2
  • rec-4.7.3
  • rec-4.8.0-alpha0
  • rec-4.8.0-alpha1
  • rec-4.8.0-beta1
  • rec-4.8.0-beta2
  • rec-4.9.0-alpha0

suggesting that beyond recursor versions 4.7 and up use the new names.

@c-po I think the reason you're seeing the old name of 'pdns-r/worker' is due to a packaging regression described in T4814. All the latest builds of vyos 1.4 seem to be providing powerdns 4.4 instead of the expected 4.8. Since this issue and corresponding bugfix only pertains to powerdns >= 4.8, the issue would not be visible if powerdns is downgraded to 4.4.

The issue seems to have been resolved by https://github.com/vyos/vyos-build/pull/284, so if possible, can you recheck the process name for the recursor?

c-po moved this task from Need Triage to In Progress on the VyOS 1.3 Equuleus (1.3.3) board.
c-po moved this task from In Progress to Finished on the VyOS 1.3 Equuleus (1.3.3) board.
c-po moved this task from Open to Finished on the VyOS 1.4 Sagitta board.