)]}'
{
  "commit": "93271ed29c94f78b0dd842265a9bc66aa5d762b2",
  "tree": "6750b969e6fe628e788012f540d816417602dcde",
  "parents": [
    "8046bd3adb29648dfae178523f0a72a1acf527aa"
  ],
  "author": {
    "name": "CritasWang",
    "email": "critas@outlook.com",
    "time": "Tue Aug 25 17:46:32 2026 +0800"
  },
  "committer": {
    "name": "CritasWang",
    "email": "critas@outlook.com",
    "time": "Tue Aug 25 18:49:44 2026 +0800"
  },
  "message": "Fix socket timeouts, connection lifecycle and session pool accounting\n\n- Bound every blocking socket read/write after the TCP handshake with a\n  new socket_timeout (SO_RCVTIMEO/SO_SNDTIMEO via socket2), applied\n  before the TLS handshake: RPC reads, drop-time closeSession and the\n  TLS handshake can no longer block forever; SO_KEEPALIVE is enabled.\n  connect_timeout is now one total budget per endpoint across all\n  resolved addresses.\n- Fail over at the handshake level in Session::open (connect +\n  openSession + requestStatementId), mirroring reconnect().\n- Mark a connection broken on transport-level failures so is_open()\n  stops lying; pools discard the session instead of handing it out\n  again, and fetch_results (which cannot be retried) also marks it.\n- SessionPool: spend the acquire_timeout budget on growth/hand-out\n  failures instead of failing instantly, decrement live under the state\n  lock (no lost Condvar wakeups), wake waiters from close() before the\n  blocking closeSession calls, and treat acquire_timeout\u003dDuration::MAX\n  as \"wait without deadline\" instead of panicking.\n- Skip the reconnect pacing sleeps for pooled sessions so a pool slot\n  is not held for the full reconnect walk.\n- Redirect: normalize endpoint matching (case/brackets/loopback),\n  prefer the newest hint when idle sessions hold conflicting hints\n  (process-wide insertion seq), make cache TTL/capacity configurable,\n  and expose TableSessionPool::acquire_for_device.\n- Add regression tests using silent/fake listeners for every fix above.\n\nCloses #4, closes #5, closes #6, closes #7, closes #8, closes #9, closes #10.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5b5837971f85f51052f54580f30ee21b2adab012",
      "old_mode": 33188,
      "old_path": "Cargo.toml",
      "new_id": "c95d2d9fb2cef11fe8add226f04f0cf95b8967ac",
      "new_mode": 33188,
      "new_path": "Cargo.toml"
    },
    {
      "type": "modify",
      "old_id": "93e607b3101b3ddd39139706248d533de1404012",
      "old_mode": 33188,
      "old_path": "README.md",
      "new_id": "eaaf898880483a05bb9c65edeef92a982d8a45d7",
      "new_mode": 33188,
      "new_path": "README.md"
    },
    {
      "type": "modify",
      "old_id": "3da4c98cf375757be2c4a85cda51286206f7d2d2",
      "old_mode": 33188,
      "old_path": "README_ZH.md",
      "new_id": "88942cdbc2581d6036fd95575a744fd987bf4449",
      "new_mode": 33188,
      "new_path": "README_ZH.md"
    },
    {
      "type": "modify",
      "old_id": "3df10aad2a7611f67c6b12aaac838e73b6c05cdc",
      "old_mode": 33188,
      "old_path": "src/client/pool.rs",
      "new_id": "df501ab4863a8cc61e7f87721a6d56455032d5a0",
      "new_mode": 33188,
      "new_path": "src/client/pool.rs"
    },
    {
      "type": "modify",
      "old_id": "45055045d32415e3e992b93165d9b1e022f0062f",
      "old_mode": 33188,
      "old_path": "src/client/redirect.rs",
      "new_id": "7e52a72d980627240de97f777cea921d8874b2db",
      "new_mode": 33188,
      "new_path": "src/client/redirect.rs"
    },
    {
      "type": "modify",
      "old_id": "91480c42915cc453782e9f904a062a1419410a44",
      "old_mode": 33188,
      "old_path": "src/client/session.rs",
      "new_id": "153e78a9d79ff77a3c633f2a5a0346bb2b102ecb",
      "new_mode": 33188,
      "new_path": "src/client/session.rs"
    },
    {
      "type": "modify",
      "old_id": "b708e26e479efd14f9e7f32bb69fc02067dede46",
      "old_mode": 33188,
      "old_path": "src/client/table_session.rs",
      "new_id": "02fb4096273e413e9e32ba8f570610fa173621e0",
      "new_mode": 33188,
      "new_path": "src/client/table_session.rs"
    },
    {
      "type": "modify",
      "old_id": "7bcdf81e99ddcef6d77926b7481bd61ebbd9c907",
      "old_mode": 33188,
      "old_path": "src/connection/mod.rs",
      "new_id": "ed1406f2fdb59513a5eaaa9af31eb4ec1d5e82ec",
      "new_mode": 33188,
      "new_path": "src/connection/mod.rs"
    }
  ]
}
