Github user ijokarumawak commented on a diff in the pull request:

    https://github.com/apache/nifi/pull/2990#discussion_r217269622
  
    --- Diff: 
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/OutputPortResource.java
 ---
    @@ -315,6 +319,90 @@ public Response removeOutputPort(
             );
         }
     
    +
    +    /**
    +     * Updates the operational status for the specified input port with 
the specified values.
    +     *
    +     * @param httpServletRequest request
    +     * @param id                 The id of the port to update.
    +     * @param requestRunStatus    A portRunStatusEntity.
    +     * @return A portEntity.
    +     */
    +    @PUT
    +    @Consumes(MediaType.APPLICATION_JSON)
    +    @Produces(MediaType.APPLICATION_JSON)
    +    @Path("/{id}/run-status")
    +    @ApiOperation(
    +            value = "Updates run status of an output-port",
    +            response = ProcessorEntity.class,
    +            authorizations = {
    +                    @Authorization(value = "Write - /output-ports/{uuid} 
or /operation/output-ports/{uuid}")
    +            }
    +    )
    +    @ApiResponses(
    +            value = {
    +                    @ApiResponse(code = 400, message = "NiFi was unable to 
complete the request because it was invalid. The request should not be retried 
without modification."),
    +                    @ApiResponse(code = 401, message = "Client could not 
be authenticated."),
    +                    @ApiResponse(code = 403, message = "Client is not 
authorized to make this request."),
    +                    @ApiResponse(code = 404, message = "The specified 
resource could not be found."),
    +                    @ApiResponse(code = 409, message = "The request was 
valid but NiFi was not in the appropriate state to process it. Retrying the 
same request later may be successful.")
    +            }
    +    )
    +    public Response updateRunStatus(
    +            @Context final HttpServletRequest httpServletRequest,
    +            @ApiParam(
    +                    value = "The port id.",
    +                    required = true
    +            )
    +            @PathParam("id") final String id,
    +            @ApiParam(
    +                    value = "The port run status.",
    +                    required = true
    +            ) final PortRunStatusEntity requestRunStatus) {
    +
    +        if (requestRunStatus == null) {
    +            throw new IllegalArgumentException("Port run status must be 
specified.");
    +        }
    +
    +        if (requestRunStatus.getRevision() == null) {
    +            throw new IllegalArgumentException("Revision must be 
specified.");
    +        }
    +
    +        requestRunStatus.validateState();
    +
    +        if (isReplicateRequest()) {
    +            return replicate(HttpMethod.PUT, requestRunStatus);
    +        } else if (isDisconnectedFromCluster()) {
    +            
verifyDisconnectedNodeModification(requestRunStatus.isDisconnectedNodeAcknowledged());
    +        }
    +
    +        // handle expects request (usually from the cluster manager)
    +        final Revision requestRevision = 
getRevision(requestRunStatus.getRevision(), id);
    +        // Create port DTO to verify if it can be updated.
    +        final PortDTO portDTO = new PortDTO();
    +        portDTO.setId(id);
    +        portDTO.setState(requestRunStatus.getState());
    +
    +        return withWriteLock(
    +                serviceFacade,
    +                requestRunStatus,
    +                requestRevision,
    +                lookup -> {
    +                    final NiFiUser user = NiFiUserUtils.getNiFiUser();
    +
    +                    final Authorizable authorizable = 
lookup.getOutputPort(id);
    +                    OperationAuthorizable.authorize(authorizable, 
authorizer, RequestAction.WRITE, user);
    +                },
    +                () -> serviceFacade.verifyUpdateOutputPort(portDTO),
    +                (revision, runStatusEntity) -> {
    +                    // update the input port
    +                    final PortEntity entity = 
serviceFacade.updateOutputPort(revision, portDTO);
    --- End diff --
    
    Fixed.


---

Reply via email to