From: Jonathan Rajotte Date: Mon, 9 Mar 2020 18:45:20 +0000 (-0400) Subject: Fix: sessiond: domain subdirectory not deleted on empty clear X-Git-Tag: v2.13.0-rc1~730 X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=69ebf37e42e67cbd8dca80e9f5f074e88770af2d;ds=sidebyside Fix: sessiond: domain subdirectory not deleted on empty clear Scenario ===== $ lttng create $ lttng enable-event -u -a $ lttng start // no events are produced. $ lttng clear Sessiond fails on clear with this message: Error: Error removing subdirectory '.tmp_new_chunk' file when deleting chunk Cause ===== The "ust" domain directory is still present preventing the removal of the ".tmp_new_chunk" directory. Solution ===== Use lttng_trace_chunk_create_subdirectory, ensuring that the domain folder is moved/deleted as necessary. Fixes #1244 Signed-off-by: Jonathan Rajotte Change-Id: I81d23ffc9f330f50f718957d460ee7a2718c95a1 Signed-off-by: Jérémie Galarneau --- diff --git a/src/bin/lttng-sessiond/consumer.c b/src/bin/lttng-sessiond/consumer.c index 5a6c1d5cf..dc945020b 100644 --- a/src/bin/lttng-sessiond/consumer.c +++ b/src/bin/lttng-sessiond/consumer.c @@ -1792,6 +1792,7 @@ int consumer_create_trace_chunk(struct consumer_socket *socket, char creation_timestamp_buffer[ISO8601_STR_LEN]; const char *creation_timestamp_str = "(none)"; const bool chunk_has_local_output = relayd_id == -1ULL; + enum lttng_trace_chunk_status tc_status; struct lttcomm_consumer_msg msg = { .cmd_type = LTTNG_CONSUMER_CREATE_TRACE_CHUNK, .u.create_trace_chunk.session_id = session_id, @@ -1869,12 +1870,9 @@ int consumer_create_trace_chunk(struct consumer_socket *socket, ret = -LTTNG_ERR_FATAL; goto error; } - ret = lttng_directory_handle_create_subdirectory_as_user( - chunk_directory_handle, - domain_subdir, - S_IRWXU | S_IRWXG, - &chunk_credentials); - if (ret) { + tc_status = lttng_trace_chunk_create_subdirectory( + chunk, domain_subdir); + if (tc_status != LTTNG_TRACE_CHUNK_STATUS_OK) { PERROR("Failed to create chunk domain output directory \"%s\"", domain_subdir); ret = -LTTNG_ERR_FATAL; diff --git a/tests/regression/tools/clear/test_ust b/tests/regression/tools/clear/test_ust index dcfc0ee0c..e121614d2 100755 --- a/tests/regression/tools/clear/test_ust +++ b/tests/regression/tools/clear/test_ust @@ -14,7 +14,7 @@ TESTAPP_PATH="$TESTDIR/utils/testapp" TESTAPP_NAME="gen-ust-events" TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" -NUM_TESTS=1683 +NUM_TESTS=1915 PAGE_SIZE=$(getconf PAGE_SIZE) TRACE_PATH=$(mktemp -d) @@ -113,6 +113,31 @@ function test_ust_streaming () destroy_lttng_session_ok $SESSION_NAME } +function test_ust_streaming_no_event () +{ + local tracing_active=$1 + local clear_twice=$2 + #local rotate_before=$3 ignored + #local rotate_after=$4 + local buffer_type=uid + local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*" + local channel_name="chan" + + diag "Test ust streaming clear no event" + diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type" + create_lttng_session_uri $SESSION_NAME net://localhost + enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name + start_lttng_tracing_ok $SESSION_NAME + + do_clear_session $SESSION_NAME "$tracing_active" "$clear_twice" "$rotate_before" "$rotate_after" + stop_lttng_tracing_ok $SESSION_NAME + + validate_directory_empty "$local_path" + + destroy_lttng_session_ok $SESSION_NAME +} + function test_ust_streaming_rotate_clear () { local tracing_active=$1 @@ -327,6 +352,30 @@ function test_ust_local () destroy_lttng_session_ok $SESSION_NAME } +function test_ust_local_no_event () +{ + local tracing_active=$1 + local clear_twice=$2 + #local rotate_before=$3 ignored + #local rotate_after=$4 ignored + local buffer_type=$5 + local channel_name="chan" + + diag "Test ust local no event" + diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type" + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" + enable_ust_lttng_channel_ok $SESSION_NAME $channel_name "--buffers-$buffer_type" + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name + start_lttng_tracing_ok $SESSION_NAME + + do_clear_session $SESSION_NAME "$tracing_active" "$clear_twice" "$rotate_before" "$rotate_after" + stop_lttng_tracing_ok $SESSION_NAME + + validate_directory_empty "$TRACE_PATH" + + destroy_lttng_session_ok $SESSION_NAME +} + function test_ust_local_rotate_clear () { local tracing_active=$1 @@ -665,6 +714,7 @@ streaming_tests=(test_ust_streaming test_ust_streaming_clear_rotate test_ust_streaming_tracefile_rotation test_ust_streaming_tracefile_rotation_overwrite_files + test_ust_streaming_no_event ) live_tests=(test_ust_streaming_live @@ -675,6 +725,7 @@ live_tests=(test_ust_streaming_live local_tests=(test_ust_local test_ust_local_rotate_clear test_ust_local_clear_rotate + test_ust_local_no_event ) snapshot_uid_tests=(test_ust_streaming_snapshot