Skip to content

Commit

Permalink
Added Location header to run creation
Browse files Browse the repository at this point in the history
Fix for #699

Signed-off-by: Nicolas Kijak <nick.kijak@pngaming.com>
  • Loading branch information
Nicolas Kijak committed Jan 14, 2020
1 parent 11842d8 commit b1d3352
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
17 changes: 14 additions & 3 deletions src/main/java/marquez/api/JobResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
package marquez.api;

import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.Response.Status.CREATED;

import com.codahale.metrics.annotation.ExceptionMetered;
import com.codahale.metrics.annotation.ResponseMetered;
import com.codahale.metrics.annotation.Timed;
import java.net.URI;
import java.util.List;
import java.util.UUID;
import javax.validation.Valid;
Expand All @@ -33,7 +33,9 @@
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import marquez.api.exceptions.JobNotFoundException;
Expand Down Expand Up @@ -146,7 +148,8 @@ public Response list(
public Response createRun(
@PathParam("namespace") String namespaceString,
@PathParam("job") String jobString,
@Valid RunRequest request)
@Valid RunRequest request,
@Context UriInfo uriInfo)
throws MarquezServiceException {
log.debug("Request: {}", request);
final NamespaceName namespaceName = NamespaceName.of(namespaceString);
Expand All @@ -158,7 +161,15 @@ public Response createRun(
final Run run = jobService.createRun(namespaceName, jobName, runMeta);
final RunResponse response = Mapper.toRunResponse(run);
log.debug("Response: {}", response);
return Response.status(CREATED).entity(response).build();
final URI runLocation =
uriInfo
.getBaseUriBuilder()
.clone()
.path(this.getClass())
.path(this.getClass(), "getRun")
.build(run.getId());

return Response.created(runLocation).entity(response).build();
}

@Timed
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/marquez/service/models/Run.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ public class Run {
@NonNull Run.State state;
@Nullable Map<String, String> args;

public UUID getId() {
return id;
}

public Optional<Instant> getNominalStartTime() {
return Optional.ofNullable(nominalStartTime);
}
Expand Down
2 changes: 2 additions & 0 deletions src/test/java/marquez/MarquezAppIntegrationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,8 @@ public void testApp_createRunAndMarkAsComplete() {
final Map<String, Object> run = response0.readEntity(Map.class);
final String runId = (String) run.get("runId");

assertThat(response0.getHeaderString("Location")).isEqualTo(baseUri + "/jobs/runs/" + runId);

final Response response1 =
APP.client()
.target(baseUri + "/jobs/runs/{id}/start")
Expand Down

0 comments on commit b1d3352

Please sign in to comment.