This is an automated email from the ASF dual-hosted git repository.
jerryshao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new 2fc0693016 [#13041] fix(server): Add @ResponseMetered to
JobOperations#cancelJob (#13046)
2fc0693016 is described below
commit 2fc06930165a657dd8f5a49fa811cffdafed153e
Author: Abdullah <[email protected]>
AuthorDate: Thu Sep 10 06:30:20 2026 +0300
[#13041] fix(server): Add @ResponseMetered to JobOperations#cancelJob
(#13046)
### What changes were proposed in this pull request?
I added `@ResponseMetered(name = "cancel-job", absolute = true)` on
`JobOperations#cancelJob`, next to the existing `@Timed`, same as the
other eight endpoints in that class.
### Why are the changes needed?
`cancelJob` only had `@Timed`. Without `@ResponseMetered`, the Jersey
listener never registers `gravitino-server.cancel-job.2xx-responses` (or
4xx/5xx), so `/metrics` shows cancel latency but not outcome.
Fix: #13041
### Does this PR introduce _any_ user-facing change?
No API or property changes. Cancel responses start showing up on
`/metrics` like the sibling endpoints.
### How was this patch tested?
```
./gradlew :server:test --tests
org.apache.gravitino.server.web.rest.TestJobOperations.testCancelJobIsResponseMetered
-PskipITs
```
---
.../apache/gravitino/server/web/rest/JobOperations.java | 1 +
.../gravitino/server/web/rest/TestJobOperations.java | 17 +++++++++++++++++
2 files changed, 18 insertions(+)
diff --git
a/server/src/main/java/org/apache/gravitino/server/web/rest/JobOperations.java
b/server/src/main/java/org/apache/gravitino/server/web/rest/JobOperations.java
index ec1e989c83..ad9b7b5b70 100644
---
a/server/src/main/java/org/apache/gravitino/server/web/rest/JobOperations.java
+++
b/server/src/main/java/org/apache/gravitino/server/web/rest/JobOperations.java
@@ -442,6 +442,7 @@ public class JobOperations {
@Path("runs/{jobId}")
@Produces("application/vnd.gravitino.v1+json")
@Timed(name = "cancel-job." + MetricNames.HTTP_PROCESS_DURATION, absolute =
true)
+ @ResponseMetered(name = "cancel-job", absolute = true)
@AuthorizationExpression(expression = "METALAKE::OWNER || JOB::OWNER")
public Response cancelJob(
@PathParam("metalake") @AuthorizationMetadata(type =
Entity.EntityType.METALAKE)
diff --git
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestJobOperations.java
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestJobOperations.java
index 478192cecb..399bd76eea 100644
---
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestJobOperations.java
+++
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestJobOperations.java
@@ -28,9 +28,12 @@ import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import com.codahale.metrics.annotation.ResponseMetered;
+import com.codahale.metrics.annotation.Timed;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import java.io.IOException;
+import java.lang.reflect.Method;
import java.time.Instant;
import java.util.Comparator;
import java.util.HashMap;
@@ -1215,6 +1218,20 @@ public class TestJobOperations extends JerseyTest {
Assertions.assertNull(jobResp.getJob().runtimeJobTemplate());
}
+ @Test
+ public void testCancelJobIsResponseMetered() throws Exception {
+ Method cancelJob = JobOperations.class.getMethod("cancelJob",
String.class, String.class);
+ ResponseMetered metered = cancelJob.getAnnotation(ResponseMetered.class);
+ Assertions.assertNotNull(metered);
+ Assertions.assertEquals("cancel-job", metered.name());
+ Assertions.assertTrue(metered.absolute());
+
+ Timed timed = cancelJob.getAnnotation(Timed.class);
+ Assertions.assertNotNull(timed);
+ Assertions.assertTrue(timed.name().startsWith("cancel-job."));
+ Assertions.assertTrue(timed.absolute());
+ }
+
@Test
public void testToDTOFinishedAt() {
// Sentinel value (<= 0) used by the storage layer means "not finished".