public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: "Michal Prívozník" <mprivozn@redhat.com>
To: Peter Krempa <pkrempa@redhat.com>, Laine Stump <laine@redhat.com>
Cc: libvir-list@redhat.com, passt-dev@passt.top
Subject: Re: [libvirt PATCH] qemu: allow passt to self-daemonize
Date: Thu, 9 Feb 2023 09:59:54 +0100	[thread overview]
Message-ID: <30ce5926-e7ee-2bdf-33c2-5964032c117e@redhat.com> (raw)
In-Reply-To: <Y+SwitLLW89luHBS@angien.pipo.sk>

On 2/9/23 09:36, Peter Krempa wrote:
> On Wed, Feb 08, 2023 at 18:13:10 -0500, Laine Stump wrote:
>> I initially had the passt process being started in an identical
>> fashion to the slirp-helper - libvirt was daemonizing the new process
>> and recording its pid in a pidfile. The problem with this is that,
>> since it is daemonized immediately, any startup error in passt happens
>> after the daemonization, and thus isn't seen by libvirt - libvirt
>> believes that the process has started successfully and continues on
>> its merry way. The result was that sometimes a guest would be started,
>> but there would be no passt process for qemu to use for network
>> traffic.
>>
>> Instead, we should be starting passt in the same manner we start
>> dnsmasq - we just exec it as normal (along with a request that passt
>> create the pidfile, which is just another option on the passt
>> commandline) and wait for the child process to exit; passt then has a
>> chance to parse its commandline and complete all the setup prior to
>> daemonizing itself; if it encounters an error and exits with a non-0
>> code, libvirt will see the code and know about the failure. We can
>> then grab the output from stderr, log that so the "user" has some idea
>> of what went wrong, and then fail the guest startup.
>>
>> Signed-off-by: Laine Stump <laine@redhat.com>
>> ---
>>  src/qemu/qemu_passt.c | 9 ++++-----
>>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> [..]
> 
>>      if (cmdret < 0 || exitstatus != 0) {
>>          virReportError(VIR_ERR_INTERNAL_ERROR,
>> -                       _("Could not start 'passt'. exitstatus: %d"), exitstatus);
>> +                       _("Could not start 'passt': %s"), errbuf);
>>          goto error;
>>      }
> 
> So the 'passt' binary doesn't do any logging later on during runtime
> which we'd have to capture into a specific log file?

It does:

  -e, --stderr          Log to stderr too
    default: log to system logger only if started from a TTY
  -l, --log-file PATH   Log (only) to given file
  --log-size BYTES      Maximum size of log file
    default: 1 MiB

Maybe, we can keep the errfd and let our event loop read from it? But
that looks like a stretch, unnecessary - what would we do with the error
if it's reported after guest is started, there's no client connected and
no API running? The best we could do is to relay the error into our
logs. Which is probably as good as '-l' option then.

BTW: I don't see us passing --stderr. Is that intentional? Maybe I don't
understand the default.

Michal


  reply	other threads:[~2023-02-09  8:59 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-08 23:13 [libvirt PATCH] qemu: allow passt to self-daemonize Laine Stump
2023-02-09  8:36 ` Peter Krempa
2023-02-09  8:59   ` Michal Prívozník [this message]
2023-02-09  9:09     ` Peter Krempa
2023-02-09 10:09       ` Stefano Brivio
2023-02-09  8:48 ` Martin Kletzander
2023-02-09  8:52 ` Michal Prívozník
2023-02-09  9:56   ` Daniel P. Berrangé
2023-02-09 10:10     ` Michal Prívozník
2023-02-09 10:54       ` Stefano Brivio
2023-02-09 10:31   ` Stefano Brivio
2023-02-14  8:01 ` Michal Prívozník
2023-02-14 10:08   ` Stefano Brivio
2023-02-14 11:13     ` Michal Prívozník
2023-02-14 12:29       ` Stefano Brivio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=30ce5926-e7ee-2bdf-33c2-5964032c117e@redhat.com \
    --to=mprivozn@redhat.com \
    --cc=laine@redhat.com \
    --cc=libvir-list@redhat.com \
    --cc=passt-dev@passt.top \
    --cc=pkrempa@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).