Simulated a Mongo OperationFailure (equivalent to index creation op error), confirmed the retries also worked as expected, and confirmed the traceback was included (this will generate some extra information, but when this happens, sometimes it can be an actual bug, so the traceback will be needed for reporting a bug):
Web update - Web UI was not updated
2023-09-26 14:28:47,620 - INFO [kytos.core.db] (MainThread) Starting DB connection
2023-09-26 14:28:47,621 - INFO [kytos.core.db] (MainThread) Trying to run 'hello' command on MongoDB...
2023-09-26 14:28:47,631 - INFO [kytos.core.db] (MainThread) Ran 'hello' command on MongoDB successfully. It's ready!
2023-09-26 14:28:47,631 - WARNING [kytos.core.retry] (MainThread) Retry #1 for bootstrap_index, args: (<class 'kytos.core.db.Mongo'>, 'users', [('username', 1)]), kwargs: {'unique': Tru
e}, seconds since start: 0.00
2023-09-26 14:28:48,192 - WARNING [kytos.core.retry] (MainThread) Retry #2 for bootstrap_index, args: (<class 'kytos.core.db.Mongo'>, 'users', [('username', 1)]), kwargs: {'unique': Tru
e}, seconds since start: 0.56
Kytos couldn't start because of some forced OperationFailure Traceback (most recent call last):
File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 260, in start
self.start_auth()
File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 165, in start_auth
self.auth = Auth(self)
File "/home/viniarck/repos/kytos/kytos/core/auth.py", line 202, in __init__
self.user_controller.bootstrap_indexes()
File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 324, in wrapped_f
return self(f, *args, **kw)
File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 404, in __call__
do = self.iter(retry_state=retry_state)
File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 349, in iter
return fut.result()
File "/usr/lib/python3.9/concurrent/futures/_base.py", line 439, in result
return self.__get_result()
File "/usr/lib/python3.9/concurrent/futures/_base.py", line 391, in __get_result
raise self._exception
File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 407, in __call__
result = fn(*args, **kwargs)
File "/home/viniarck/repos/kytos/kytos/core/retry.py", line 25, in decorated
return func(*args, **kwargs)
File "/home/viniarck/repos/kytos/kytos/core/auth.py", line 96, in bootstrap_indexes
if self.mongo.bootstrap_index(collection, keys, **kwargs):
File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 324, in wrapped_f
return self(f, *args, **kw)
File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 404, in __call__
do = self.iter(retry_state=retry_state)
File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 360, in iter
raise retry_exc.reraise()
File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 193, in reraise
raise self.last_attempt.result()
File "/usr/lib/python3.9/concurrent/futures/_base.py", line 439, in result
return self.__get_result()
File "/usr/lib/python3.9/concurrent/futures/_base.py", line 391, in __get_result
raise self._exception
File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 407, in __call__
result = fn(*args, **kwargs)
File "/home/viniarck/repos/kytos/kytos/core/db.py", line 121, in bootstrap_index
raise OperationFailure("some forced OperationFailure")
pymongo.errors.OperationFailure: some forced OperationFailure
Task was destroyed but it is pending!
task: <Task pending name='Task-1' coro=<start_shell_async() running at /home/viniarck/repos/kytos/kytos/core/kytosd.py:120>>
sys:1: RuntimeWarning: coroutine 'start_shell_async' was never awaited
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Simulated a generic error, undefined variable on flow_manager, noticed that the traeback was chained correctly just so you can trace it completely:
Web update - Web UI was not updated
2023-09-26 14:35:31,877 - INFO [kytos.core.db] (MainThread) Starting DB connection
2023-09-26 14:35:31,878 - INFO [kytos.core.db] (MainThread) Trying to run 'hello' command on MongoDB...
2023-09-26 14:35:31,889 - INFO [kytos.core.db] (MainThread) Ran 'hello' command on MongoDB successfully. It's ready!
2023-09-26 14:35:31,901 - INFO [kytos.core.api_server] (MainThread) Started /api/kytos/core/auth/login/ - GET
2023-09-26 14:35:31,901 - INFO [kytos.core.api_server] (MainThread) Started /api/kytos/core/auth/users/ - GET
2023-09-26 14:35:31,901 - INFO [kytos.core.api_server] (MainThread) Started /api/kytos/core/auth/users/{username} - GET
2023-09-26 14:35:31,901 - INFO [kytos.core.api_server] (MainThread) Started /api/kytos/core/auth/users/ - POST
2023-09-26 14:35:31,901 - INFO [kytos.core.api_server] (MainThread) Started /api/kytos/core/auth/users/{username} - DELETE
2023-09-26 14:35:31,901 - INFO [kytos.core.api_server] (MainThread) Started /api/kytos/core/auth/users/{username} - PATCH
2023-09-26 14:35:31,901 - INFO [kytos.core.controller] (MainThread) /home/viniarck/repos/kytos/.direnv/python-3.9/var/run/kytos
2023-09-26 14:35:31,901 - INFO [kytos.core.controller] (MainThread) Starting Kytos - Kytos Controller
2023-09-26 14:35:31,903 - INFO [kytos.core.controller] (MainThread) Starting TCP server: <kytos.core.atcp_server.KytosServer object at 0x7f540d51d490>
2023-09-26 14:35:31,903 - INFO [kytos.core.atcp_server] (MainThread) Kytos listening at 0.0.0.0:6653
2023-09-26 14:35:31,903 - INFO [kytos.core.controller] (MainThread) Loading Kytos NApps...
2023-09-26 14:35:31,905 - INFO [kytos.core.napps.napp_dir_listener] (MainThread) NAppDirListener Started...
2023-09-26 14:35:31,907 - INFO [kytos.core.controller] (MainThread) Loading NApp kytos/flow_manager
Kytos couldn't start because of KytosNAppSetupException: NApp kytos/flow_manager exception name 'undef_var' is not defined Traceback (most recent call last):
File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 863, in load_napp
napp = napp_module.Main(controller=self)
File "/home/viniarck/repos/kytos/kytos/core/napps/base.py", line 194, in __init__
self.setup()
File "/home/viniarck/repos/napps/napps/kytos/flow_manager/main.py", line 90, in setup
undef_var
NameError: name 'undef_var' is not defined
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 265, in start
self.start_controller()
File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 359, in start_controller
self.load_napps()
File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 898, in load_napps
self.load_napp(napp.username, napp.name)
File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 866, in load_napp
raise KytosNAppSetupException(msg) from exc
kytos.core.exceptions.KytosNAppSetupException: KytosNAppSetupException: NApp kytos/flow_manager exception name 'undef_var' is not defined
Task was destroyed but it is pending!
task: <Task pending name='Task-1' coro=<start_shell_async() running at /home/viniarck/repos/kytos/kytos/core/kytosd.py:120>>
2023-09-26 14:35:32,041 - ERROR [kytos.core.controller] (MainThread) 1
2023-09-26 14:35:32,041 - INFO [kytos.core.controller] (MainThread) Shutting down Kytos...
/home/viniarck/repos/kytos/kytos/core/kytosd.py:98: RuntimeWarning: coroutine 'start_shell_async' was never awaited
async_main(config)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
End-to-End Tests
I'll dispatch an exec on GitLab, I'll post the results here later:
Closes #413 (check out the last comments there for more information) Partly addresses https://github.com/kytos-ng/kytos/issues/314
Summary
See updated changelog file
Local Tests
OperationFailure
(equivalent to index creation op error), confirmed the retries also worked as expected, and confirmed the traceback was included (this will generate some extra information, but when this happens, sometimes it can be an actual bug, so the traceback will be needed for reporting a bug):flow_manager
, noticed that the traeback was chained correctly just so you can trace it completely:End-to-End Tests
I'll dispatch an exec on GitLab, I'll post the results here later: