X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fviewer-session.h;h=f70daed7ba5940617c6a834864575e92d1f54822;hb=4878de5c7deb512bbdac4fdfc498907efa06fb7c;hp=d573379261e91ee603e818f398034d4571eaa49e;hpb=664eef54fd79a523dc0674df806d155c9766a2d1;p=lttng-tools.git diff --git a/src/bin/lttng-relayd/viewer-session.h b/src/bin/lttng-relayd/viewer-session.h index d57337926..f70daed7b 100644 --- a/src/bin/lttng-relayd/viewer-session.h +++ b/src/bin/lttng-relayd/viewer-session.h @@ -2,22 +2,12 @@ #define _VIEWER_SESSION_H /* - * Copyright (C) 2013 - Julien Desfossez - * David Goulet - * 2015 - Mathieu Desnoyers + * Copyright (C) 2013 Julien Desfossez + * Copyright (C) 2013 David Goulet + * Copyright (C) 2015 Mathieu Desnoyers * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License, version 2 only, as - * published by the Free Software Foundation. + * SPDX-License-Identifier: GPL-2.0-only * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include @@ -30,6 +20,7 @@ #include #include "session.h" +#include "lttng-viewer-abi.h" struct relay_viewer_session { /* @@ -40,7 +31,33 @@ struct relay_viewer_session { */ struct cds_list_head session_list; /* RCU list. */ pthread_mutex_t session_list_lock; /* Protects list updates. */ - /* Once set, the current trace chunk of a viewer must not change. */ + /* + * The viewer session's current trace chunk is initially set, when + * a viewer attaches to the viewer session, to a copy the corresponding + * relay_session's current trace chunk. + * + * A live session always attempts to "catch-up" to the newest available + * trace chunk. This means that when a viewer reaches the end of a + * trace chunk, the viewer session may not transition to the "next" one: + * it jumps to the most recent trace chunk available (the one being + * produced by the relay_session). Hence, if the producer performs + * multiple rotations before a viewer completes the consumption of a + * trace chunk, it will skip over those "intermediary" trace chunks. + * + * A viewer session updates its current trace chunk when: + * 1) new viewer streams are created, + * 2) a new index is requested, + * 3) metadata is requested. + * + * Hence, as a general principle, the viewer session will reference the + * most recent trace chunk available _even if its streams do not point to + * it_. It indicates which trace chunk viewer streams should transition + * to when the end of their current trace chunk is reached. + * + * Note that a viewer session's trace chunk points to the session's + * output directory. The sub-directories in which the various stream files + * are created are considered as being a part of their name. + */ struct lttng_trace_chunk *current_trace_chunk; }; @@ -55,5 +72,7 @@ int viewer_session_is_attached(struct relay_viewer_session *vsession, struct relay_session *session); void viewer_session_close_one_session(struct relay_viewer_session *vsession, struct relay_session *session); +int viewer_session_set_trace_chunk_copy(struct relay_viewer_session *vsession, + struct lttng_trace_chunk *relay_session_trace_chunk); #endif /* _VIEWER_SESSION_H */