diff mbox series

[1/2] storage-daemon: add opt to print when initialized

Message ID 20210827164954.13951-1-raphael.norwitz@nutanix.com (mailing list archive)
State New, archived
Headers show
Series [1/2] storage-daemon: add opt to print when initialized | expand

Commit Message

Raphael Norwitz Aug. 27, 2021, 4:50 p.m. UTC
This change adds a command line option to print a line to standard out
when the storage daemon has completed initialization and is ready to
serve client connections.

This option will be used to resolve a hang in the vhost-user-blk-test.

Signed-off-by: Raphael Norwitz <raphael.norwitz@nutanix.com>
---
 storage-daemon/qemu-storage-daemon.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Eric Blake Aug. 27, 2021, 6:51 p.m. UTC | #1
On Fri, Aug 27, 2021 at 04:50:35PM +0000, Raphael Norwitz wrote:
> This change adds a command line option to print a line to standard out
> when the storage daemon has completed initialization and is ready to
> serve client connections.
> 
> This option will be used to resolve a hang in the vhost-user-blk-test.

Doesn't the existing --pidfile already serve the same job?  That is,
why not fix vhost-user-blk-test to take advantage of the pid-file
creation rather than output to stdout as evidence of when the storage
daemon is up and running?

Therefore, I don't think we need this patch.

> 
> Signed-off-by: Raphael Norwitz <raphael.norwitz@nutanix.com>
> ---
>  storage-daemon/qemu-storage-daemon.c | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)

Missing a corresponding change to the man page
(docs/tools/qemu-storage-daemon.rst), if we decide to go with this
after all.
Raphael Norwitz Aug. 30, 2021, 3:56 p.m. UTC | #2
On Fri, Aug 27, 2021 at 01:51:48PM -0500, eblake@redhat.com wrote:
> On Fri, Aug 27, 2021 at 04:50:35PM +0000, Raphael Norwitz wrote:
> > This change adds a command line option to print a line to standard out
> > when the storage daemon has completed initialization and is ready to
> > serve client connections.
> > 
> > This option will be used to resolve a hang in the vhost-user-blk-test.
>  
> Doesn't the existing --pidfile already serve the same job?  That is,
> why not fix vhost-user-blk-test to take advantage of the pid-file
> creation rather than output to stdout as evidence of when the storage
> daemon is up and running?
> 
> Therefore, I don't think we need this patch.
>

Sure - that make sense. I didn't use the pid-file because I didn't want to
risk leaving junk on the filesystem if the storage-daemon crashed.

I'll send a V2 using pid-file without this change.

> > 
> > Signed-off-by: Raphael Norwitz <raphael.norwitz@nutanix.com>
> > ---
> >  storage-daemon/qemu-storage-daemon.c | 21 +++++++++++++++++++++
> >  1 file changed, 21 insertions(+)
> 
> Missing a corresponding change to the man page
> (docs/tools/qemu-storage-daemon.rst), if we decide to go with this
> after all.
> 

Ack

> -- 
> Eric Blake, Principal Software Engineer
> Red Hat, Inc.           +1-919-301-3266
> Virtualization:  qemu.org | libvirt.org
>
Eric Blake Aug. 30, 2021, 4:05 p.m. UTC | #3
On Mon, Aug 30, 2021 at 03:56:16PM +0000, Raphael Norwitz wrote:
> On Fri, Aug 27, 2021 at 01:51:48PM -0500, eblake@redhat.com wrote:
> > On Fri, Aug 27, 2021 at 04:50:35PM +0000, Raphael Norwitz wrote:
> > > This change adds a command line option to print a line to standard out
> > > when the storage daemon has completed initialization and is ready to
> > > serve client connections.
> > > 
> > > This option will be used to resolve a hang in the vhost-user-blk-test.
> >  
> > Doesn't the existing --pidfile already serve the same job?  That is,
> > why not fix vhost-user-blk-test to take advantage of the pid-file
> > creation rather than output to stdout as evidence of when the storage
> > daemon is up and running?
> > 
> > Therefore, I don't think we need this patch.
> >
> 
> Sure - that make sense. I didn't use the pid-file because I didn't want to
> risk leaving junk on the filesystem if the storage-daemon crashed.

Ideally, storage-daemon doesn't crash during the test.  But even if it
does, we should still be able to register which files will be cleaned
up while exiting the test (if they exist), regardless of whether the
test succeeded or failed, because we have control over the pidfile
name before starting storage-daemon.  Put another way, the task of
cleaning up a pidfile during a test should not be a show-stopper.

[Side note: A long time ago, there were patches submitted to make the
iotests ./check engine run EVERY test in its own subdirectory, so that
cleaning up all files created by the test was trivial: nuke the
directory.  It also has the benefit that for debugging a failing test,
you merely pass an option to ./check that says to not nuke the
directory.  But it did not get applied at the time, and we have had
enough changes in the meantime that reinstating such a useful patch
would basically be work from scratch at this point]

> 
> I'll send a V2 using pid-file without this change.

