Uploaded image for project: 'Apache NiFi'
  1. Apache NiFi
  2. NIFI-9839

NiFi fails to startup/join cluster if dataflow consists solely of Controller Services and Reporting Tasks

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.16.0
    • 1.16.1
    • Core Framework
    • None

    Description

      To replicate:

      1. Start a cluster
      2. Add one or more controller services to the Root Process Group. Do not add any processors, labels, funnels, ports, etc.
      3. Restart cluster

      This will result in a stack trace along the lines of:

      2022-03-28 11:24:28,230 ERROR org.apache.nifi.web.server.JettyServer: Unable to load flow due to: java.io.IOException: org.apache.nifi.controller.serialization.FlowSynchronizationException: Failed to connect node to cluster because local flow controller partially updated. Administrator should disconnect node and review flow for corruption.
      java.io.IOException: org.apache.nifi.controller.serialization.FlowSynchronizationException: Failed to connect node to cluster because local flow controller partially updated. Administrator should disconnect node and review flow for corruption.
      	at org.apache.nifi.controller.StandardFlowService.load(StandardFlowService.java:524)
      	at org.apache.nifi.web.server.JettyServer.start(JettyServer.java:1086)
      	at org.apache.nifi.NiFi.<init>(NiFi.java:170)
      	at org.apache.nifi.NiFi.<init>(NiFi.java:82)
      	at org.apache.nifi.NiFi.main(NiFi.java:330)
      Caused by: org.apache.nifi.controller.serialization.FlowSynchronizationException: Failed to connect node to cluster because local flow controller partially updated. Administrator should disconnect node and review flow for corruption.
      	at org.apache.nifi.controller.StandardFlowService.loadFromConnectionResponse(StandardFlowService.java:1057)
      	at org.apache.nifi.controller.StandardFlowService.load(StandardFlowService.java:520)
      	... 4 common frames omitted
      Caused by: org.apache.nifi.controller.serialization.FlowSynchronizationException: java.lang.IllegalStateException: The specified observer identifier (bulletin-observer) already exists.
      	at org.apache.nifi.controller.serialization.VersionedFlowSynchronizer.synchronizeFlow(VersionedFlowSynchronizer.java:362)
      	at org.apache.nifi.controller.serialization.VersionedFlowSynchronizer.sync(VersionedFlowSynchronizer.java:185)
      	at org.apache.nifi.controller.serialization.StandardFlowSynchronizer.sync(StandardFlowSynchronizer.java:43)
      	at org.apache.nifi.controller.FlowController.synchronize(FlowController.java:1479)
      	at org.apache.nifi.persistence.StandardFlowConfigurationDAO.load(StandardFlowConfigurationDAO.java:104)
      	at org.apache.nifi.controller.StandardFlowService.loadFromBytes(StandardFlowService.java:815)
      	at org.apache.nifi.controller.StandardFlowService.loadFromConnectionResponse(StandardFlowService.java:1026)
      	... 5 common frames omitted
      Caused by: java.lang.IllegalStateException: The specified observer identifier (bulletin-observer) already exists.
      	at org.apache.nifi.logging.repository.StandardLogRepository.addObserver(StandardLogRepository.java:169)
      	at org.apache.nifi.controller.flow.StandardFlowManager.createControllerService(StandardFlowManager.java:490)
      	at org.apache.nifi.groups.StandardProcessGroupSynchronizer.addControllerService(StandardProcessGroupSynchronizer.java:1033)
      	at org.apache.nifi.groups.StandardProcessGroupSynchronizer.synchronizeControllerServices(StandardProcessGroupSynchronizer.java:457)
      	at org.apache.nifi.groups.StandardProcessGroupSynchronizer.synchronize(StandardProcessGroupSynchronizer.java:339)
      	at org.apache.nifi.groups.StandardProcessGroupSynchronizer.lambda$synchronize$0(StandardProcessGroupSynchronizer.java:221)
      	at org.apache.nifi.controller.flow.AbstractFlowManager.withParameterContextResolution(AbstractFlowManager.java:462)
      	at org.apache.nifi.groups.StandardProcessGroupSynchronizer.synchronize(StandardProcessGroupSynchronizer.java:219)
      	at org.apache.nifi.groups.StandardProcessGroup.synchronizeFlow(StandardProcessGroup.java:3830)
      	at org.apache.nifi.controller.serialization.VersionedFlowSynchronizer.synchronizeFlow(VersionedFlowSynchronizer.java:353)
      	... 11 common frames omitted 

      However, if any other components are added to the root group, such as a process or a child process group, this won't happen.

      Attachments

        Issue Links

          Activity

            People

              markap14 Mark Payne
              markap14 Mark Payne
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 20m
                  20m