projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
relayd: environment variable to disable clear command
[lttng-tools.git]
/
src
/
bin
/
lttng-relayd
/
main.c
diff --git
a/src/bin/lttng-relayd/main.c
b/src/bin/lttng-relayd/main.c
index b3983b163fb32a5b13c593573f92fbfab75b5ca0..6beb21692c4b2fe7077b751456e7f272c9c5c366 100644
(file)
--- a/
src/bin/lttng-relayd/main.c
+++ b/
src/bin/lttng-relayd/main.c
@@
-98,7
+98,7
@@
enum relay_connection_status {
/* command line options */
char *opt_output_path, *opt_working_directory;
/* command line options */
char *opt_output_path, *opt_working_directory;
-static int opt_daemon, opt_background, opt_print_version;
+static int opt_daemon, opt_background, opt_print_version
, opt_allow_clear = 1
;
enum relay_group_output_by opt_group_output_by = RELAYD_GROUP_OUTPUT_BY_UNKNOWN;
/*
enum relay_group_output_by opt_group_output_by = RELAYD_GROUP_OUTPUT_BY_UNKNOWN;
/*
@@
-189,6
+189,7
@@
static struct option long_options[] = {
{ "working-directory", 1, 0, 'w', },
{ "group-output-by-session", 0, 0, 's', },
{ "group-output-by-host", 0, 0, 'p', },
{ "working-directory", 1, 0, 'w', },
{ "group-output-by-session", 0, 0, 's', },
{ "group-output-by-host", 0, 0, 'p', },
+ { "disallow-clear", 0, 0, 'x' },
{ NULL, 0, 0, 0, },
};
{ NULL, 0, 0, 0, },
};
@@
-355,6
+356,10
@@
static int set_option(int opt, const char *arg, const char *optname)
}
opt_group_output_by = RELAYD_GROUP_OUTPUT_BY_HOST;
break;
}
opt_group_output_by = RELAYD_GROUP_OUTPUT_BY_HOST;
break;
+ case 'x':
+ /* Disallow clear */
+ opt_allow_clear = 0;
+ break;
default:
/* Unknown option or other error.
* Error is printed by getopt, just return */
default:
/* Unknown option or other error.
* Error is printed by getopt, just return */
@@
-562,6
+567,19
@@
static int set_options(int argc, char **argv)
if (opt_group_output_by == RELAYD_GROUP_OUTPUT_BY_UNKNOWN) {
opt_group_output_by = RELAYD_GROUP_OUTPUT_BY_HOST;
}
if (opt_group_output_by == RELAYD_GROUP_OUTPUT_BY_UNKNOWN) {
opt_group_output_by = RELAYD_GROUP_OUTPUT_BY_HOST;
}
+ if (opt_allow_clear) {
+ /* Check if env variable exists. */
+ const char *value = lttng_secure_getenv(DEFAULT_LTTNG_RELAYD_DISALLOW_CLEAR_ENV);
+ if (value) {
+ ret = config_parse_value(value);
+ if (ret < 0) {
+ ERR("Invalid value for %s specified", DEFAULT_LTTNG_RELAYD_DISALLOW_CLEAR_ENV);
+ retval = -1;
+ goto exit;
+ }
+ opt_allow_clear = !ret;
+ }
+ }
exit:
free(optstring);
exit:
free(optstring);
@@
-1521,7
+1539,7
@@
static int relay_close_stream(const struct lttcomm_relayd_hdr *recv_hdr,
vstream = viewer_stream_get_by_id(stream->stream_handle);
if (vstream) {
vstream = viewer_stream_get_by_id(stream->stream_handle);
if (vstream) {
- if (
vstream->metadata_sent == stream->metadata_receiv
ed) {
+ if (
stream->no_new_metadata_notifi
ed) {
/*
* Since all the metadata has been sent to the
* viewer and that we have a request to close
/*
* Since all the metadata has been sent to the
* viewer and that we have a request to close
@@
-2188,6
+2206,9
@@
static int relay_recv_index(const struct lttcomm_relayd_hdr *recv_hdr,
index_info.stream_instance_id =
be64toh(index_info.stream_instance_id);
index_info.packet_seq_num = be64toh(index_info.packet_seq_num);
index_info.stream_instance_id =
be64toh(index_info.stream_instance_id);
index_info.packet_seq_num = be64toh(index_info.packet_seq_num);
+ } else {
+ index_info.stream_instance_id = -1ULL;
+ index_info.packet_seq_num = -1ULL;
}
stream = stream_get_by_id(index_info.relay_stream_id);
}
stream = stream_get_by_id(index_info.relay_stream_id);
@@
-2437,7
+2458,7
@@
static int relay_create_trace_chunk(const struct lttcomm_relayd_hdr *recv_hdr,
struct lttng_trace_chunk *chunk = NULL, *published_chunk = NULL;
enum lttng_error_code reply_code = LTTNG_OK;
enum lttng_trace_chunk_status chunk_status;
struct lttng_trace_chunk *chunk = NULL, *published_chunk = NULL;
enum lttng_error_code reply_code = LTTNG_OK;
enum lttng_trace_chunk_status chunk_status;
- struct lttng_directory_handle
session_output
;
+ struct lttng_directory_handle
*session_output = NULL
;
if (!session || !conn->version_check_done) {
ERR("Trying to create a trace chunk before version check");
if (!session || !conn->version_check_done) {
ERR("Trying to create a trace chunk before version check");
@@
-2512,14
+2533,15
@@
static int relay_create_trace_chunk(const struct lttcomm_relayd_hdr *recv_hdr,
goto end;
}
goto end;
}
-
ret = session_init
_output_directory_handle(
- conn->session
, &session_output
);
- if (
re
t) {
+
session_output = session_create
_output_directory_handle(
+ conn->session);
+ if (
!session_outpu
t) {
reply_code = LTTNG_ERR_CREATE_DIR_FAIL;
goto end;
}
reply_code = LTTNG_ERR_CREATE_DIR_FAIL;
goto end;
}
- chunk_status = lttng_trace_chunk_set_as_owner(chunk, &session_output);
- lttng_directory_handle_fini(&session_output);
+ chunk_status = lttng_trace_chunk_set_as_owner(chunk, session_output);
+ lttng_directory_handle_put(session_output);
+ session_output = NULL;
if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
reply_code = LTTNG_ERR_UNK;
ret = -1;
if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
reply_code = LTTNG_ERR_UNK;
ret = -1;
@@
-2575,6
+2597,7
@@
end:
end_no_reply:
lttng_trace_chunk_put(chunk);
lttng_trace_chunk_put(published_chunk);
end_no_reply:
lttng_trace_chunk_put(chunk);
lttng_trace_chunk_put(published_chunk);
+ lttng_directory_handle_put(session_output);
return ret;
}
return ret;
}
@@
-3806,6
+3829,8
@@
int main(int argc, char **argv)
goto exit_options;
}
goto exit_options;
}
+ DBG("Clear command %s", opt_allow_clear ? "allowed" : "disallowed");
+
/* Try to create directory if -o, --output is specified. */
if (opt_output_path) {
if (*opt_output_path != '/') {
/* Try to create directory if -o, --output is specified. */
if (opt_output_path) {
if (*opt_output_path != '/') {
This page took
0.027696 seconds
and
4
git commands to generate.