Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timed Out waiting for nipyapi _schedule_controller_state to complete #371

Open
Kingdom-Of-Heaven opened this issue Oct 15, 2024 · 5 comments

Comments

@Kingdom-Of-Heaven
Copy link

I just updated NIFI from version 1.11.4 to 1.16.3. I got one issue. Once my nifi's registry flow is taken and shown on workspace and when it comes to start installation of componenets i got error on that line below. Note that all is working on older nifi version. What might be the issue?

self.__nipyapi.canvas.schedule_controller(i, False)

Error:

Traceback (most recent call last):
  File "deploy01.py", line 134, in <module>
    main_handler.start_controllers()
  File "/code/nifi.py", line 1441, in start_controllers
    self.__start_controller_safe()
  File "/code/nifi.py", line 710, in __start_controller_safe
    self.__nipyapi.canvas.schedule_controller(i, True)
  File "/usr/local/lib/python3.8/site-packages/nipyapi/canvas.py", line 1249, in schedule_controller
    state_test = nipyapi.utils.wait_to_complete(
  File "/usr/local/lib/python3.8/site-packages/nipyapi/utils.py", line 243, in wait_to_complete
    raise ValueError("Timed Out waiting for {0} to complete".format(
ValueError: Timed Out waiting for _schedule_controller_state to complete
make: *** [Makefile:193: nifi-flow-deployment] Error 1

Code:

def __start_controller_safely(self) -> bool:
    for i in (
            self.__nipyapi.nifi.FlowApi()
        .get_controller_services_from_group(self.deployed_flow_id)
        .controller_services
    ):

        _ctrl_id = i.id
        print(i.component.name)
        if i.status.run_status == "DISABLED":
            print("Controller status is disabled... trying to start")
            self.__nipyapi.canvas.schedule_controller(i, True)
            while (
                    self.__nipyapi.canvas.get_controller(
                        _ctrl_id, identifier_type="id"
                    ).status.run_status
                    != "ENABLED"
            ):
                if (
                        self.__nipyapi.canvas.get_controller(
                            _ctrl_id, identifier_type="id"
                        ).status.run_status
                        != "ENABLED"
                ):
                    print("Controller status is enabled")
                    break
                else:
                    print("Waiting controller to start")
                    time.sleep(1)
        else:
            print("Controller already started")

    self.are_controllers_started: bool = True
    return True
@Chaffelson
Copy link
Owner

Hmm, there's a known variation when upgrading > NiFi 1.2.0, but I'm not aware of one for 1.11 to 1.16.

It calls nipyapi.nifi.ControllerServicesApi().get_controller_service(id) and checks if component.state is 'ENABLED'.
It will timeout if that particular object parameter never changes to ENABLED, so perhaps if you run the command and check what is being returned in the object and share that we can find a discrepancy.

@Kingdom-Of-Heaven
Copy link
Author

@Chaffelson Can u help me out? U mean to do something like this?:

..
print("Controller status is disabled... trying to start")
obj = self.__nipyapi.canvas.schedule_controller(i, True)         # <---------------- ?
print(obj) # <--------------- ?
while ( ...

@Kingdom-Of-Heaven
Copy link
Author

@Chaffelson ?

@Chaffelson
Copy link
Owner

Chaffelson commented Oct 21, 2024

I would call the schedule_controller operation, and then run a loop fetching the component and printing it every second, specifically looking at the component.state.
The state should be a string, and it should transition to 'ENABLED' or you should get an error message.

Or you could modify NiPy here to log the controller state during the wait loop to see what it is getting back.

@Kingdom-Of-Heaven
Copy link
Author

@Chaffelson if u look at my code posted i already have while loop. If that's not what u wrote. Can u help me out to add additional code to my posted code the way u mentioned? Would appreciate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants