qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] qemu-nbd daemonizing?


From: Paolo Bonzini
Subject: Re: [Qemu-devel] qemu-nbd daemonizing?
Date: Sun, 15 Jan 2012 18:43:52 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:9.0) Gecko/20111222 Thunderbird/9.0

On 01/15/2012 05:54 PM, Michael Tokarev wrote:
On 15.01.2012 20:17, Paolo Bonzini wrote:
On 01/15/2012 01:59 PM, Michael Tokarev wrote:
On 15.01.2012 14:51, Paolo Bonzini wrote:
On 01/14/2012 10:26 AM, Michael Tokarev wrote:
After looking at the yesterdays issue with non-absolute
paths for qemu-nbd arguments and daemon(3), I've a
question.

Why qemu-nbd daemonizes, and does that only when device
argument is given (dropping -v/verbose case for now)?

This raises two questions:

    - shouldn't it do the same daemonizing in case of usual
      tcp export?

Perhaps yes, but in that case you cannot use "qemu-nbd -d" to
kill the daemonized process.

Sorry?  qemu-nbd -d will connect to the socket the daemonized
daemon is listening on, the same way as it is done now --
nothing really changes there.

No, "qemu-nbd -d" will connect to the /dev/nbdX device and tell
thekernel to disconnect. This will terminate the daemon (as long as you
didn't use --persistent, at least).

Whatever.  In any case qemu-nbd is able to terminate currently
running daemon, nothing changes with addition daemonizing here
or without - that was my point.

Not "whatever", and not "in any case". qemu-nbd is able to terminate a currently running daemon indirectly, by detaching /dev/nbd. The same cannot be done in the TCP export case (where --persistent is used more often than not). The point is that qemu-nbd only daemonizes when there is a simple way to terminate it externally.

Could it have been done better?  Yes.  Do we have to deal with it?  Yes.

The primary question was why -c daemonizes unconditionally.

I don't know. But I don't think daemonizing is really a feature,
just something historical that we have to deal with.

Aha.  So can't it just go away, or be controlled by another
option, not related to -c ?  I think it should be good.

I think it could go away, but I'm quite torn.  It does make sense.

Leaving the current historical default "as is", but also allowing daemonization in the TCP case makes sense too. However, you need to preserve the way exit statuses are sent for initialization problems, even where daemonizing.

To fix this you would have to add three options: --pidfile (to terminate a currently running daemon), --daemonize, --no-daemonize. Honestly, I don't think it's worth it, but I wouldn't refuse patches and, of course, improving the documentation would also be a very good idea.

qemu-nbd was runnable on win32 before, so historically it
was exactly the opposite.   I asked you because you mentioned
it is linux-only for the first time, but indeed, at that
time it wasn't compilable on win32 already.

Fixing it would be good indeed. We can use qemu-thread for that
forexample. But it looks like the third commit ever to qemu-nbd.c already
made it non-Linux-only. I don't think there ever was a release that
supported qemu-nbd on Win32, right?

It is kinda trivial to fix this.  But this task becomes
completely unrealistic if that will involve another
discussion like we currently have.

I'm pretty sure it shouldn't. This discussion is happening because you haven't completely read the code, which has more nuances than you think. Threads, daemonization, error messages, exit statuses, all this together makes it quite complex.

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]