On Tue, Jan 12, 2016 at 02:24:53PM -0800, William Tu wrote:
> This patch forces appending "parent_process_name(PID)" when invoking
> ovs-vsctl, in order to assist debugging. The patch is for Linux only.
> For example:
>     User adds br0 by "ovs-vsctl add-br0", the log shows:
>     "ovs-vsctl (invoked by base(1528)): ovs-vsctl add-br br0"
> 
> Signed-off-by: William Tu <u9012...@gmail.com>

Thanks for the new version.

I applied the following incremental to it, for mostly stylistic changes:

* Extra blank line.

* More ifdefs than needed.

* Unused variable 'total_size'.

* VLOG_ERR indicates an error that can't be recovered from, so downgrade
  to VLOG_WARN.

* VLOG argument doesn't need trailing \n

* Error log message should include what the error was.

* fread() is overkill for reading a character, that's what getc() is
  for.

* We customarily use for (;;) for an infinite loop.

* In testing I found "(invoked by /bin/bash (pid 20216))" easier to read
  and clearer than "(invoked by /bin/bash(20216))".

* ds_steal_cstr() doesn't need to be followed by destroying the string
  (though it does no harm).

I also changed the log message first line to start with a capital letter
and end with a period, as is my preference.

With those changes, I applied this to master.

diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c
index 801113a..c5a28e0 100644
--- a/utilities/ovs-vsctl.c
+++ b/utilities/ovs-vsctl.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -2468,53 +2468,43 @@ run_prerequisites(struct ctl_command *commands, size_t 
n_commands,
     }
 }
 
-#ifdef __linux__
-
-static char*
+static char *
 vsctl_parent_process_info(void)
 {
+#ifdef __linux__
     pid_t parent_pid;
     char *procfile;
-    char *msg_ppid;
-    char *msg;
     struct ds s;
     FILE *f;
-    size_t total_size = 0;
 
     parent_pid = getppid();
     procfile = xasprintf("/proc/%d/cmdline", parent_pid);
 
     f = fopen(procfile, "r");
     if (!f) {
-        VLOG_ERR("can not open file: %s\n", procfile);
+        VLOG_WARN("%s: open failed (%s)", procfile, ovs_strerror(errno));
         free(procfile);
         return NULL;
     }
+    free(procfile);
 
     ds_init(&s);
-
-    while (1) {
-        size_t size;
-        char c;
-        size = fread(&c, 1, 1, f);
-               if (c == '\0' || size < 1) {
+    for (;;) {
+        int c = getc(f);
+        if (!c || c == EOF) {
             break;
         }
         ds_put_char(&s, c);
-        total_size += size;
     }
     fclose(f);
 
-    msg_ppid = xasprintf("(%d)", parent_pid);
-    ds_put_cstr(&s, msg_ppid);
+    ds_put_format(&s, " (pid %d)", parent_pid);
 
-    msg = ds_steal_cstr(&s);
-    free(procfile);
-    free(msg_ppid);
-    ds_destroy(&s);
-    return msg;
-}
+    return ds_steal_cstr(&s);
+#else
+    return NULL;
 #endif
+}
 
 static void
 do_vsctl(const char *args, struct ctl_command *commands, size_t n_commands,
@@ -2536,19 +2526,14 @@ do_vsctl(const char *args, struct ctl_command 
*commands, size_t n_commands,
         ovsdb_idl_txn_set_dry_run(txn);
     }
 
-#ifdef __linux__
     ppid_info = vsctl_parent_process_info();
     if (ppid_info) {
         ovsdb_idl_txn_add_comment(txn, "ovs-vsctl (invoked by %s): %s",
                                   ppid_info, args);
         free(ppid_info);
-    }
-    else {
-#endif
+    } else {
         ovsdb_idl_txn_add_comment(txn, "ovs-vsctl: %s", args);
-#ifdef __linux__
     }
-#endif
 
     ovs = ovsrec_open_vswitch_first(idl);
     if (!ovs) {
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to