)]}'
{
  "commit": "0248e6f75605ac5007fa71c2a62e4f325a61d32d",
  "tree": "6394e2f26ad7fd1a02370688e351ae8050653645",
  "parents": [
    "324fce7154eb7e09e02e3b492826245336f22095"
  ],
  "author": {
    "name": "Kim Jin Young",
    "email": "tian__mi__mi@naver.com",
    "time": "Thu May 07 21:34:46 2026 +0900"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu May 07 18:04:46 2026 +0530"
  },
  "message": "core,opentelemetry: Fix server metric labels on early close (#12774)\n\nThis addresses the server-side OpenTelemetry metric labeling bug from\n#12117 where a generated method can be recorded as `grpc.method\u003d\"other\"`\nif `streamClosed()` happens before `serverCallStarted()`.\n\n### What changed\n\n- add an internal `StatsTraceContext.ServerCallMethodListener` hook so\ntracers can consume an already-resolved primary-registry\n`MethodDescriptor`\n- resolve the immutable internal primary registry on the transport path\nand seed method classification before the async `MethodLookup` path runs\n- keep fallback registry lookup on the existing async path\n- update the OpenTelemetry server tracer to use the early-resolved\nmethod classification for close metrics\n\n### Why this shape\n\n- avoids tracer-side `HandlerRegistry` lookup\n- uses only the immutable internal primary registry for early\ntransport-path lookup\n- keeps fallback registry lookup on the existing async path\n\n### Tests\n\n- primary generated method: early close preserves the generated method\nname\n- primary non-generated method: early close still records `other`\n- fallback generated method: fallback lookup remains on the existing\nasync path and does not introduce early transport-path classification\n- tracer-level regression: `serverCallMethodResolved()` +\n`streamClosed()` records the generated method name without waiting for\n`serverCallStarted()`\n\n### Notes\n\n- `ServerCallMethodListener` is an internal hook that carries the\nresolved `MethodDescriptor`; tracers consume the resolved result instead\nof performing registry lookup themselves\n- `ServerImpl` uses `InternalHandlerRegistry` explicitly for the primary\nregistry to make it clear that the early transport- path lookup is\nlimited to the immutable internal primary registry\n- this PR intentionally does not widen transport-path lookup to the\nfallback registry\n\nRef #12117",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d469fdb33dc65d7f4426a89fa90b14e3fd7b7a8a",
      "old_mode": 33188,
      "old_path": "core/src/main/java/io/grpc/internal/ServerImpl.java",
      "new_id": "d9f64c2d4733f8b636ee49c8f4f765cdc0c2fa59",
      "new_mode": 33188,
      "new_path": "core/src/main/java/io/grpc/internal/ServerImpl.java"
    },
    {
      "type": "modify",
      "old_id": "650f0b979aebc4c6614b8f98afb2d58c88ab6d63",
      "old_mode": 33188,
      "old_path": "core/src/main/java/io/grpc/internal/StatsTraceContext.java",
      "new_id": "007aefc0fb858202b9d2dd696195d8162f63c37a",
      "new_mode": 33188,
      "new_path": "core/src/main/java/io/grpc/internal/StatsTraceContext.java"
    },
    {
      "type": "modify",
      "old_id": "3405cb9bb0c7f7ed1570b72a9eac91be5ae83f3d",
      "old_mode": 33188,
      "old_path": "core/src/test/java/io/grpc/internal/ServerImplTest.java",
      "new_id": "91969dd6910afd648700efa380a8e744394a7170",
      "new_mode": 33188,
      "new_path": "core/src/test/java/io/grpc/internal/ServerImplTest.java"
    },
    {
      "type": "modify",
      "old_id": "c9e623b4415f1701ae33749b121d68514db8f895",
      "old_mode": 33188,
      "old_path": "opentelemetry/src/main/java/io/grpc/opentelemetry/OpenTelemetryMetricsModule.java",
      "new_id": "f783b9495dd8340db28d6fc1435cb1ecd4c6ef00",
      "new_mode": 33188,
      "new_path": "opentelemetry/src/main/java/io/grpc/opentelemetry/OpenTelemetryMetricsModule.java"
    },
    {
      "type": "modify",
      "old_id": "14139b8e439f121482af40082edb0981f266e4c6",
      "old_mode": 33188,
      "old_path": "opentelemetry/src/test/java/io/grpc/opentelemetry/OpenTelemetryMetricsModuleTest.java",
      "new_id": "7c9db87519663ac53568119aaa865ba29abc7c70",
      "new_mode": 33188,
      "new_path": "opentelemetry/src/test/java/io/grpc/opentelemetry/OpenTelemetryMetricsModuleTest.java"
    }
  ]
}
