This is still RFC, as I still haven't done performance testing yet. I'm mainly looking for feedback right now on patch 3/3, which extends the tr2_dst API with an optional function to write a custom message into the overload sentinel file. Changes since V2: * Added a new patch (3/3) that allows the different trace2 targets to write custom messages to the overload sentinel file. * Added a new "overload" trace2 event type. * Bumped up the trace2 event format version. * Moved the test from t0210 to t0212, so that we can test the custom writer for the event target at the same time. * Removed some unnecessary sanity-checking in the test. * Fixed a coccicheck complaint about strbuf_addbuf. * Used hardcoded file modes to be consistent with the rest of the project. Josh Steadmon (3): docs: mention trace2 target-dir mode in git-config trace2: don't overload target directories trace2: write overload message to sentinel files Documentation/config/trace2.txt | 6 ++ Documentation/technical/api-trace2.txt | 24 +++-- Documentation/trace2-target-values.txt | 4 +- t/t0212-trace2-event.sh | 17 ++++ trace2/tr2_dst.c | 118 +++++++++++++++++++++++++ trace2/tr2_dst.h | 3 + trace2/tr2_sysenv.c | 3 + trace2/tr2_sysenv.h | 2 + trace2/tr2_tgt_event.c | 21 ++++- trace2/tr2_tgt_normal.c | 2 +- trace2/tr2_tgt_perf.c | 2 +- 11 files changed, 191 insertions(+), 11 deletions(-) Range-diff against v2: 1: 65e05a3db5 = 1: eacffe250d docs: mention trace2 target-dir mode in git-config 2: f897a11068 ! 2: bf20ec8ea2 trace2: don't overload target directories @@ Documentation/config/trace2.txt: trace2.destinationDebug:: + write a sentinel file that will block further tracing to this + directory. Defaults to 0, which disables this check. - ## t/t0210-trace2-normal.sh ## -@@ t/t0210-trace2-normal.sh: test_expect_success 'using global config with include' ' + ## t/t0212-trace2-event.sh ## +@@ t/t0212-trace2-event.sh: test_expect_success JSON_PP 'using global config, event stream, error event' ' test_cmp expect actual ' @@ t/t0210-trace2-normal.sh: test_expect_success 'using global config with include' + test_seq $GIT_TRACE2_MAX_FILES >../expected_filenames.txt && + xargs touch <../expected_filenames.txt && + cd .. && -+ ls trace_target_dir >first_ls_output.txt && -+ test_cmp expected_filenames.txt first_ls_output.txt && -+ GIT_TRACE2="$(pwd)/trace_target_dir" test-tool trace2 001return 0 ++ GIT_TRACE2_EVENT="$(pwd)/trace_target_dir" test-tool trace2 001return 0 + ) && + echo git-trace2-overload >>expected_filenames.txt && -+ ls trace_target_dir >second_ls_output.txt && -+ test_cmp expected_filenames.txt second_ls_output.txt ++ ls trace_target_dir >ls_output.txt && ++ test_cmp expected_filenames.txt ls_output.txt +' + test_done @@ trace2/tr2_dst.c: void tr2_dst_trace_disable(struct tr2_dst *dst) + } + + /* check sentinel */ -+ strbuf_addstr(&sentinel_path, path.buf); ++ strbuf_addbuf(&sentinel_path, &path); + strbuf_addstr(&sentinel_path, OVERLOAD_SENTINEL_NAME); + if (!stat(sentinel_path.buf, &statbuf)) { + ret = 1; @@ trace2/tr2_dst.c: void tr2_dst_trace_disable(struct tr2_dst *dst) + closedir(dirp); + + if (file_count >= tr2env_max_files) { -+ creat(sentinel_path.buf, S_IRUSR | S_IWUSR); ++ creat(sentinel_path.buf, 0666); + ret = 1; + goto cleanup; + } -: ---------- > 3: bab45cb735 trace2: write overload message to sentinel files -- 2.23.0.237.gc6a4ce50a0-goog