sessiond: add clear notifier
[lttng-tools.git] / src / bin / lttng-sessiond / session.h
index 1cea52a61fc64a75169041aa7bbddee7b8180082..da3805658cd28e1255292d6250ae6882f779a6d0 100644 (file)
@@ -23,6 +23,7 @@
 #include <urcu/list.h>
 
 #include <common/hashtable/hashtable.h>
+#include <common/dynamic-array.h>
 #include <lttng/rotation.h>
 #include <lttng/location.h>
 #include <lttng/lttng-error.h>
 
 struct ltt_ust_session;
 
+typedef void (*ltt_session_destroy_notifier)(const struct ltt_session *session,
+               void *user_data);
+typedef void (*ltt_session_clear_notifier)(const struct ltt_session *session,
+               void *user_data);
+
 /*
  * Tracing session list
  *
@@ -71,7 +77,10 @@ struct ltt_session_list {
 struct ltt_session {
        char name[NAME_MAX];
        bool has_auto_generated_name;
+       bool name_contains_creation_time;
        char hostname[HOST_NAME_MAX]; /* Local hostname. */
+       /* Path of the last closed chunk. */
+       char last_chunk_path[LTTNG_PATH_MAX];
        time_t creation_time;
        struct ltt_kernel_session *kernel_session;
        struct ltt_ust_session *ust_session;
@@ -166,6 +175,12 @@ struct ltt_session {
         * chunk.
         */
        bool rotated_after_last_stop;
+       /*
+        * Track whether the session was cleared after last stop. All subsequent
+        * clear (without prior start) will succeed, but will be effect-less. A
+        * subsequent rotate (without prior start) will return an error.
+        */
+       bool cleared_after_last_stop;
        /*
         * Condition and trigger for size-based rotations.
         */
@@ -176,8 +191,13 @@ struct ltt_session {
        struct lttng_trace_chunk *chunk_being_archived;
        /* Current state of a rotation. */
        enum lttng_rotation_state rotation_state;
+       bool quiet_rotation;
        char *last_archived_chunk_name;
        LTTNG_OPTIONAL(uint64_t) last_archived_chunk_id;
+       struct lttng_dynamic_array destroy_notifiers;
+       struct lttng_dynamic_array clear_notifiers;
+       /* Session base path override. Set non-null. */
+       char *base_path;
 };
 
 /* Prototypes */
@@ -190,6 +210,12 @@ void session_unlock(struct ltt_session *session);
 void session_unlock_list(void);
 
 void session_destroy(struct ltt_session *session);
+int session_add_destroy_notifier(struct ltt_session *session,
+               ltt_session_destroy_notifier notifier, void *user_data);
+
+int session_add_clear_notifier(struct ltt_session *session,
+               ltt_session_clear_notifier notifier, void *user_data);
+void session_notify_clear(struct ltt_session *session);
 
 bool session_get(struct ltt_session *session);
 void session_put(struct ltt_session *session);
@@ -202,7 +228,7 @@ void session_get_net_consumer_ports(
                const struct ltt_session *session,
                uint16_t *control_port, uint16_t *data_port);
 struct lttng_trace_archive_location *session_get_trace_archive_location(
-               struct ltt_session *session);
+               const struct ltt_session *session);
 
 struct ltt_session *session_find_by_name(const char *name);
 struct ltt_session *session_find_by_id(uint64_t id);
@@ -217,7 +243,8 @@ int session_reset_rotation_state(struct ltt_session *session,
 
 /* Create a new trace chunk object from the session's configuration. */
 struct lttng_trace_chunk *session_create_new_trace_chunk(
-               struct ltt_session *session,
+               const struct ltt_session *session,
+               const struct consumer_output *consumer_output_override,
                const char *session_base_path_override,
                const char *chunk_name_override);
 
@@ -237,7 +264,11 @@ int session_set_trace_chunk(struct ltt_session *session,
  * Close a chunk on the remote peers of a session. Has no effect on the
  * ltt_session itself.
  */
-int session_close_trace_chunk(const struct ltt_session *session,
-               struct lttng_trace_chunk *trace_chunk);
+int session_close_trace_chunk(struct ltt_session *session,
+               struct lttng_trace_chunk *trace_chunk,
+               enum lttng_trace_chunk_command_type close_command,
+               char *path);
+
+bool session_output_supports_trace_chunks(const struct ltt_session *session);
 
 #endif /* _LTT_SESSION_H */
This page took 0.024359 seconds and 4 git commands to generate.