)]}'
{
  "commit": "80bd52200105c77996404b83afec09e8cc92b028",
  "tree": "a23e629491526aa17f2172fb9e507455480df533",
  "parents": [
    "a0d0f91f7254dd07302e0bad7d0de803670ef72a"
  ],
  "author": {
    "name": "Hubert Gruszecki",
    "email": "h.gruszecki@gmail.com",
    "time": "Wed Feb 11 19:44:11 2026 +0100"
  },
  "committer": {
    "name": "Hubert Gruszecki",
    "email": "h.gruszecki@gmail.com",
    "time": "Wed Feb 11 23:33:15 2026 +0100"
  },
  "message": "fix(server): prevent stale segment indices across await points\n\nThe message_cleaner can remove front segments from the log\nvec while other operations yield at .await points on the\nsame compio thread. Code that captured a segment vec index\nbefore an await and used it after would access the wrong\nsegment or panic on out-of-bounds.\n\nThree fixes applied consistently:\n\n1. delete_segments_base: pre-create the replacement segment\n   before draining, then drain + add in a single borrow_mut\n   so the log is never empty across awaits (prevents \"active\n   segment called on empty log\" panic). Removes the now-\n   unused init_log_in_local_partitions.\n\n2. append_messages / rotate_segment: recompute segment_index\n   after each await instead of caching it before.\n\n3. Polling (load_messages_from_disk, by_timestamp): replace\n   pre-computed segment_range with per-iteration re-resolve\n   by start_offset (stable identity). Extract shared lookup\n   into resolve_segment_storage helper that clones Rc readers\n   so fds survive concurrent segment deletion.\n\nIn next PR a benchmark stress test will be implemented,\nincluding a 2 minute run in CI.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9736e33334a79eaa3b9612cc3cbce99e4c6b92b1",
      "old_mode": 33188,
      "old_path": "core/server/src/shard/system/messages.rs",
      "new_id": "d16a550d6fa14d225703ff26e702e952cca64bc0",
      "new_mode": 33188,
      "new_path": "core/server/src/shard/system/messages.rs"
    },
    {
      "type": "modify",
      "old_id": "b805f3da12741ca4d5eb2d5ae3f0ec71499f986d",
      "old_mode": 33188,
      "old_path": "core/server/src/shard/system/segments.rs",
      "new_id": "970f85d13819abcc04859d943faba7273c20911d",
      "new_mode": 33188,
      "new_path": "core/server/src/shard/system/segments.rs"
    },
    {
      "type": "modify",
      "old_id": "03e01f6b29584fc9abf0e911c4d5149349efeb6d",
      "old_mode": 33188,
      "old_path": "core/server/src/shard/system/stats.rs",
      "new_id": "4986514c1da99aa4407ceeefa223eff7926ea1b1",
      "new_mode": 33188,
      "new_path": "core/server/src/shard/system/stats.rs"
    },
    {
      "type": "modify",
      "old_id": "aa481b7b6f1dd9efcf237bc1b5aea4b278d80aca",
      "old_mode": 33188,
      "old_path": "core/server/src/streaming/partitions/ops.rs",
      "new_id": "80dcf5b28571994fa3fc2f5e7a25a21fda7b8d87",
      "new_mode": 33188,
      "new_path": "core/server/src/streaming/partitions/ops.rs"
    },
    {
      "type": "modify",
      "old_id": "2022b411d9138f73133bcae451ff9c26a4e2c3b0",
      "old_mode": 33188,
      "old_path": "core/server/src/streaming/segments/indexes/index_writer.rs",
      "new_id": "32a87e77304de11833ba645ac598202ba44ff3aa",
      "new_mode": 33188,
      "new_path": "core/server/src/streaming/segments/indexes/index_writer.rs"
    },
    {
      "type": "modify",
      "old_id": "439e30a8098383d5bcb03098ca7b8afa0b2d72b2",
      "old_mode": 33188,
      "old_path": "core/server/src/streaming/segments/messages/messages_writer.rs",
      "new_id": "aae0bba6814db5cfb59ea50478b1e8d07f63c461",
      "new_mode": 33188,
      "new_path": "core/server/src/streaming/segments/messages/messages_writer.rs"
    },
    {
      "type": "modify",
      "old_id": "878af0eb19f6a4c8bddd11463bd1e9cf2c2a0c06",
      "old_mode": 33188,
      "old_path": "core/server/src/streaming/segments/mod.rs",
      "new_id": "54ef0d7d19b41096c6805d4138925232f2e6d15c",
      "new_mode": 33188,
      "new_path": "core/server/src/streaming/segments/mod.rs"
    }
  ]
}
