Github user mcgilman commented on a diff in the pull request:
https://github.com/apache/nifi/pull/461#discussion_r64250889
--- Diff:
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
---
@@ -568,164 +699,50 @@ public void verifyDeleteReportingTask(String
reportingTaskId) {
@Override
- public void verifyUpdateSnippet(SnippetDTO snippetDto) {
+ public void verifyUpdateSnippet(SnippetDTO snippetDto, final
Set<String> affectedComponentIds) {
try {
// if snippet does not exist, then the update request is
likely creating it
// so we don't verify since it will fail
if (snippetDAO.hasSnippet(snippetDto.getId())) {
snippetDAO.verifyUpdate(snippetDto);
}
} catch (final Exception e) {
- revisionManager.cancelClaim(snippetDto.getId());
+ affectedComponentIds.forEach(id ->
revisionManager.cancelClaim(snippetDto.getId()));
throw e;
}
}
- private Set<Revision> getRevisionsForGroup(final String groupId) {
- final Set<Revision> revisions = new HashSet<>();
-
- revisions.add(revisionManager.getRevision(groupId));
- final ProcessGroup processGroup =
processGroupDAO.getProcessGroup(groupId);
- if (processGroup == null) {
- throw new IllegalArgumentException("Snippet contains a
reference to Process Group with ID " + groupId + " but no Process Group exists
with that ID");
- }
-
- processGroup.getConnections().stream().map(c ->
c.getIdentifier()).map(id -> revisionManager.getRevision(id)).forEach(rev ->
revisions.add(rev));
- processGroup.getFunnels().stream().map(c ->
c.getIdentifier()).map(id -> revisionManager.getRevision(id)).forEach(rev ->
revisions.add(rev));
- processGroup.getInputPorts().stream().map(c ->
c.getIdentifier()).map(id -> revisionManager.getRevision(id)).forEach(rev ->
revisions.add(rev));
- processGroup.getOutputPorts().stream().map(c ->
c.getIdentifier()).map(id -> revisionManager.getRevision(id)).forEach(rev ->
revisions.add(rev));
- processGroup.getLabels().stream().map(c ->
c.getIdentifier()).map(id -> revisionManager.getRevision(id)).forEach(rev ->
revisions.add(rev));
- processGroup.getProcessors().stream().map(c ->
c.getIdentifier()).map(id -> revisionManager.getRevision(id)).forEach(rev ->
revisions.add(rev));
- processGroup.getRemoteProcessGroups().stream().map(c ->
c.getIdentifier()).map(id -> revisionManager.getRevision(id)).forEach(rev ->
revisions.add(rev));
- processGroup.getProcessGroups().stream().map(c ->
c.getIdentifier()).forEach(id -> revisions.addAll(getRevisionsForGroup(id)));
-
- return revisions;
- }
-
- private Set<Revision> getRevisionsForSnippet(final SnippetDTO
snippetDto) {
- final Set<Revision> requiredRevisions = new HashSet<>();
-
requiredRevisions.add(revisionManager.getRevision(snippetDto.getId()));
- snippetDto.getConnections().entrySet().stream()
- .map(entry -> new Revision(entry.getValue().getVersion(),
entry.getValue().getClientId(), entry.getKey()))
- .forEach(rev -> requiredRevisions.add(rev));
-
- snippetDto.getFunnels().entrySet().stream()
- .map(entry -> new Revision(entry.getValue().getVersion(),
entry.getValue().getClientId(), entry.getKey()))
- .forEach(rev -> requiredRevisions.add(rev));
-
- snippetDto.getInputPorts().entrySet().stream()
- .map(entry -> new Revision(entry.getValue().getVersion(),
entry.getValue().getClientId(), entry.getKey()))
- .forEach(rev -> requiredRevisions.add(rev));
-
- snippetDto.getOutputPorts().entrySet().stream()
- .map(entry -> new Revision(entry.getValue().getVersion(),
entry.getValue().getClientId(), entry.getKey()))
- .forEach(rev -> requiredRevisions.add(rev));
-
- snippetDto.getLabels().entrySet().stream()
- .map(entry -> new Revision(entry.getValue().getVersion(),
entry.getValue().getClientId(), entry.getKey()))
- .forEach(rev -> requiredRevisions.add(rev));
-
- snippetDto.getProcessors().entrySet().stream()
- .map(entry -> new Revision(entry.getValue().getVersion(),
entry.getValue().getClientId(), entry.getKey()))
- .forEach(rev -> requiredRevisions.add(rev));
-
- snippetDto.getRemoteProcessGroups().entrySet().stream()
- .map(entry -> new Revision(entry.getValue().getVersion(),
entry.getValue().getClientId(), entry.getKey()))
- .forEach(rev -> requiredRevisions.add(rev));
-
- for (final String groupId :
snippetDto.getProcessGroups().keySet()) {
- requiredRevisions.addAll(getRevisionsForGroup(groupId));
- }
-
- return requiredRevisions;
- }
-
- private ProcessGroup getGroup(final String groupId) {
- return revisionManager.get(groupId, rev ->
processGroupDAO.getProcessGroup(groupId));
- }
-
@Override
- public UpdateResult<SnippetEntity> updateSnippet(final Revision
revision, final SnippetDTO snippetDto) {
- // if label does not exist, then create new label
- if (snippetDAO.hasSnippet(snippetDto.getId()) == false) {
- return new UpdateResult<>(createSnippet(snippetDto), true);
- }
-
- final Set<Revision> requiredRevisions =
getRevisionsForSnippet(snippetDto);
-
- // if the parent group is specified in the request, ensure write
access to it as it could be moving the components in the snippet
- final String requestProcessGroupIdentifier =
snippetDto.getParentGroupId();
- if (requestProcessGroupIdentifier != null) {
- final ProcessGroup requestProcessGroup =
processGroupDAO.getProcessGroup(requestProcessGroupIdentifier);
- requestProcessGroup.authorize(authorizer, RequestAction.WRITE);
- }
-
+ public SnippetEntity updateSnippet(final Set<Revision> revisions,
final SnippetDTO snippetDto) {
--- End diff --
Will do!
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---