return 0;
}
-static
-int regenerate_per_pid_metadata(struct ltt_ust_session *usess,
- struct ust_app *app,
- struct ust_registry_session *registry)
-{
- int ret;
- struct ust_registry_channel *chan;
- struct lttng_ht_iter iter_chan;
-
- pthread_mutex_lock(®istry->lock);
- registry->metadata_len_sent = 0;
- memset(registry->metadata, 0, registry->metadata_alloc_len);
- registry->metadata_len = 0;
- registry->metadata_version++;
-
- fprintf(stderr, "PER_PID REGEN %d\n", registry->metadata_fd);
-#if 0
- if (registry->metadata_fd > 0) {
- /* Clear the metadata file's content. */
- ret = clear_metadata_file(registry->metadata_fd);
- if (ret) {
- pthread_mutex_unlock(®istry->lock);
- goto end;
- }
- }
-#endif
-
- ret = ust_metadata_session_statedump(registry, app,
- registry->major, registry->minor);
- if (ret) {
- pthread_mutex_unlock(®istry->lock);
- ERR("Failed to generate session metadata (err = %d)",
- ret);
- goto end;
- }
- cds_lfht_for_each_entry(registry->channels->ht, &iter_chan.iter,
- chan, node.node) {
- struct ust_registry_event *event;
- struct lttng_ht_iter iter_event;
-
- ret = ust_metadata_channel_statedump(registry, chan);
- if (ret) {
- pthread_mutex_unlock(®istry->lock);
- ERR("Failed to generate channel metadata "
- "(err = %d)", ret);
- goto end;
- }
- cds_lfht_for_each_entry(chan->ht->ht, &iter_event.iter,
- event, node.node) {
- ret = ust_metadata_event_statedump(registry,
- chan, event);
- if (ret) {
- pthread_mutex_unlock(®istry->lock);
- ERR("Failed to generate event metadata "
- "(err = %d)", ret);
- goto end;
- }
- }
- }
- pthread_mutex_unlock(®istry->lock);
-
- ret = 0;
-
-end:
- return ret;
-}
-
/*
* Rotate all the channels of a session.
*
*/
int ust_app_rotate_session(struct ltt_session *session)
{
- int ret = 0;
+ int ret = 0, nr_channels = 0, nr_app = 0;
struct lttng_ht_iter iter;
struct ust_app *app;
struct ltt_ust_session *usess = session->ust_session;
struct buffer_reg_channel *reg_chan;
struct consumer_socket *socket;
+ nr_channels++;
/* Get consumer socket to use to push the metadata.*/
socket = consumer_find_socket_by_bitness(reg->bits_per_long,
usess->consumer);
ret = consumer_rotate_channel(socket,
reg_chan->consumer_key,
usess->uid, usess->gid,
- usess->consumer, pathname, 0);
+ usess->consumer, pathname, 0,
+ session->rotate_count);
if (ret < 0) {
goto error;
}
ret = consumer_rotate_channel(socket,
reg->registry->reg.ust->metadata_key,
usess->uid, usess->gid,
- usess->consumer, pathname, 1);
+ usess->consumer, pathname, 1,
+ session->rotate_count);
if (ret < 0) {
goto error;
}
-
- /* TODO: regenerate metadata here instead of at the end ? */
}
break;
}
/* Session not associated with this app. */
continue;
}
+ nr_app++;
ret = snprintf(pathname, PATH_MAX, DEFAULT_UST_TRACE_DIR "/%s",
ua_sess->path);
if (ret < 0) {
}
ret = consumer_rotate_channel(socket, ua_chan->key,
ua_sess->euid, ua_sess->egid,
- ua_sess->consumer, pathname, 0);
+ ua_sess->consumer, pathname, 0,
+ session->rotate_count);
if (ret < 0) {
goto error;
}
(void) push_metadata(registry, usess->consumer);
ret = consumer_rotate_channel(socket, registry->metadata_key,
ua_sess->euid, ua_sess->egid,
- ua_sess->consumer, pathname, 1);
+ ua_sess->consumer, pathname, 1,
+ session->rotate_count);
if (ret < 0) {
goto error;
}
-
- /*
- ret = regenerate_per_pid_metadata(usess, app, registry);
- if (ret < 0) {
- goto error;
- }
- */
}
break;
}
break;
}
+ if (nr_app == 0 && nr_channels == 0) {
+ session->rotate_pending = 0;
+ session->rotate_status = LTTNG_ROTATE_EMPTY;
+ }
+
ret = LTTNG_OK;
error: