[ 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)