mi: serialize relay rotation locations
[lttng-tools.git] / src / bin / lttng-sessiond / save.c
index 9ac7712cb114968fdb8c3c4605a4f2f10419037b..a8f3ec79588e7bf1e09d6a39c7dd861bf400ecab 100644 (file)
@@ -32,7 +32,7 @@
 #include "kernel.h"
 #include "save.h"
 #include "session.h"
-#include "syscall.h"
+#include "lttng-syscall.h"
 #include "trace-ust.h"
 #include "agent.h"
 
@@ -104,6 +104,26 @@ int save_kernel_channel_attributes(struct config_writer *writer,
        if (ret) {
                goto end;
        }
+
+       if (attr->extended.ptr) {
+               struct lttng_channel_extended *ext = NULL;
+
+               ext = (struct lttng_channel_extended *) attr->extended.ptr;
+               ret = config_writer_write_element_unsigned_int(writer,
+                               config_element_monitor_timer_interval,
+                               ext->monitor_timer_interval);
+               if (ret) {
+                       goto end;
+               }
+
+               ret = config_writer_write_element_signed_int(writer,
+                               config_element_blocking_timeout,
+                               ext->blocking_timeout);
+               if (ret) {
+                       goto end;
+               }
+       }
+
 end:
        return ret ? LTTNG_ERR_SAVE_IO_FAIL : 0;
 }
@@ -113,6 +133,7 @@ int save_ust_channel_attributes(struct config_writer *writer,
        struct lttng_ust_channel_attr *attr)
 {
        int ret;
+       struct ltt_ust_channel *channel = NULL;
 
        ret = config_writer_write_element_string(writer,
                config_element_overwrite_mode,
@@ -156,6 +177,26 @@ int save_ust_channel_attributes(struct config_writer *writer,
        if (ret) {
                goto end;
        }
+
+       ret = config_writer_write_element_signed_int(writer,
+                       config_element_blocking_timeout,
+                       attr->u.s.blocking_timeout);
+       if (ret) {
+               goto end;
+       }
+
+       /*
+        * Fetch the monitor timer which is located in the parent of
+        * lttng_ust_channel_attr
+        */
+       channel = caa_container_of(attr, struct ltt_ust_channel, attr);
+       ret = config_writer_write_element_unsigned_int(writer,
+               config_element_monitor_timer_interval,
+               channel->monitor_timer_interval);
+       if (ret) {
+               goto end;
+       }
+
 end:
        return ret ? LTTNG_ERR_SAVE_IO_FAIL : 0;
 }
@@ -244,6 +285,12 @@ const char *get_kernel_context_type_string(
        case LTTNG_KERNEL_CONTEXT_MIGRATABLE:
                context_type_string = config_event_context_migratable;
                break;
+       case LTTNG_KERNEL_CONTEXT_CALLSTACK_USER:
+               context_type_string = config_event_context_callstack_user;
+               break;
+       case LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL:
+               context_type_string = config_event_context_callstack_kernel;
+               break;
        default:
                context_type_string = NULL;
        }
@@ -739,7 +786,6 @@ end:
 
 static
 int save_agent_events(struct config_writer *writer,
-               struct ltt_ust_channel *chan,
                struct agent *agent)
 {
        int ret;
@@ -1213,7 +1259,7 @@ int save_ust_channel(struct config_writer *writer,
                 * the "agent" events associated with this channel and serialize
                 * them.
                 */
-               ret = save_agent_events(writer, ust_chan, agent);
+               ret = save_agent_events(writer, agent);
                if (ret) {
                        goto end;
                }
@@ -1632,7 +1678,7 @@ int save_consumer_output(struct config_writer *writer,
        switch (output->type) {
        case CONSUMER_DST_LOCAL:
                ret = config_writer_write_element_string(writer,
-                       config_element_path, output->dst.trace_path);
+                       config_element_path, output->dst.session_root_path);
                if (ret) {
                        ret = LTTNG_ERR_SAVE_IO_FAIL;
                        goto end;
@@ -1992,7 +2038,8 @@ int save_session(struct ltt_session *session,
                goto end;
        }
 
-       if (session->snapshot_mode || session->live_timer) {
+       if (session->snapshot_mode || session->live_timer ||
+                       session->rotate_timer_period || session->rotate_size) {
                ret = config_writer_open_element(writer, config_element_attributes);
                if (ret) {
                        ret = LTTNG_ERR_SAVE_IO_FAIL;
@@ -2006,7 +2053,7 @@ int save_session(struct ltt_session *session,
                                ret = LTTNG_ERR_SAVE_IO_FAIL;
                                goto end;
                        }
-               } else {
+               } else if (session->live_timer) {
                        ret = config_writer_write_element_unsigned_int(writer,
                                        config_element_live_timer_interval, session->live_timer);
                        if (ret) {
@@ -2014,6 +2061,25 @@ int save_session(struct ltt_session *session,
                                goto end;
                        }
                }
+               if (session->rotate_timer_period) {
+                       ret = config_writer_write_element_unsigned_int(writer,
+                                       config_element_rotation_timer_interval,
+                                       session->rotate_timer_period);
+                       if (ret) {
+                               ret = LTTNG_ERR_SAVE_IO_FAIL;
+                               goto end;
+                       }
+               }
+
+               if (session->rotate_size) {
+                       ret = config_writer_write_element_unsigned_int(writer,
+                                       config_element_rotation_size,
+                                       session->rotate_size);
+                       if (ret) {
+                               ret = LTTNG_ERR_SAVE_IO_FAIL;
+                               goto end;
+                       }
+               }
 
                /* /attributes */
                ret = config_writer_close_element(writer);
@@ -2053,6 +2119,13 @@ end:
                }
        }
 
+       if (file_opened) {
+               ret = close(fd);
+               if (ret) {
+                       PERROR("Closing XML session configuration");
+               }
+       }
+
        return ret;
 }
 
This page took 0.027241 seconds and 4 git commands to generate.