Merged with modifications discussed with the Author.
commit 39120e55fda06380e866f5c1c87b2a094bcca4abDavid On 08 May (12:02:52), Jérémie Galarneau wrote: > This option makes it possible to set a PATH from which session > configurations are loaded by the session daemon on startup. > > Usage: lttng-sessiond -l PATH > > The session configuration file found at PATH, or all those present > in it if it is a directory, will be loaded. > > All sessions found under the user's session configuration directory > and under the system session configuration directory are now loaded > by default. > > Signed-off-by: Jérémie Galarneau <[email protected]> > --- > src/bin/lttng-sessiond/Makefile.am | 3 +- > src/bin/lttng-sessiond/load-session-thread.c | 57 > ++++++++++++++++++++++++++++ > src/bin/lttng-sessiond/load-session-thread.h | 25 ++++++++++++ > src/bin/lttng-sessiond/main.c | 47 ++++++++++++++++++++++- > 4 files changed, 129 insertions(+), 3 deletions(-) > create mode 100644 src/bin/lttng-sessiond/load-session-thread.c > create mode 100644 src/bin/lttng-sessiond/load-session-thread.h > > diff --git a/src/bin/lttng-sessiond/Makefile.am > b/src/bin/lttng-sessiond/Makefile.am > index 71df926..5bd62e5 100644 > --- a/src/bin/lttng-sessiond/Makefile.am > +++ b/src/bin/lttng-sessiond/Makefile.am > @@ -28,7 +28,8 @@ lttng_sessiond_SOURCES = utils.c utils.h \ > testpoint.h ht-cleanup.c \ > snapshot.c snapshot.h \ > jul.c jul.h \ > - save.h save.c > + save.h save.c \ > + load-session-thread.h load-session-thread.c > > if HAVE_LIBLTTNG_UST_CTL > lttng_sessiond_SOURCES += trace-ust.c ust-registry.c ust-app.c \ > diff --git a/src/bin/lttng-sessiond/load-session-thread.c > b/src/bin/lttng-sessiond/load-session-thread.c > new file mode 100644 > index 0000000..9afd6dc > --- /dev/null > +++ b/src/bin/lttng-sessiond/load-session-thread.c > @@ -0,0 +1,57 @@ > +/* > + * Copyright (C) 2014 - Jérémie Galarneau <[email protected]> > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms of the GNU General Public License, version 2 only, as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, but > WITHOUT > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for > + * more details. > + * > + * You should have received a copy of the GNU General Public License along > with > + * this program; if not, write to the Free Software Foundation, Inc., 51 > + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. > + */ > + > +#define _GNU_SOURCE > +#include "load-session-thread.h" > +#include <common/error.h> > +#include <common/config/config.h> > + > +extern sem_t message_thread_ready; > +void lttng_sessiond_notify_ready(void); > + > +/* > + * This thread loads session configurations once the session daemon is > + * ready to process client messages. > + */ > +void *thread_load_session(void *data) > +{ > + int ret; > + const char *path = data; > + > + DBG("[load-session-thread] Load session"); > + > + ret = sem_wait(&message_thread_ready); > + if (ret) { > + PERROR("sem_wait message_thread_ready"); > + goto end; > + } > + > + ret = sem_destroy(&message_thread_ready); > + if (ret) { > + PERROR("sem_destroy message_thread_ready"); > + goto end; > + } > + > + ret = config_load_session(path, NULL, 0); > + if (ret) { > + ERR("Session load failed: %s", error_get_str(ret)); > + } > + > +end: > + lttng_sessiond_notify_ready(); > + return NULL; > +} > diff --git a/src/bin/lttng-sessiond/load-session-thread.h > b/src/bin/lttng-sessiond/load-session-thread.h > new file mode 100644 > index 0000000..70aaa31 > --- /dev/null > +++ b/src/bin/lttng-sessiond/load-session-thread.h > @@ -0,0 +1,25 @@ > +/* > + * Copyright (C) 2014 - Jérémie Galarneau <[email protected]> > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms of the GNU General Public License, version 2 only, as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, but > WITHOUT > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for > + * more details. > + * > + * You should have received a copy of the GNU General Public License along > with > + * this program; if not, write to the Free Software Foundation, Inc., 51 > + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. > + */ > + > +#ifndef LOAD_SESSION_THREAD_H > +#define LOAD_SESSION_THREAD_H > + > +#include <semaphore.h> > + > +void *thread_load_session(void *session_name); > + > +#endif /* LOAD_SESSION_THREAD_H */ > diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c > index 052e32e..1b6f951 100644 > --- a/src/bin/lttng-sessiond/main.c > +++ b/src/bin/lttng-sessiond/main.c > @@ -69,6 +69,7 @@ > #include "ust-thread.h" > #include "jul-thread.h" > #include "save.h" > +#include "load-session-thread.h" > > #define CONSUMERD_FILE "lttng-consumerd" > > @@ -80,6 +81,7 @@ static int opt_sig_parent; > static int opt_verbose_consumer; > static int opt_daemon, opt_background; > static int opt_no_kernel; > +static char *opt_load_session_path; > static pid_t ppid; /* Parent PID for --sig-parent option */ > static pid_t child_ppid; /* Internal parent PID use with daemonize. */ > static char *rundir; > @@ -152,6 +154,7 @@ static const struct option long_options[] = { > { "pidfile", 1, 0, 'p' }, > { "jul-tcp-port", 1, 0, 'J' }, > { "config", 1, 0, 'f' }, > + { "load", 1, 0, 'l' }, > { NULL, 0, 0, 0 } > }; > > @@ -200,6 +203,7 @@ static pthread_t dispatch_thread; > static pthread_t health_thread; > static pthread_t ht_cleanup_thread; > static pthread_t jul_reg_thread; > +LTTNG_HIDDEN sem_t message_thread_ready; > > /* > * UST registration command queue. This queue is tied with a futex and uses > a N > @@ -296,11 +300,11 @@ const char * const config_section_name = "sessiond"; > * NR_LTTNG_SESSIOND_READY must match the number of calls to > * lttng_sessiond_notify_ready(). > */ > -#define NR_LTTNG_SESSIOND_READY 2 > +#define NR_LTTNG_SESSIOND_READY 3 > int lttng_sessiond_ready = NR_LTTNG_SESSIOND_READY; > > /* Notify parents that we are ready for cmd and health check */ > -static > +LTTNG_HIDDEN > void lttng_sessiond_notify_ready(void) > { > if (uatomic_sub_return(<tng_sessiond_ready, 1) == 0) { > @@ -647,6 +651,10 @@ static void cleanup(void) > free(opt_pidfile); > } > > + if (opt_load_session_path) { > + free(opt_load_session_path); > + } > + > /* <fun> */ > DBG("%c[%d;%dm*** assert failed :-) *** ==> %c[%dm%c[%d;%dm" > "Matthew, BEET driven development works!%c[%dm", > @@ -3876,6 +3884,11 @@ static void *thread_manage_clients(void *data) > } > > lttng_sessiond_notify_ready(); > + ret = sem_post(&message_thread_ready); > + if (ret) { > + PERROR("sem_post message_thread_ready"); > + goto error; > + } > > /* This testpoint is after we signal readiness to the parent. */ > if (testpoint(sessiond_thread_manage_clients)) { > @@ -4110,6 +4123,7 @@ static void usage(void) > fprintf(stderr, " --no-kernel Disable kernel > tracer\n"); > fprintf(stderr, " --jul-tcp-port JUL application > registration TCP port\n"); > fprintf(stderr, " -f --config Load daemon > configuration file\n"); > + fprintf(stderr, " -l --load PATH Load session > configuration\n"); > } > > /* > @@ -4229,6 +4243,13 @@ static int set_option(int opt, const char *arg, const > char *optname) > DBG3("JUL TCP port set to non default: %u", jul_tcp_port); > break; > } > + case 'l': > + opt_load_session_path = strdup(arg); > + if (!opt_load_session_path) { > + perror("strdup"); > + ret = -ENOMEM; > + } > + break; > default: > /* Unknown option or other error. > * Error is printed by getopt, just return */ > @@ -4764,6 +4785,7 @@ int main(int argc, char **argv) > int ret = 0; > void *status; > const char *home_path, *env_app_timeout; > + pthread_t load_session_thread; > > init_kernel_workarounds(); > > @@ -5065,6 +5087,12 @@ int main(int argc, char **argv) > /* This is to get the TCP timeout value. */ > lttcomm_inet_init(); > > + ret = sem_init(&message_thread_ready, 0, 0); > + if (ret) { > + PERROR("sem_init message_thread_ready"); > + goto error; > + } > + > /* > * Initialize the health check subsystem. This call should set the > * appropriate time values. > @@ -5148,7 +5176,22 @@ int main(int argc, char **argv) > PERROR("pthread_create kernel"); > goto exit_kernel; > } > + } > + > + /* Create session loading thread. */ > + ret = pthread_create(&load_session_thread, NULL, > + thread_load_session, > + (void *) opt_load_session_path); > + if (ret != 0) { > + PERROR("pthread_create load_session_thread"); > + } > > + ret = pthread_detach(load_session_thread); > + if (ret != 0) { > + PERROR("pthread_detach load_session_thread"); > + } > + > + if (is_root && !opt_no_kernel) { > ret = pthread_join(kernel_thread, &status); > if (ret != 0) { > PERROR("pthread_join"); > -- > 1.9.2 >
signature.asc
Description: Digital signature
_______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
