[ 
https://issues.apache.org/jira/browse/NIFI-375?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16613060#comment-16613060
 ] 

ASF GitHub Bot commented on NIFI-375:
-------------------------------------

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

    https://github.com/apache/nifi/pull/2990#discussion_r217269181
  
    --- Diff: 
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerServiceResource.java
 ---
    @@ -741,6 +743,88 @@ public Response removeControllerService(
             );
         }
     
    +    /**
    +     * Updates the operational status for the specified controller service 
with the specified values.
    +     *
    +     * @param httpServletRequest      request
    +     * @param id                      The id of the controller service to 
update.
    +     * @param requestRunStatus    A runStatusEntity.
    +     * @return A controllerServiceEntity.
    +     */
    +    @PUT
    +    @Consumes(MediaType.APPLICATION_JSON)
    +    @Produces(MediaType.APPLICATION_JSON)
    +    @Path("{id}/run-status")
    +    @ApiOperation(
    +            value = "Updates run status of a controller service",
    +            response = ControllerServiceEntity.class,
    +            authorizations = {
    +                    @Authorization(value = "Write - 
/controller-services/{uuid} or /operation/controller-services/{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 HttpServletRequest httpServletRequest,
    +            @ApiParam(
    +                    value = "The controller service id.",
    +                    required = true
    +            )
    +            @PathParam("id") final String id,
    +            @ApiParam(
    +                    value = "The controller service run status.",
    +                    required = true
    +            ) final ControllerServiceRunStatusEntity requestRunStatus) {
    +
    +        if (requestRunStatus == null) {
    +            throw new IllegalArgumentException("Controller service 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 DTO to verify if it can be updated.
    +        final ControllerServiceDTO controllerServiceDTO = new 
ControllerServiceDTO();
    +        controllerServiceDTO.setId(id);
    +        controllerServiceDTO.setState(requestRunStatus.getState());
    +        return withWriteLock(
    +                serviceFacade,
    +                requestRunStatus,
    +                requestRevision,
    +                lookup -> {
    +                    // authorize the service
    +                    final Authorizable authorizable = 
lookup.getControllerService(id).getAuthorizable();
    +                    OperationAuthorizable.authorize(authorizable, 
authorizer, RequestAction.WRITE, NiFiUserUtils.getNiFiUser());
    +                },
    +                () -> 
serviceFacade.verifyUpdateControllerService(controllerServiceDTO),
    +                (revision, runStatusEntity) -> {
    +                    // update the controller service
    +                    final ControllerServiceEntity entity = 
serviceFacade.updateControllerService(revision, controllerServiceDTO);
    --- End diff --
    
    To be honest, I don't fully understand how much this is going to be 
critical as the DTO and entity only have the desired state and guid, those are 
not changing during the two phase commit. I think I'm missing some scenario 
here. But I've modified the code to create DTO at each function that is passed 
to the `withWriteLock` method.


> New user role: Operator who can start and stop components
> ---------------------------------------------------------
>
>                 Key: NIFI-375
>                 URL: https://issues.apache.org/jira/browse/NIFI-375
>             Project: Apache NiFi
>          Issue Type: New Feature
>          Components: Core Framework
>            Reporter: Daniel Ueberfluss
>            Assignee: Koji Kawamura
>            Priority: Major
>
> Would like to have a user role that allows a user to stop/start processors 
> but perform no other changes to the dataflow.
> This would allow users to address simple problems without providing full 
> access to modifying a data flow. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to