)]}'
{
  "commit": "cb6650da4742252b3e18315338596e4ca63ed802",
  "tree": "cc2a83792ab48ae26f10553b9cbd5c9d9faf6004",
  "parents": [
    "7bc51f73144ca36e6664a9309cacc125416f3b9a"
  ],
  "author": {
    "name": "pratapaditya04",
    "email": "thesingh.adi.work@gmail.com",
    "time": "Fri Jul 31 12:15:24 2026 +0530"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Jul 31 12:15:24 2026 +0530"
  },
  "message": "[GOBBLIN-2269] Surface snapshot/partition copy metrics in observability (#4206)\n\n* [GOBBLIN-XXXX] Surface snapshot/partition copy metrics in observability\n\nAdd per-dataset snapshotsCommitted and partitionsCommitted counts to both the\nGaaSJobObservabilityEvent DatasetMetric and the job-status JobStatistics REST\nsurface, so file/blob movement jobs (e.g. DDM Iceberg snapshot replication) can\nreport table snapshots and partitions committed.\n\nDatasetMetric (GaaSJobObservabilityEvent.avsc) gains snapshotsCommitted and\npartitionsCommitted (long, default -1 \u003d unsupported/unknown). DatasetTaskSummary\ncarries the two counts as non-@NonNull fields so the existing 5-arg\nRequiredArgsConstructor used by AbstractJobLauncher is preserved; they populate\nvia JSON deserialization for events that supply them, and toDatasetMetric maps\nthem through.\n\nJobStatistics (executionStatistics) gains optional bytesWritten, recordsWritten,\nfilesCommitted, snapshotsCommitted and partitionsCommitted. JobStatusRetriever\nreads them from the flat ddm.* copy-metric keys the JobSummary event persists\ninto the job state, and FlowExecutionResource sets each only when reported, so\njobs that do not emit them are unchanged.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n\n* Drop the unrelated flow-level \u0027issues\u0027 field from the flowexecutions snapshot\n\nFlowExecution.pdl already declares \u0027issues\u0027 on master; this branch never touched\nthat file. The snapshot json was simply stale, so regenerating it picked the field\nup as an incidental diff. Removing it keeps the PR scoped to the copy metrics.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n\n* Fix findbugs UWF_NULL_FIELD on the new DatasetTaskSummary fields\n\nThe \u0027Run static checks\u0027 job failed on :gobblin-runtime:findbugsMain with two\nUWF_NULL_FIELD violations: snapshotsCommitted and partitionsCommitted were\ndeclared with an explicit \u0027\u003d null\u0027 initializer and no in-repo writer, so\nFindBugs correctly concluded every read returns null. They are normally\npopulated reflectively during JSON deserialization, which FindBugs cannot see.\n\nAdd @AllArgsConstructor to give native producers a real write path and drop the\nredundant \u0027\u003d null\u0027 initializers (fields already default to null). The 5-arg\n@RequiredArgsConstructor is untouched, so existing call sites still compile.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "53671f84170cba7151b49c57dfa29f55dbd822f5",
      "old_mode": 33188,
      "old_path": "gobblin-metrics-libs/gobblin-metrics-base/src/main/avro/GaaSJobObservabilityEvent.avsc",
      "new_id": "165560f9be9ec5e7003791e24c0c26bccbfd5982",
      "new_mode": 33188,
      "new_path": "gobblin-metrics-libs/gobblin-metrics-base/src/main/avro/GaaSJobObservabilityEvent.avsc"
    },
    {
      "type": "modify",
      "old_id": "c0c072e3065f04b1a9a3d40d20fb0b3ed5835c14",
      "old_mode": 33188,
      "old_path": "gobblin-restli/gobblin-flow-config-service/gobblin-flow-config-service-api/src/main/pegasus/org/apache/gobblin/service/JobStatistics.pdl",
      "new_id": "9644824387f7828f034cd6c056aded360d4fb98d",
      "new_mode": 33188,
      "new_path": "gobblin-restli/gobblin-flow-config-service/gobblin-flow-config-service-api/src/main/pegasus/org/apache/gobblin/service/JobStatistics.pdl"
    },
    {
      "type": "modify",
      "old_id": "b2cdddc5e3a4e9abfaaeda9c1bbe947d4c781b79",
      "old_mode": 33188,
      "old_path": "gobblin-restli/gobblin-flow-config-service/gobblin-flow-config-service-api/src/main/snapshot/org.apache.gobblin.service.flowexecutions.snapshot.json",
      "new_id": "ff29c5006933f05c2113703471f6256efd2419f8",
      "new_mode": 33188,
      "new_path": "gobblin-restli/gobblin-flow-config-service/gobblin-flow-config-service-api/src/main/snapshot/org.apache.gobblin.service.flowexecutions.snapshot.json"
    },
    {
      "type": "modify",
      "old_id": "df4d02067a507400cbb54db8de264b8cc2f48643",
      "old_mode": 33188,
      "old_path": "gobblin-restli/gobblin-flow-config-service/gobblin-flow-config-service-api/src/main/snapshot/org.apache.gobblin.service.flowstatuses.snapshot.json",
      "new_id": "aba90d9dac13848bdab9e7db556b1b175a2b83fa",
      "new_mode": 33188,
      "new_path": "gobblin-restli/gobblin-flow-config-service/gobblin-flow-config-service-api/src/main/snapshot/org.apache.gobblin.service.flowstatuses.snapshot.json"
    },
    {
      "type": "modify",
      "old_id": "0bcdf569430852eeb09925ac4ded27a9056668ef",
      "old_mode": 33188,
      "old_path": "gobblin-restli/gobblin-flow-config-service/gobblin-flow-config-service-server/src/main/java/org/apache/gobblin/service/FlowExecutionResource.java",
      "new_id": "23dcbd8fd515cee97ddcb80bee6f170d3b0c14c3",
      "new_mode": 33188,
      "new_path": "gobblin-restli/gobblin-flow-config-service/gobblin-flow-config-service-server/src/main/java/org/apache/gobblin/service/FlowExecutionResource.java"
    },
    {
      "type": "modify",
      "old_id": "f8c1d2a1e0827a3c810265d357ca9345d697520e",
      "old_mode": 33188,
      "old_path": "gobblin-runtime/src/main/java/org/apache/gobblin/runtime/DatasetTaskSummary.java",
      "new_id": "adc8a15159efd53053a5d4f363d9d0730419bd66",
      "new_mode": 33188,
      "new_path": "gobblin-runtime/src/main/java/org/apache/gobblin/runtime/DatasetTaskSummary.java"
    },
    {
      "type": "modify",
      "old_id": "8dd91139914f73fe481df4a996f6c70abd4500c5",
      "old_mode": 33188,
      "old_path": "gobblin-runtime/src/main/java/org/apache/gobblin/service/monitoring/JobStatus.java",
      "new_id": "a52cf0e874b282c23b930664b3e04d9c689817d2",
      "new_mode": 33188,
      "new_path": "gobblin-runtime/src/main/java/org/apache/gobblin/service/monitoring/JobStatus.java"
    },
    {
      "type": "modify",
      "old_id": "fa56a57796741540ca02dd4741406500d79146aa",
      "old_mode": 33188,
      "old_path": "gobblin-runtime/src/main/java/org/apache/gobblin/service/monitoring/JobStatusRetriever.java",
      "new_id": "c82e806c6414057acccc5d7007261aeac5020518",
      "new_mode": 33188,
      "new_path": "gobblin-runtime/src/main/java/org/apache/gobblin/service/monitoring/JobStatusRetriever.java"
    }
  ]
}
