Store the instance id and packet_seq_num in indexes
[lttng-tools.git] / src / common / ust-consumer / ust-consumer.c
index d0f7ac53ee651371ba4b59444df5a8ae6c391330..5686fbd09fe58966cebf3f3be70bf8ec9acd339e 100644 (file)
@@ -1029,6 +1029,8 @@ static int snapshot_channel(uint64_t key, char *path, uint64_t relayd_id,
        DBG("UST consumer snapshot channel %" PRIu64, key);
 
        cds_list_for_each_entry(stream, &channel->streams.head, send_node) {
+               /* Are we at a position _before_ the first available packet ? */
+               bool before_first_packet = true;
 
                health_code_update();
 
@@ -1095,6 +1097,7 @@ static int snapshot_channel(uint64_t key, char *path, uint64_t relayd_id,
                while (consumed_pos < produced_pos) {
                        ssize_t read_len;
                        unsigned long len, padded_len;
+                       int lost_packet = 0;
 
                        health_code_update();
 
@@ -1108,6 +1111,15 @@ static int snapshot_channel(uint64_t key, char *path, uint64_t relayd_id,
                                }
                                DBG("UST consumer get subbuf failed. Skipping it.");
                                consumed_pos += stream->max_sb_size;
+
+                               /*
+                                * Start accounting lost packets only when we
+                                * already have extracted packets (to match the
+                                * content of the final snapshot).
+                                */
+                               if (!before_first_packet) {
+                                       lost_packet = 1;
+                               }
                                continue;
                        }
 
@@ -1143,6 +1155,16 @@ static int snapshot_channel(uint64_t key, char *path, uint64_t relayd_id,
                                goto error_close_stream;
                        }
                        consumed_pos += stream->max_sb_size;
+
+                       /*
+                        * Only account lost packets located between
+                        * succesfully extracted packets (do not account before
+                        * and after since they are not visible in the
+                        * resulting snapshot).
+                        */
+                       stream->chan->lost_packets += lost_packet;
+                       lost_packet = 0;
+                       before_first_packet = false;
                }
 
                /* Simply close the stream so we can use it on the next snapshot. */
@@ -2057,6 +2079,20 @@ static int get_index_values(struct ctf_packet_index *index,
        }
        index->stream_id = htobe64(index->stream_id);
 
+       ret = ustctl_get_instance_id(ustream, &index->stream_instance_id);
+       if (ret < 0) {
+               PERROR("ustctl_get_instance_id");
+               goto error;
+       }
+       index->stream_instance_id = htobe64(index->stream_instance_id);
+
+       ret = ustctl_get_sequence_number(ustream, &index->packet_seq_num);
+       if (ret < 0) {
+               PERROR("ustctl_get_sequence_number");
+               goto error;
+       }
+       index->packet_seq_num = htobe64(index->packet_seq_num);
+
 error:
        return ret;
 }
This page took 0.025185 seconds and 4 git commands to generate.