)]}'
{
  "commit": "3e3bd2d33a7b36e9d7ed4568603bae800268073a",
  "tree": "1b88e850dfd3f2dec4e9c41ce1d58eba0cd0c4e6",
  "parents": [
    "63151055c1d238f1a89dc8bd96eba0f05512bd7b"
  ],
  "author": {
    "name": "rahul2393",
    "email": "irahul@google.com",
    "time": "Fri Mar 20 15:08:46 2026 +0530"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Mar 20 15:08:46 2026 +0530"
  },
  "message": "fix(spanner): replace multiplexed session request loop with shared in-flight creation (#14215)\n\nFixes: https://github.com/googleapis/google-cloud-go/issues/14212\n\nReworked multiplexed session initialization to use a shared in-flight\ncreation latch instead of the old request\ngoroutine and unbuffered channels. This fixes the startup deadlock\ntriggered by a cancelled read-only transaction\nwaiter and adds regression coverage for cancellation and client shutdown\nwhile session creation is in flight.\n  \nsessionManager used an unbuffered multiplexedSessionReq channel and a\nsingle goroutine to coordinate multiplexed session creation. A cancelled\nwaiter could cause that goroutine to return, leaving future callers\nblocked forever trying to send on the request channel during\ntakeMultiplexed.\n\nReplace that request/ack flow with a shared in-flight creation record on\nsessionManager. When no multiplexed session exists, the manager starts\none background creation with a manager-owned context and exposes a done\nchannel for all waiters in that creation epoch. Waiters now block on\ndone or their own context, and completion is broadcast by closing the\nshared channel. This removes the deadlock where one cancelled context\ncould kill shared coordination, and it also lets Client.Close release\nany waiters blocked behind an in-flight initial create.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dc31f45806649c26408ae57a6e356c15931296ff",
      "old_mode": 33188,
      "old_path": "spanner/session.go",
      "new_id": "ade8836e8343d83e8a21f82299ffbbaaa98e5658",
      "new_mode": 33188,
      "new_path": "spanner/session.go"
    },
    {
      "type": "modify",
      "old_id": "b642e181b7714874a8d89a5d749d7c006ea4e986",
      "old_mode": 33188,
      "old_path": "spanner/session_test.go",
      "new_id": "a2576a46823e6852bd521a87836cb27f9a162519",
      "new_mode": 33188,
      "new_path": "spanner/session_test.go"
    },
    {
      "type": "modify",
      "old_id": "ed6e69d4c73d92ccc337d74ce6a9b1b4ec95235c",
      "old_mode": 33188,
      "old_path": "spanner/sessionclient.go",
      "new_id": "58a725ef31148ad1ae4a5704043563660db87a33",
      "new_mode": 33188,
      "new_path": "spanner/sessionclient.go"
    }
  ]
}
