[avahi] Sometimes a Service/Host disappears

Florian Erfurth f.erfurth at reel-multimedia.com
Fri Sep 4 04:22:50 PDT 2009


Hi,
I've got a problem. I'm using avahi-daemon version 0.6.20-2ubuntu3.3. On 
Clients where I wrote my own tool (code based on avahi-browse). I think 
there is 2 different problem (not sure if it is *1* problem), i tried 
with 'avahi-daemon --debug' on client:

Problem A
Sometimes if host update avahi-service (text is changed) the tool on 
client tells me the service is removed and (quickly) readded again:
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
dbus-protocol.c: interface=org.freedesktop.Avahi.Server, path=/, 
member=ServiceResolverNew
dbus-async-service-resolver.c: 
interface=org.freedesktop.Avahi.ServiceResolver, 
path=/Client0/ServiceResolver43, member=Free

Here the service on host was updated only 1 time but avahi-daemon 
printed "Received goodbye..." twice! Then the service is removed 
(AVAHI_BROWSER_REMOVE) and readded (AVAHI_BROWSER_NEW) on client. => The 
service was not available in short time.

Problem B (Bigger problem which I have to fix :( )
Sometime if a service is "removed" (which is wrong!) it takes long till 
this service reappears again.
A service is available in LAN. I tried several time of service update on 
host:

Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
dbus-protocol.c: interface=org.freedesktop.Avahi.Server, path=/, 
member=ServiceResolverNew
dbus-async-service-resolver.c: 
interface=org.freedesktop.Avahi.ServiceResolver, 
path=/Client0/ServiceResolver37, member=Free
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
dbus-protocol.c: interface=org.freedesktop.Avahi.Server, path=/, 
member=ServiceResolverNew
dbus-async-service-resolver.c: 
interface=org.freedesktop.Avahi.ServiceResolver, 
path=/Client0/ServiceResolver38, member=Free
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
dbus-protocol.c: interface=org.freedesktop.Avahi.Server, path=/, 
member=ServiceResolverNew
dbus-async-service-resolver.c: 
interface=org.freedesktop.Avahi.ServiceResolver, 
path=/Client0/ServiceResolver39, member=Free
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
dbus-protocol.c: interface=org.freedesktop.Avahi.Server, path=/, 
member=ServiceResolverNew
dbus-async-service-resolver.c: 
interface=org.freedesktop.Avahi.ServiceResolver, 
path=/Client0/ServiceResolver40, member=Free
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
dbus-protocol.c: interface=org.freedesktop.Avahi.Server, path=/, 
member=ServiceResolverNew
dbus-async-service-resolver.c: 
interface=org.freedesktop.Avahi.ServiceResolver, 
path=/Client0/ServiceResolver41, member=Free
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
Recieved goodbye record for one of our records 
[_services._dns-sd._udp.local    IN      PTR _reelboxMySQL._tcp.local ; 
ttl=0]. Refreshing.
dbus-async-service-resolver.c: 
interface=org.freedesktop.Avahi.ServiceResolver, 
path=/Client0/ServiceResolver22, member=Free

In the last line you see the number is 22 instead of number 42. Which 
means Service Resolver #22 came too late. (am I right?) Now my client 
thinks the service of host is not available (i got AVAHI_BROWSER_REMOVE) 
and it didn't reappear (AVAHI_BROWSER_NEW). It takes long (0.5 - 3mins) 
till the client got AVAHI_BROWSER_NEW and the service is available again.

Whats wrong here? Why did it happen? And why die ServiceResolver22 came 
too late?
My thought: Maybe avahi-daemon miss a check if the 
ServiceResolver-counter running in right order. If not then avahi-daemon 
should "catch" it. I'm not sure if there is a bug in avahi-daemon since 
I'm not really a avahi-dev.

cu Floh
PS: Hope you can read my "English", if not let me know please.



More information about the avahi mailing list