git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 07/11] transport: log received server session ID

From
Josh Steadmon <steadmon@google.com>
Date
Nov 11, 2020, 23:29 UTC
Message-ID
<014cae8dc1c3e03e149f8abc98f2f1a50bb0cb98.1605136908.git.steadmon@google.com>
In-Reply-To
<cover.1605136908.git.steadmon@google.com>

When a client receives a session-id capability from a protocol v0, v1, or v2 server, log the received session ID via a trace2 data event.

Signed-off-by: Josh Steadmon <steadmon@google.com>
---
 t/t5705-session-id-in-capabilities.sh | 64 +++++++++++++++++++++++++++
 transport.c                           | 10 +++++
 2 files changed, 74 insertions(+)
 create mode 100755 t/t5705-session-id-in-capabilities.sh
diff --git a/t/t5705-session-id-in-capabilities.sh b/t/t5705-session-id-in-capabilities.sh
new file mode 100755
index 0000000000..9e782f4413
--- /dev/null
+++ b/t/t5705-session-id-in-capabilities.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+test_description='session ID in capabilities'
+
+. ./test-lib.sh
+
+REPO="$(pwd)/repo"
+LOCAL_PRISTINE="$(pwd)/local_pristine"
+
+test_expect_success 'setup repos for session ID capability tests' '
+	git init "$REPO" &&
+	test_commit -C "$REPO" a &&
+	git clone "file://$REPO" "$LOCAL_PRISTINE" &&
+	test_commit -C "$REPO" b
+'
+
+for PROTO in 0 1 2
+do
+	test_expect_success "session IDs not advertised by default (fetch v${PROTO})" '
+		test_when_finished "rm -rf local tr2-client-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)"
+	'
+
+	test_expect_success "session IDs not advertised by default (push v${PROTO})" '
+		test_when_finished "rm -rf local tr2-client-events" &&
+		cp -r "$LOCAL_PRISTINE" local &&
+		git -C local pull --no-rebase origin &&
+		GIT_TRACE2_EVENT_NESTING=5 \
+		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
+		git -c protocol.version=$PROTO -C local push origin &&
+		test -z "$(grep \"key\":\"server-sid\" tr2-client-events)"
+	'
+done
+
+test_expect_success 'enable SID advertisement' '
+	git -C "$REPO" config transfer.advertiseSID true &&
+	git -C "$LOCAL_PRISTINE" config transfer.advertiseSID true
+'
+
+for PROTO in 0 1 2
+do
+	test_expect_success "session IDs advertised (fetch v${PROTO})" '
+		test_when_finished "rm -rf local tr2-client-events" &&
+		cp -r "$LOCAL_PRISTINE" local &&
+		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
+		git -c protocol.version=$PROTO -C local fetch origin &&
+		grep \"key\":\"server-sid\" tr2-client-events
+	'
+
+	test_expect_success "session IDs advertised (push v${PROTO})" '
+		test_when_finished "rm -rf local tr2-client-events" &&
+		cp -r "$LOCAL_PRISTINE" local &&
+		git -C local pull --no-rebase origin &&
+		GIT_TRACE2_EVENT_NESTING=5 \
+		GIT_TRACE2_EVENT="$(pwd)/tr2-client-events" \
+		git -c protocol.version=$PROTO -C local push origin &&
+		grep \"key\":\"server-sid\" tr2-client-events
+	'
+done
+
+test_done
diff --git a/transport.c b/transport.c
index 47da955e4f..679a35e7c1 100644
--- a/transport.c
+++ b/transport.c
@@ -286,6 +286,8 @@ static struct ref *handshake(struct transport *transport, int for_push,
 	struct git_transport_data *data = transport->data;
 	struct ref *refs = NULL;
 	struct packet_reader reader;
+	int sid_len;
+	const char *server_sid;
 
 	connect_setup(transport, for_push);
 
@@ -297,6 +299,8 @@ static struct ref *handshake(struct transport *transport, int for_push,
 	data->version = discover_version(&reader);
 	switch (data->version) {
 	case protocol_v2:
+		if (server_feature_v2("session-id", &server_sid))
+			trace2_data_string("transfer", NULL, "server-sid", server_sid);
 		if (must_list_refs)
 			get_remote_refs(data->fd[1], &reader, &refs, for_push,
 					ref_prefixes,
@@ -310,6 +314,12 @@ static struct ref *handshake(struct transport *transport, int for_push,
 				 for_push ? REF_NORMAL : 0,
 				 &data->extra_have,
 				 &data->shallow);
+		server_sid = server_feature_value("session-id", &sid_len);
+		if (server_sid) {
+			char *sid = xstrndup(server_sid, sid_len);
+			trace2_data_string("transfer", NULL, "server-sid", sid);
+			free(sid);
+		}
 		break;
 	case protocol_unknown_version:
 		BUG("unknown protocol version");
-- 
2.29.2.222.g5d2a92d10f8-goog
Previous: Josh SteadmonNext: Josh Steadmon
Message 56 of 66 in “Advertise trace2 SID in protocol capabilities”
  1. 00/10 Advertise trace2 SID in protocol capabilitiesJosh Steadmon, Oct 29, 2020
  2. 01/10 docs: new capability to advertise trace2 SIDsJosh Steadmon, Oct 29, 2020
  3. 02/10 docs: new trace2.advertiseSID optionJosh Steadmon, Oct 29, 2020
  4. 03/10 upload-pack: advertise trace2 SID in v0 capabilitiesJosh Steadmon, Oct 29, 2020
  5. 05/10 serve: advertise trace2 SID in v2 capabilitiesJosh Steadmon, Oct 29, 2020
  6. 04/10 receive-pack: advertise trace2 SID in v0 capabilitiesJosh Steadmon, Oct 29, 2020
  7. 06/10 transport: log received server trace2 SIDJosh Steadmon, Oct 29, 2020
  8. 07/10 fetch-pack: advertise trace2 SID in capabilitiesJosh Steadmon, Oct 29, 2020
  9. 08/10 upload-pack, serve: log received client trace2 SIDJosh Steadmon, Oct 29, 2020
  10. 09/10 send-pack: advertise trace2 SID in capabilitiesJosh Steadmon, Oct 29, 2020
  11. 10/10 receive-pack: log received client trace2 SIDJosh Steadmon, Oct 29, 2020
  12. Jeff HostetlerOct 30, 2020
  13. Josh SteadmonNov 2, 2020
  14. Junio C HamanoNov 3, 2020
  15. Jeff HostetlerNov 5, 2020
  16. Josh SteadmonNov 10, 2020
  17. Junio C HamanoOct 30, 2020
  18. 00/11 Advertise trace2 SID in protocol capabilitiesJosh Steadmon, Nov 2, 2020
  19. 02/11 docs: new trace2.advertiseSID optionJosh Steadmon, Nov 2, 2020
  20. Junio C HamanoNov 3, 2020
  21. Josh SteadmonNov 5, 2020
  22. Junio C HamanoNov 5, 2020
  23. Johannes SchindelinNov 6, 2020
  24. 01/11 docs: new capability to advertise trace2 SIDsJosh Steadmon, Nov 2, 2020
  25. Junio C HamanoNov 3, 2020
  26. Jeff HostetlerNov 5, 2020
  27. Ævar Arnfjörð BjarmasonNov 12, 2020
  28. Junio C HamanoNov 12, 2020
  29. Jeff HostetlerNov 12, 2020
  30. Josh SteadmonNov 11, 2020
  31. 03/11 trace2: add a public function for getting the SIDJosh Steadmon, Nov 2, 2020
  32. 05/11 receive-pack: advertise trace2 SID in v0 capabilitiesJosh Steadmon, Nov 2, 2020
  33. 04/11 upload-pack: advertise trace2 SID in v0 capabilitiesJosh Steadmon, Nov 2, 2020
  34. Junio C HamanoNov 3, 2020
  35. Josh SteadmonNov 5, 2020
  36. 06/11 serve: advertise trace2 SID in v2 capabilitiesJosh Steadmon, Nov 2, 2020
  37. Junio C HamanoNov 4, 2020
  38. 07/11 transport: log received server trace2 SIDJosh Steadmon, Nov 2, 2020
  39. Junio C HamanoNov 4, 2020
  40. Josh SteadmonNov 11, 2020
  41. Jeff HostetlerNov 12, 2020
  42. 08/11 fetch-pack: advertise trace2 SID in capabilitiesJosh Steadmon, Nov 2, 2020
  43. Junio C HamanoNov 4, 2020
  44. Josh SteadmonNov 5, 2020
  45. Junio C HamanoNov 5, 2020
  46. Josh SteadmonNov 11, 2020
  47. 09/11 upload-pack, serve: log received client trace2 SIDJosh Steadmon, Nov 2, 2020
  48. Junio C HamanoNov 4, 2020
  49. Josh SteadmonNov 5, 2020
  50. 10/11 send-pack: advertise trace2 SID in capabilitiesJosh Steadmon, Nov 2, 2020
  51. 11/11 receive-pack: log received client trace2 SIDJosh Steadmon, Nov 2, 2020
  52. Junio C HamanoNov 3, 2020
  53. 00/11 Advertise session ID in protocol capabilitiesJosh Steadmon, Nov 11, 2020
  54. 06/11 serve: advertise session ID in v2 capabilitiesJosh Steadmon, Nov 11, 2020
  55. 08/11 fetch-pack: advertise session ID in capabilitiesJosh Steadmon, Nov 11, 2020
  56. 07/11 transport: log received server session IDJosh Steadmon, Nov 11, 2020
  57. 10/11 send-pack: advertise session ID in capabilitiesJosh Steadmon, Nov 11, 2020
  58. 09/11 upload-pack, serve: log received client session IDJosh Steadmon, Nov 11, 2020
  59. 11/11 receive-pack: log received client session IDJosh Steadmon, Nov 11, 2020
  60. 05/11 receive-pack: advertise session ID in v0 capabilitiesJosh Steadmon, Nov 11, 2020
  61. 04/11 upload-pack: advertise session ID in v0 capabilitiesJosh Steadmon, Nov 11, 2020
  62. 03/11 trace2: add a public function for getting the SIDJosh Steadmon, Nov 11, 2020
  63. 02/11 docs: new transfer.advertiseSID optionJosh Steadmon, Nov 11, 2020
  64. 01/11 docs: new capability to advertise session IDsJosh Steadmon, Nov 11, 2020
  65. Junio C HamanoNov 25, 2020
  66. Josh SteadmonNov 25, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.