relayd: add remote trace chunk close command
[lttng-tools.git] / src / bin / lttng-sessiond / session.c
index 8424762f7e47f9c940a5269b669e9c781ac9d59a..4b5c22bfb8626ef8f52b48ebbb75a77d9b4b05e8 100644 (file)
@@ -429,8 +429,6 @@ int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
        struct lttng_trace_chunk *current_trace_chunk;
        uint64_t chunk_id;
        enum lttng_trace_chunk_status chunk_status;
-       const uint64_t relayd_id = session->consumer->net_seq_index;
-       const bool is_local_trace = relayd_id  == -1ULL;
 
        rcu_read_lock();
        /*
@@ -470,6 +468,12 @@ int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
        }
 
        if (session->ust_session) {
+               const uint64_t relayd_id =
+                               session->ust_session->consumer->net_seq_index;
+               const bool is_local_trace =
+                               session->ust_session->consumer->type ==
+                               CONSUMER_DST_LOCAL;
+
                session->ust_session->current_trace_chunk = new_trace_chunk;
                 if (is_local_trace) {
                        enum lttng_error_code ret_error_code;
@@ -495,6 +499,12 @@ int _session_set_trace_chunk_no_lock_check(struct ltt_session *session,
                 }
         }
        if (session->kernel_session) {
+               const uint64_t relayd_id =
+                               session->kernel_session->consumer->net_seq_index;
+               const bool is_local_trace =
+                               session->kernel_session->consumer->type ==
+                               CONSUMER_DST_LOCAL;
+
                session->kernel_session->current_trace_chunk = new_trace_chunk;
                if (is_local_trace) {
                        enum lttng_error_code ret_error_code;
@@ -667,7 +677,8 @@ error:
 }
 
 int session_close_trace_chunk(const struct ltt_session *session,
-               struct lttng_trace_chunk *trace_chunk)
+               struct lttng_trace_chunk *trace_chunk,
+               const enum lttng_trace_chunk_command_type *close_command)
 {
        int ret = 0;
        bool error_occurred = false;
@@ -676,6 +687,15 @@ int session_close_trace_chunk(const struct ltt_session *session,
        enum lttng_trace_chunk_status chunk_status;
        const time_t chunk_close_timestamp = time(NULL);
 
+       if (close_command) {
+               chunk_status = lttng_trace_chunk_set_close_command(
+                               trace_chunk, *close_command);
+               if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
+                       ret = -1;
+                       goto end;
+               }
+       }
+
        if (chunk_close_timestamp == (time_t) -1) {
                ERR("Failed to sample the close timestamp of the current trace chunk of session \"%s\"",
                                session->name);
@@ -774,7 +794,7 @@ void session_release(struct urcu_ref *ref)
        session_notify_destruction(session);
        lttng_dynamic_array_reset(&session->destroy_notifiers);
        if (session->current_trace_chunk) {
-               ret = session_close_trace_chunk(session, session->current_trace_chunk);
+               ret = session_close_trace_chunk(session, session->current_trace_chunk, NULL);
                if (ret) {
                        ERR("Failed to close the current trace chunk of session \"%s\" during its release",
                                        session->name);
This page took 0.024071 seconds and 4 git commands to generate.