)]}'
{
  "commit": "d907cd88312862f0577833c73c13e1b3bd51b090",
  "tree": "3ca6ec72e3704ebe581d5288f2b54fe47fbb7cef",
  "parents": [
    "f30fd200f13e6099b81edbf1544701de25d65087"
  ],
  "author": {
    "name": "diannahu",
    "email": "diannahu@google.com",
    "time": "Fri May 05 17:00:53 2023 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Fri May 05 17:02:13 2023 -0700"
  },
  "message": "Support multiple interim responses in SimpleClient.\n\nCurrently, SimpleClient and descendants support 100 Continue responses (an\ninterim response) by reading in 100 Continue to response_headers(). Then once\n100 Continue is populated and verified, the client calls\nClearPreliminaryResponse() so that response_headers() can be reused for the\nfinal response.\n\nThis CL updates SimpleClient and descendants to support multiple interim\nresponses by introducing interim_headers(), an ordered sequence of BalsaHeaders\nfor interim responses. This CL removes ClearPreliminaryResponse() and adds\nWaitForInterimResponse(), which in the future may be called multiple times.\n\nSimpleHttpClient also calls BalsaFrame::set_use_interim_headers_callback(true),\nwhich gives some additional testing confidence in this new code path.\n\nThis CL simplifies some 100-specific logic in the test clients. However, the\nclient continues to treat 101 as a final response (even in SimpleHttp2Client,\nfor consistency with SimpleHttpClient) due to the issue in cl/528583898.\n\nOne part of this CL involves updates to the QUIC (test) client ecosystem. I\ndecided to replace the interim/preliminary headers functionality in\nQuicTestClient, as updating interim headers on querying (rather than on\nreceipt) can interact strangely with stream resets and timeouts. This CL\ninstead plumbs a callback to update interim headers with the flow\nSimpleQuicClient --\u003e GfeMockableQuicClient --\u003e QuicSimpleClientSession --\u003e\nQuicSimpleClientStream, which can immediately update interim headers on\nreceipt. A comparison:\n\n$ blaze test //gfe/gfe2/e2e:expect_100_continue_test_ietf_quic\nBefore: \"PASSED in 307.2s\" (http://sponge2/2c1eb63c-2bcc-4399-a329-98c638f562ba)\nAfter: \"PASSED in 11.0s\" (http://sponge2/6c178f44-0aa3-4684-a4b0-e52fdbe61ae2)\n\nI also verified with ++haoyuewang@ that the QuicSpdyClientStream changes do not\nhave a production impact on Hyperloop.\n\nHuge inspiration from and thanks to ++bnc@\u0027s foundational cl/379795244, which\nhas made this CL possible!\n\nPiperOrigin-RevId: 529847861\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4eded5ea8eb226a895120f0135e8ae14eb1a6c94",
      "old_mode": 33188,
      "old_path": "quiche/quic/core/http/quic_spdy_client_stream.cc",
      "new_id": "2f6eb8df3a9b6d21258418662d77db7ba36f20f3",
      "new_mode": 33188,
      "new_path": "quiche/quic/core/http/quic_spdy_client_stream.cc"
    },
    {
      "type": "modify",
      "old_id": "9a952aa23e910629fb1b7303372bdff815f47083",
      "old_mode": 33188,
      "old_path": "quiche/quic/core/http/quic_spdy_client_stream.h",
      "new_id": "02956c63d1137e551a5fdc44e56af5bbce2c3113",
      "new_mode": 33188,
      "new_path": "quiche/quic/core/http/quic_spdy_client_stream.h"
    },
    {
      "type": "modify",
      "old_id": "b249a983e94ad48f72290b7258b3d5a7c256aaf5",
      "old_mode": 33188,
      "old_path": "quiche/quic/core/http/quic_spdy_client_stream_test.cc",
      "new_id": "2735b01f9037f3733e322f1dc27374f63bf1fdc6",
      "new_mode": 33188,
      "new_path": "quiche/quic/core/http/quic_spdy_client_stream_test.cc"
    },
    {
      "type": "modify",
      "old_id": "1f17227e0ed7ff7bd9c574f540ec15ea2467a290",
      "old_mode": 33188,
      "old_path": "quiche/quic/test_tools/quic_test_client.cc",
      "new_id": "5835800cdefff6b0ce0c8bd870c00dd2909a570f",
      "new_mode": 33188,
      "new_path": "quiche/quic/test_tools/quic_test_client.cc"
    },
    {
      "type": "modify",
      "old_id": "9f2a869c96b264c5264a73e8e7e46e2e748bcbdc",
      "old_mode": 33188,
      "old_path": "quiche/quic/test_tools/quic_test_client.h",
      "new_id": "4b950469ce9c6ab80350e944287c879accfd4791",
      "new_mode": 33188,
      "new_path": "quiche/quic/test_tools/quic_test_client.h"
    },
    {
      "type": "modify",
      "old_id": "eaaa921b1acd11763f8b8b6b5396128369042661",
      "old_mode": 33188,
      "old_path": "quiche/quic/tools/quic_simple_client_session.cc",
      "new_id": "0bb15158cf34aaf6fdd4c50ae5f0b59ed32cc7bf",
      "new_mode": 33188,
      "new_path": "quiche/quic/tools/quic_simple_client_session.cc"
    },
    {
      "type": "modify",
      "old_id": "b172afccb7a3190e85c936b97f495b1b2b8fe8be",
      "old_mode": 33188,
      "old_path": "quiche/quic/tools/quic_simple_client_session.h",
      "new_id": "2a0db5d1bb17866d829d62e8cc1d58772706a5e3",
      "new_mode": 33188,
      "new_path": "quiche/quic/tools/quic_simple_client_session.h"
    },
    {
      "type": "modify",
      "old_id": "14de9f03c2c42342eeb111f72ec89ab2fc1d4737",
      "old_mode": 33188,
      "old_path": "quiche/quic/tools/quic_simple_client_stream.cc",
      "new_id": "76dd39fd8bb4c7f24731cc5bb4624e920f2ebc8e",
      "new_mode": 33188,
      "new_path": "quiche/quic/tools/quic_simple_client_stream.cc"
    },
    {
      "type": "modify",
      "old_id": "976ceafbfb8a77a522fbf90f49813f6cdd13c09b",
      "old_mode": 33188,
      "old_path": "quiche/quic/tools/quic_simple_client_stream.h",
      "new_id": "fd7ede4a2c23f28e20816025f99938706cce4dc9",
      "new_mode": 33188,
      "new_path": "quiche/quic/tools/quic_simple_client_stream.h"
    },
    {
      "type": "modify",
      "old_id": "b46e78038b1e25b050492d4d521ed27086b7ca06",
      "old_mode": 33188,
      "old_path": "quiche/quic/tools/quic_spdy_client_base.cc",
      "new_id": "248e379a454efba7bdd4a05125f2b2b8c85f3234",
      "new_mode": 33188,
      "new_path": "quiche/quic/tools/quic_spdy_client_base.cc"
    }
  ]
}
