)]}'
{
  "commit": "d4e8a5753bfdbb3bda475fbff5d5f5968760523a",
  "tree": "5cb65676e65c21c050b1e3addf4d4a63c08647f1",
  "parents": [
    "379d81c4f8f50f720aa2856cdab212d07b0234b1"
  ],
  "author": {
    "name": "Richard Zowalla",
    "email": "13417392+rzo1@users.noreply.github.com",
    "time": "Sat Sep 19 19:04:34 2026 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat Sep 19 19:04:34 2026 +0200"
  },
  "message": "#2099 Fetcher bolts: skip a metrics.* value which is not a number (#2170)\n\n* #2099 Fetcher bolts: skip a metrics.* value which is not a number\n\nThe protocols copy every response header into the response metadata, so\na header named metrics.something lands in the namespace the bolts read\ntheir protocol timings from. Long.parseLong was called on the value\nunguarded, so a non-numeric one threw inside the fetch block and a\nresponse which had arrived intact was recorded as FETCH_ERROR, with a\nbare NumberFormatException as the reason.\n\nThe parsing moves into a helper shared by both bolts, which skips a\nvalue it cannot parse and logs it. Metric scopes can still be created\nfrom a response header, which is the rest of #2099.\n\n* Test the non-numeric guard in ProtocolMetrics directly.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "40666c2511ea320ecf40a5a67796d4b79a0770e2",
      "old_mode": 33188,
      "old_path": "core/src/main/java/org/apache/stormcrawler/bolt/FetcherBolt.java",
      "new_id": "598357a7452a21b986cdfb6b041e47b66906690f",
      "new_mode": 33188,
      "new_path": "core/src/main/java/org/apache/stormcrawler/bolt/FetcherBolt.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b9588d96813861d823aeac90b979589f82e9a9cc",
      "new_mode": 33188,
      "new_path": "core/src/main/java/org/apache/stormcrawler/bolt/ProtocolMetrics.java"
    },
    {
      "type": "modify",
      "old_id": "a99dcc403b5a9eea1d49ece57f1dc2262a927b7f",
      "old_mode": 33188,
      "old_path": "core/src/main/java/org/apache/stormcrawler/bolt/SimpleFetcherBolt.java",
      "new_id": "968faae02bf2af21f970884b0879f7efaaa0f201",
      "new_mode": 33188,
      "new_path": "core/src/main/java/org/apache/stormcrawler/bolt/SimpleFetcherBolt.java"
    },
    {
      "type": "modify",
      "old_id": "2a5ec83250a6005d8cea224dc1767079b4b153be",
      "old_mode": 33188,
      "old_path": "core/src/test/java/org/apache/stormcrawler/bolt/AbstractFetcherBoltTest.java",
      "new_id": "ab750c025cedc5ceb3db47cda0ad05d93a17e7f6",
      "new_mode": 33188,
      "new_path": "core/src/test/java/org/apache/stormcrawler/bolt/AbstractFetcherBoltTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "12e7d8c69bb2e48bf2bc4c7ac26458bfd864cc35",
      "new_mode": 33188,
      "new_path": "core/src/test/java/org/apache/stormcrawler/bolt/ProtocolMetricsTest.java"
    }
  ]
}
