This number of snapshots is per session.
Signed-off-by: David Goulet <dgoulet@efficios.com>
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);
}
goto error;
}
+ /* Use the global session count for the temporary snapshot. */
+ tmp_output.nb_snapshot = session->snapshot.nb_snapshot;
use_tmp_output = 1;
}
if (ret < 0) {
goto error;
}
+ snapshot_success = 1;
} else {
struct snapshot_output *sout;
struct lttng_ht_iter iter;
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();
}
if (ret < 0) {
goto error;
}
+ snapshot_success = 1;
} else {
struct snapshot_output *sout;
struct lttng_ht_iter iter;
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;
}
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;
}
} 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;
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;
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;
};