Message ID | 23f44bc904dfdd31f68a27c587b4b61df4bc0041.1604355792.git.steadmon@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Advertise trace2 SID in protocol capabilities | expand |
Josh Steadmon <steadmon@google.com> writes: > diff --git a/upload-pack.c b/upload-pack.c > index 3bb01c5427..d938603c97 100644 > --- a/upload-pack.c > +++ b/upload-pack.c > @@ -1058,6 +1058,7 @@ static void receive_needs(struct upload_pack_data *data, > const char *features; > struct object_id oid_buf; > const char *arg; > + int feature_len; > > reset_timeout(data->timeout); > if (packet_reader_read(reader) != PACKET_READ_NORMAL) > @@ -1109,6 +1110,12 @@ static void receive_needs(struct upload_pack_data *data, > if (data->allow_filter && > parse_feature_request(features, "filter")) > data->filter_capability_requested = 1; > + if ((arg = parse_feature_value(features, "trace2-sid", &feature_len, NULL))) > + { Style. '{' block is opened on the same line as "if (condition)" ends, e.g. arg = parse_feature_value(...); if (arg) { Avoid assignment in the condition part of if/while unless there is a compelling reason to do so. e.g. if ((arg = ...) && further_check_on(arg)) { ... might be justifiable, but here, I do not see any such reason. > + char *client_sid = xstrndup(arg, feature_len); > + trace2_data_string("trace2", NULL, "client-sid", client_sid); > + free(client_sid); > + } > > o = parse_object(the_repository, &oid_buf); > if (!o) { Thanks.
On 2020.11.04 13:26, Junio C Hamano wrote: > Josh Steadmon <steadmon@google.com> writes: > > > diff --git a/upload-pack.c b/upload-pack.c > > index 3bb01c5427..d938603c97 100644 > > --- a/upload-pack.c > > +++ b/upload-pack.c > > @@ -1058,6 +1058,7 @@ static void receive_needs(struct upload_pack_data *data, > > const char *features; > > struct object_id oid_buf; > > const char *arg; > > + int feature_len; > > > > reset_timeout(data->timeout); > > if (packet_reader_read(reader) != PACKET_READ_NORMAL) > > @@ -1109,6 +1110,12 @@ static void receive_needs(struct upload_pack_data *data, > > if (data->allow_filter && > > parse_feature_request(features, "filter")) > > data->filter_capability_requested = 1; > > + if ((arg = parse_feature_value(features, "trace2-sid", &feature_len, NULL))) > > + { > > Style. '{' block is opened on the same line as "if (condition)" > ends, e.g. > > arg = parse_feature_value(...); > if (arg) { > > Avoid assignment in the condition part of if/while unless there is a > compelling reason to do so. e.g. > > if ((arg = ...) && further_check_on(arg)) { > ... > > might be justifiable, but here, I do not see any such reason. Will fix in V3. > > + char *client_sid = xstrndup(arg, feature_len); > > + trace2_data_string("trace2", NULL, "client-sid", client_sid); > > + free(client_sid); > > + } > > > > o = parse_object(the_repository, &oid_buf); > > if (!o) { > > Thanks.
diff --git a/serve.c b/serve.c index b40d7aad34..ffe5ba3f8a 100644 --- a/serve.c +++ b/serve.c @@ -201,6 +201,7 @@ static int process_request(void) struct packet_reader reader; struct strvec keys = STRVEC_INIT; struct protocol_capability *command = NULL; + const char *client_sid; packet_reader_init(&reader, 0, NULL, 0, PACKET_READ_CHOMP_NEWLINE | @@ -264,6 +265,9 @@ static int process_request(void) check_algorithm(the_repository, &keys); + if (has_capability(&keys, "trace2-sid", &client_sid)) + trace2_data_string("trace2", NULL, "client-sid", client_sid); + command->command(the_repository, &keys, &reader); strvec_clear(&keys); diff --git a/t/t5705-trace2-sid-in-capabilities.sh b/t/t5705-trace2-sid-in-capabilities.sh index 0870e78f7c..3fad9462d3 100755 --- a/t/t5705-trace2-sid-in-capabilities.sh +++ b/t/t5705-trace2-sid-in-capabilities.sh @@ -17,11 +17,14 @@ test_expect_success 'setup repos for trace2 SID capability tests' ' for PROTO in 0 1 2 do test_expect_success "trace2 session IDs not advertised by default (fetch v${PROTO})" ' - test_when_finished "rm -rf local tr2-client-events" && + test_when_finished "rm -rf local tr2-client-events tr2-server-events" && cp -r "$LOCAL_PRISTINE" local && GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \ - git -c protocol.version=$PROTO -C local fetch origin && - test -z "$(grep \"key\":\"server-sid\" tr2-client-events)" + git -c protocol.version=$PROTO -C local fetch \ + --upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \ + origin && + test -z "$(grep \"key\":\"server-sid\" tr2-client-events)" && + test -z "$(grep \"key\":\"client-sid\" tr2-server-events)" ' test_expect_success "trace2 session IDs not advertised by default (push v${PROTO})" ' @@ -43,11 +46,15 @@ test_expect_success 'enable SID advertisement' ' for PROTO in 0 1 2 do test_expect_success "trace2 session IDs advertised (fetch v${PROTO})" ' - test_when_finished "rm -rf local tr2-client-events" && + test_when_finished "rm -rf local tr2-client-events tr2-server-events" && cp -r "$LOCAL_PRISTINE" local && + git -C local config trace2.advertiseSID true && GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \ - git -c protocol.version=$PROTO -C local fetch origin && - grep \"key\":\"server-sid\" tr2-client-events + git -c protocol.version=$PROTO -C local fetch \ + --upload-pack "GIT_TRACE2_EVENT=\"$(pwd)/tr2-server-events\" git-upload-pack" \ + origin && + grep \"key\":\"server-sid\" tr2-client-events && + grep \"key\":\"client-sid\" tr2-server-events ' test_expect_success "trace2 session IDs advertised (push v${PROTO})" ' diff --git a/upload-pack.c b/upload-pack.c index 3bb01c5427..d938603c97 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -1058,6 +1058,7 @@ static void receive_needs(struct upload_pack_data *data, const char *features; struct object_id oid_buf; const char *arg; + int feature_len; reset_timeout(data->timeout); if (packet_reader_read(reader) != PACKET_READ_NORMAL) @@ -1109,6 +1110,12 @@ static void receive_needs(struct upload_pack_data *data, if (data->allow_filter && parse_feature_request(features, "filter")) data->filter_capability_requested = 1; + if ((arg = parse_feature_value(features, "trace2-sid", &feature_len, NULL))) + { + char *client_sid = xstrndup(arg, feature_len); + trace2_data_string("trace2", NULL, "client-sid", client_sid); + free(client_sid); + } o = parse_object(the_repository, &oid_buf); if (!o) {
When upload-pack (protocol v0/v1) or a protocol v2 server receives a trace2-sid capability from a client, log the received session ID via a trace2 data event. Signed-off-by: Josh Steadmon <steadmon@google.com> --- serve.c | 4 ++++ t/t5705-trace2-sid-in-capabilities.sh | 19 +++++++++++++------ upload-pack.c | 7 +++++++ 3 files changed, 24 insertions(+), 6 deletions(-)