common: only log io if they set --debug-subdaemon-io=<daemon> or with SIGUSR1.

Otherwise we just log the type of msg.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2018-02-05 14:39:28 +10:30
parent de56dc0ffc
commit c01f3267d5
7 changed files with 69 additions and 17 deletions

View File

@@ -67,6 +67,7 @@ static struct lightningd *new_lightningd(const tal_t *ctx,
ld->portnum = DEFAULT_PORT;
timers_init(&ld->timers, time_mono());
ld->topology = new_topology(ld, ld->log);
ld->debug_subdaemon_io = NULL;
return ld;
}

View File

@@ -138,6 +138,9 @@ struct lightningd {
/* Transaction filter matching what we're interested in */
struct txfilter *owned_txfilter;
/* May be useful for non-developers debugging in the field */
char *debug_subdaemon_io;
#if DEVELOPER
/* If we want to debug a subdaemon. */
const char *dev_debug_subdaemon;

View File

@@ -277,6 +277,9 @@ static void config_register_opts(struct lightningd *ld)
opt_set_bool_arg, opt_show_bool,
&deprecated_apis,
"Enable deprecated options, JSONRPC commands, fields, etc.");
opt_register_arg("--debug-subdaemon-io",
opt_set_charp, NULL, &ld->debug_subdaemon_io,
"Enable full peer IO logging in subdaemons ending in this string (can also send SIGUSR1 to toggle)");
}
#if DEVELOPER

View File

@@ -130,7 +130,9 @@ static void close_taken_fds(va_list *ap)
}
/* We use sockets, not pipes, because fds are bidir. */
static int subd(const char *dir, const char *name, const char *debug_subdaemon,
static int subd(const char *dir, const char *name,
const char *debug_subdaemon,
const char *debug_subdaemon_io,
int *msgfd, int dev_disconnect_fd, va_list *ap)
{
int childmsg[2], execfail[2];
@@ -154,8 +156,8 @@ static int subd(const char *dir, const char *name, const char *debug_subdaemon,
if (childpid == 0) {
int fdnum = 3, i;
long max;
const char *debug_arg[2] = { NULL, NULL };
const char *path;
size_t num_args;
char *args[] = { NULL, NULL, NULL, NULL, NULL };
close(childmsg[0]);
close(execfail[0]);
@@ -190,14 +192,17 @@ static int subd(const char *dir, const char *name, const char *debug_subdaemon,
if (i != dev_disconnect_fd)
close(i);
num_args = 0;
args[num_args++] = path_join(NULL, dir, name);
#if DEVELOPER
if (dev_disconnect_fd != -1)
debug_arg[0] = tal_fmt(NULL, "--dev-disconnect=%i", dev_disconnect_fd);
args[num_args++] = tal_fmt(NULL, "--dev-disconnect=%i", dev_disconnect_fd);
if (debug_subdaemon && strends(name, debug_subdaemon))
debug_arg[debug_arg[0] ? 1 : 0] = "--debugger";
args[num_args++] = "--debugger";
#endif
path = path_join(NULL, dir, name);
execl(path, path, debug_arg[0], debug_arg[1], NULL);
if (debug_subdaemon_io && strends(name, debug_subdaemon_io))
args[num_args++] = "--log-io";
execv(args[0], args);
child_errno_fail:
err = errno;
@@ -249,7 +254,8 @@ int subd_raw(struct lightningd *ld, const char *name)
disconnect_fd = ld->dev_disconnect_fd;
#endif /* DEVELOPER */
pid = subd(ld->daemon_dir, name, debug_subd, &msg_fd, disconnect_fd,
pid = subd(ld->daemon_dir, name, debug_subd, ld->debug_subdaemon_io,
&msg_fd, disconnect_fd,
NULL);
if (pid == (pid_t)-1) {
log_unusual(ld->log, "subd %s failed: %s",
@@ -613,8 +619,8 @@ static struct subd *new_subd(struct lightningd *ld,
disconnect_fd = ld->dev_disconnect_fd;
#endif /* DEVELOPER */
sd->pid = subd(ld->daemon_dir, name, debug_subd, &msg_fd, disconnect_fd,
ap);
sd->pid = subd(ld->daemon_dir, name, debug_subd, ld->debug_subdaemon_io,
&msg_fd, disconnect_fd, ap);
if (sd->pid == (pid_t)-1) {
log_unusual(ld->log, "subd %s failed: %s",
name, strerror(errno));