Add the number of snapshot taken to the output path
authorDavid Goulet <dgoulet@efficios.com>
Fri, 12 Jul 2013 14:53:59 +0000 (10:53 -0400)
committerDavid Goulet <dgoulet@efficios.com>
Fri, 12 Jul 2013 15:18:28 +0000 (11:18 -0400)
This number of snapshots is per session.

Signed-off-by: David Goulet <dgoulet@efficios.com>
src/bin/lttng-sessiond/cmd.c
src/bin/lttng-sessiond/consumer.c
src/bin/lttng-sessiond/snapshot.h

index 636450782d7a7a4729d332c379a157140cf02a28..f55c772c147aafbcc2a3914d4a49746b848cdafc 100644 (file)
@@ -2584,7 +2584,7 @@ int cmd_snapshot_record(struct ltt_session *session,
        int ret = LTTNG_OK;
        unsigned int use_tmp_output = 0;
        struct snapshot_output tmp_output;
-       unsigned int nb_streams;
+       unsigned int nb_streams, snapshot_success = 0;
 
        assert(session);
 
@@ -2618,6 +2618,8 @@ int cmd_snapshot_record(struct ltt_session *session,
                        }
                        goto error;
                }
+               /* Use the global session count for the temporary snapshot. */
+               tmp_output.nb_snapshot = session->snapshot.nb_snapshot;
                use_tmp_output = 1;
        }
 
@@ -2636,6 +2638,7 @@ int cmd_snapshot_record(struct ltt_session *session,
                        if (ret < 0) {
                                goto error;
                        }
+                       snapshot_success = 1;
                } else {
                        struct snapshot_output *sout;
                        struct lttng_ht_iter iter;
@@ -2661,12 +2664,15 @@ int cmd_snapshot_record(struct ltt_session *session,
                                                        sizeof(tmp_output.name));
                                }
 
+                               tmp_output.nb_snapshot = session->snapshot.nb_snapshot;
+
                                ret = record_kernel_snapshot(ksess, &tmp_output,
                                                session, wait, nb_streams);
                                if (ret < 0) {
                                        rcu_read_unlock();
                                        goto error;
                                }
+                               snapshot_success = 1;
                        }
                        rcu_read_unlock();
                }
@@ -2681,6 +2687,7 @@ int cmd_snapshot_record(struct ltt_session *session,
                        if (ret < 0) {
                                goto error;
                        }
+                       snapshot_success = 1;
                } else {
                        struct snapshot_output *sout;
                        struct lttng_ht_iter iter;
@@ -2708,17 +2715,24 @@ int cmd_snapshot_record(struct ltt_session *session,
                                                        sizeof(tmp_output.name));
                                }
 
+                               tmp_output.nb_snapshot = session->snapshot.nb_snapshot;
+
                                ret = record_ust_snapshot(usess, &tmp_output, session,
                                                wait, nb_streams);
                                if (ret < 0) {
                                        rcu_read_unlock();
                                        goto error;
                                }
+                               snapshot_success = 1;
                        }
                        rcu_read_unlock();
                }
        }
 
+       if (snapshot_success) {
+               session->snapshot.nb_snapshot++;
+       }
+
 error:
        return ret;
 }
index 66fecd617612bb44fe6c7d066a32a7a75e65f5b3..79fdbf1c8b632bc9f049e27511f7b593314bd0f7 100644 (file)
@@ -1232,8 +1232,9 @@ int consumer_snapshot_channel(struct consumer_socket *socket, uint64_t key,
                msg.u.snapshot_channel.relayd_id = output->consumer->net_seq_index;
                msg.u.snapshot_channel.use_relayd = 1;
                ret = snprintf(msg.u.snapshot_channel.pathname,
-                               sizeof(msg.u.snapshot_channel.pathname), "%s/%s-%s%s",
-                               output->consumer->subdir, output->name, output->datetime,
+                               sizeof(msg.u.snapshot_channel.pathname),
+                               "%s/%s-%s-%" PRIu64 "%s", output->consumer->subdir,
+                               output->name, output->datetime, output->nb_snapshot,
                                session_path);
                if (ret < 0) {
                        ret = -LTTNG_ERR_NOMEM;
@@ -1241,9 +1242,10 @@ int consumer_snapshot_channel(struct consumer_socket *socket, uint64_t key,
                }
        } else {
                ret = snprintf(msg.u.snapshot_channel.pathname,
-                               sizeof(msg.u.snapshot_channel.pathname), "%s/%s-%s%s",
-                               output->consumer->dst.trace_path, output->name,
-                               output->datetime, session_path);
+                               sizeof(msg.u.snapshot_channel.pathname),
+                               "%s/%s-%s-%" PRIu64 "%s", output->consumer->dst.trace_path,
+                               output->name, output->datetime, output->nb_snapshot,
+                               session_path);
                if (ret < 0) {
                        ret = -LTTNG_ERR_NOMEM;
                        goto error;
index a505128a6e03bf9f2471419cc0fa052c18b408fd..bdf0570366061c1691745a0a08c5ba4ceb5cc77e 100644 (file)
@@ -32,6 +32,8 @@ struct consumer_output;
 struct snapshot_output {
        uint32_t id;
        uint64_t max_size;
+       /* Number of snapshot taken with that output. */
+       uint64_t nb_snapshot;
        char name[NAME_MAX];
        struct consumer_output *consumer;
        int kernel_sockets_copied;
@@ -50,6 +52,11 @@ struct snapshot_output {
 struct snapshot {
        unsigned long next_output_id;
        size_t nb_output;
+       /*
+        * Number of snapshot taken for that object. This value is used with a
+        * temporary output of a snapshot record.
+        */
+       uint64_t nb_snapshot;
        struct lttng_ht *output_ht;
 };
 
This page took 0.029882 seconds and 5 git commands to generate.