Thanks, looking forward to it.
Michael S. Tsirkin Aug. 30, 2021, 9:51 p.m. UTC | #4
On Mon, Aug 30, 2021 at 11:05:35AM -0500, eblake@redhat.com wrote:
> On Mon, Aug 30, 2021 at 03:56:16PM +0000, Raphael Norwitz wrote:
> > On Fri, Aug 27, 2021 at 01:51:48PM -0500, eblake@redhat.com wrote:
> > > On Fri, Aug 27, 2021 at 04:50:35PM +0000, Raphael Norwitz wrote:
> > > > This change adds a command line option to print a line to standard out
> > > > when the storage daemon has completed initialization and is ready to
> > > > serve client connections.
> > > > 
> > > > This option will be used to resolve a hang in the vhost-user-blk-test.
> > >  
> > > Doesn't the existing --pidfile already serve the same job?  That is,
> > > why not fix vhost-user-blk-test to take advantage of the pid-file
> > > creation rather than output to stdout as evidence of when the storage
> > > daemon is up and running?
> > > 
> > > Therefore, I don't think we need this patch.
> > >
> > 
> > Sure - that make sense. I didn't use the pid-file because I didn't want to
> > risk leaving junk on the filesystem if the storage-daemon crashed.
> 
> Ideally, storage-daemon doesn't crash during the test.  But even if it
> does, we should still be able to register which files will be cleaned
> up while exiting the test (if they exist), regardless of whether the
> test succeeded or failed, because we have control over the pidfile
> name before starting storage-daemon.  Put another way, the task of
> cleaning up a pidfile during a test should not be a show-stopper.
> 
> [Side note: A long time ago, there were patches submitted to make the
> iotests ./check engine run EVERY test in its own subdirectory, so that
> cleaning up all files created by the test was trivial: nuke the
> directory.  It also has the benefit that for debugging a failing test,
> you merely pass an option to ./check that says to not nuke the
> directory.  But it did not get applied at the time, and we have had
> enough changes in the meantime that reinstating such a useful patch
> would basically be work from scratch at this point]


Yea I had that thought too. Pity it got lost.

> > 
> > I'll send a V2 using pid-file without this change.
> 
> Thanks, looking forward to it.
> 
> -- 
> Eric Blake, Principal Software Engineer
> Red Hat, Inc.           +1-919-301-3266
> Virtualization:  qemu.org | libvirt.org
diff mbox series

Patch

diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-storage-daemon.c
index fc8b150629..c4f76d1564 100644
--- a/storage-daemon/qemu-storage-daemon.c
+++ b/storage-daemon/qemu-storage-daemon.c
@@ -61,6 +61,9 @@ 
 
 static const char *pid_file;
 static volatile bool exit_requested = false;
+static bool print_setup;
+
+const char *init_msg = "Block exports setup\n";
 
 void qemu_system_killed(int signal, pid_t pid)
 {
@@ -82,6 +85,7 @@  static void help(void)
 "  -T, --trace [[enable=]<pattern>][,events=<file>][,file=<file>]\n"
 "                         specify tracing options\n"
 "  -V, --version          output version information and exit\n"
+"  -P, --printset         print to stdout once server is fully initialized\n"
 "\n"
 "  --blockdev [driver=]<driver>[,node-name=<N>][,discard=ignore|unmap]\n"
 "             [,cache.direct=on|off][,cache.no-flush=on|off]\n"
@@ -174,6 +178,7 @@  static void process_options(int argc, char *argv[])
         {"nbd-server", required_argument, NULL, OPTION_NBD_SERVER},
         {"object", required_argument, NULL, OPTION_OBJECT},
         {"pidfile", required_argument, NULL, OPTION_PIDFILE},
+        {"printset", no_argument, NULL, 'P'},
         {"trace", required_argument, NULL, 'T'},
         {"version", no_argument, NULL, 'V'},
         {0, 0, 0, 0}
@@ -195,6 +200,9 @@  static void process_options(int argc, char *argv[])
             trace_opt_parse(optarg);
             trace_init_file();
             break;
+        case 'P':
+            print_setup = true;
+            break;
         case 'V':
             printf("qemu-storage-daemon version "
                    QEMU_FULL_VERSION "\n" QEMU_COPYRIGHT "\n");
@@ -310,6 +318,7 @@  static void pid_file_init(void)
 
 int main(int argc, char *argv[])
 {
+    int err;
 #ifdef CONFIG_POSIX
     signal(SIGPIPE, SIG_IGN);
 #endif
@@ -341,6 +350,18 @@  int main(int argc, char *argv[])
      */
     pid_file_init();
 
+    /*
+     * If requested to pipe output once exports are initialized, print to
+     * stdout.
+     */
+    if (print_setup) {
+        err = write(1, init_msg, strlen(init_msg));
+        if (err == -1) {
+            fprintf(stderr, "Write to pipe failed: %m\n");
+            return -1;
+        }
+    }
+
     while (!exit_requested) {
         main_loop_wait(false);
     }