augur icon indicating copy to clipboard operation
augur copied to clipboard

celery task failure handling still looks up repositories by their git url

Open MoralCode opened this issue 1 month ago • 3 comments

Even though looking up repositories by their repo_git is no longer really the main way to do it (because the git url can change), the error handling process for celery tasks still does this:

https://github.com/chaoss/augur/blob/3a97f18b250b0f3ff6f5938b603be14f02c36bd8/augur/tasks/init/celery_app.py#L90

Logs
[augur]        | 2025-11-18 23:04:30 cd3ac88591d1 augur_collection_monitor[276] INFO Setting github repo core status to collecting for repo: https://github.com/moralcode/classclockapi
[augur]        | [2025-11-18 23:04:30,464: INFO/MainProcess] Task augur.tasks.github.detect_move.tasks.detect_github_repo_move_core[38307c62-7947-495d-ac2f-35d8bd2bb241] received
[augur]        | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] INFO Starting repo_move operation with https://github.com/moralcode/classclockapi
[augur]        | 2025-11-18 23:04:30 cd3ac88591d1 augur_collection_monitor[276] INFO Starting collection on 0 secondary repos
[augur]        | 2025-11-18 23:04:30 cd3ac88591d1 augur_collection_monitor[276] INFO Starting collection on 0 facade repos
[augur]        | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] INFO Pinging repo: https://github.com/moralcode/classclockapi
[augur]        | [2025-11-18 23:04:30,474: INFO/ForkPoolWorker-2] Task augur.tasks.start_tasks.augur_collection_monitor[bb2d2553-8919-4da8-ac60-e628d826b9c3] succeeded in 0.09832821798045188s: None
[augur]        | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] INFO Retrieved 1 github api keys for use
[augur]        | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] DEBUG Key used for request (masked): ghp_EA******kQm
[augur]        | 2025-11-18 23:04:30 cd3ac88591d1 analyze_commits_in_parallel[281] DEBUG Analyzing commit 1f9454ebee957364e9073378ad2562b37f9c0394 for repo_id=1
[augur]        | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] DEBUG Key used for request (masked): ghp_EA******kQm
[augur]        | 2025-11-18 23:04:30 cd3ac88591d1 detect_github_repo_move_core[280] INFO Updated repo for https://github.com/classclock/API
[augur]        | 
[augur]        | [2025-11-18 23:04:30,942: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30 cd3ac88591d1 core_task_failure[280] ERROR Task 38307c62-7947-495d-ac2f-35d8bd2bb241 raised exception: ERROR: Repo has moved! Resetting Collection!
[augur]        |  Traceback: Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 453, in trace_task
[augur]        |     R = retval = fun(*args, **kwargs)
[augur]        |                  ^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 736, in __protected_call__
[augur]        |     return self.run(*args, **kwargs)
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/augur/tasks/github/detect_move/tasks.py", line 27, in detect_github_repo_move_core
[augur]        |     ping_github_for_repo_move(session, key_auth, repo, logger)
[augur]        |   File "/augur/augur/tasks/github/detect_move/core.py", line 89, in ping_github_for_repo_move
[augur]        |     raise Exception("ERROR: Repo has moved! Resetting Collection!")
[augur]        | Exception: ERROR: Repo has moved! Resetting Collection!
[augur]        | [2025-11-18 23:04:30,943: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30 cd3ac88591d1 core_task_failure[280] INFO Repo git: https://github.com/moralcode/classclockapi
[augur]        | [2025-11-18 23:04:30,955: WARNING/ForkPoolWorker-2] /augur/.venv/lib/python3.11/site-packages/celery/app/trace.py:662: RuntimeWarning: Exception raised outside body: NoResultFound('No row was found when one was required'):
[augur]        | Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 453, in trace_task
[augur]        |     R = retval = fun(*args, **kwargs)
[augur]        |                  ^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 736, in __protected_call__
[augur]        |     return self.run(*args, **kwargs)
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/augur/tasks/github/detect_move/tasks.py", line 27, in detect_github_repo_move_core
[augur]        |     ping_github_for_repo_move(session, key_auth, repo, logger)
[augur]        |   File "/augur/augur/tasks/github/detect_move/core.py", line 89, in ping_github_for_repo_move
[augur]        |     raise Exception("ERROR: Repo has moved! Resetting Collection!")
[augur]        | Exception: ERROR: Repo has moved! Resetting Collection!
[augur]        | 
[augur]        | During handling of the above exception, another exception occurred:
[augur]        | 
[augur]        | Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 470, in trace_task
[augur]        |     I, R, state, retval = on_error(task_request, exc)
[augur]        |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur]        |     R = I.handle_error_state(
[augur]        |         ^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur]        |     return {
[augur]        |            ^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur]        |     task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur]        |     self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur]        |     repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur]        |     return self._iter().one()  # type: ignore
[augur]        |            ^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur]        |     return self._only_one_row(
[augur]        |            ^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur]        |     raise exc.NoResultFound(
[augur]        | sqlalchemy.exc.NoResultFound: No row was found when one was required
[augur]        | 
[augur]        |   warn(RuntimeWarning(
[augur]        | 
[augur]        | [2025-11-18 23:04:30,983: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30,983,983ms [PID: 280] core_task_failure [ERROR] Task 38307c62-7947-495d-ac2f-35d8bd2bb241 raised exception: No row was found when one was required
[augur]        |  Traceback: Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 453, in trace_task
[augur]        |     R = retval = fun(*args, **kwargs)
[augur]        |                  ^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 736, in __protected_call__
[augur]        |     return self.run(*args, **kwargs)
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/augur/tasks/github/detect_move/tasks.py", line 27, in detect_github_repo_move_core
[augur]        |     ping_github_for_repo_move(session, key_auth, repo, logger)
[augur]        |   File "/augur/augur/tasks/github/detect_move/core.py", line 89, in ping_github_for_repo_move
[augur]        |     raise Exception("ERROR: Repo has moved! Resetting Collection!")
[augur]        | Exception: ERROR: Repo has moved! Resetting Collection!
[augur]        | 
[augur]        | During handling of the above exception, another exception occurred:
[augur]        | 
[augur]        | Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 470, in trace_task
[augur]        |     I, R, state, retval = on_error(task_request, exc)
[augur]        |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur]        |     R = I.handle_error_state(
[augur]        |         ^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur]        |     return {
[augur]        |            ^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur]        |     task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur]        |     self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur]        |     repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur]        |     return self._iter().one()  # type: ignore
[augur]        |            ^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur]        |     return self._only_one_row(
[augur]        |            ^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur]        |     raise exc.NoResultFound(
[augur]        | sqlalchemy.exc.NoResultFound: No row was found when one was required
[augur]        | [2025-11-18 23:04:30,983: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30 cd3ac88591d1 core_task_failure[280] ERROR Task 38307c62-7947-495d-ac2f-35d8bd2bb241 raised exception: No row was found when one was required
[augur]        |  Traceback: Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 453, in trace_task
[augur]        |     R = retval = fun(*args, **kwargs)
[augur]        |                  ^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 736, in __protected_call__
[augur]        |     return self.run(*args, **kwargs)
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/augur/tasks/github/detect_move/tasks.py", line 27, in detect_github_repo_move_core
[augur]        |     ping_github_for_repo_move(session, key_auth, repo, logger)
[augur]        |   File "/augur/augur/tasks/github/detect_move/core.py", line 89, in ping_github_for_repo_move
[augur]        |     raise Exception("ERROR: Repo has moved! Resetting Collection!")
[augur]        | Exception: ERROR: Repo has moved! Resetting Collection!
[augur]        | 
[augur]        | During handling of the above exception, another exception occurred:
[augur]        | 
[augur]        | Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 470, in trace_task
[augur]        |     I, R, state, retval = on_error(task_request, exc)
[augur]        |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur]        |     R = I.handle_error_state(
[augur]        |         ^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur]        |     return {
[augur]        |            ^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur]        |     task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur]        |     self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur]        |     repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur]        |     return self._iter().one()  # type: ignore
[augur]        |            ^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur]        |     return self._only_one_row(
[augur]        |            ^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur]        |     raise exc.NoResultFound(
[augur]        | sqlalchemy.exc.NoResultFound: No row was found when one was required
[augur]        | [2025-11-18 23:04:30,983: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30,983,983ms [PID: 280] core_task_failure [INFO] Repo git: https://github.com/moralcode/classclockapi
[augur]        | [2025-11-18 23:04:30,983: WARNING/ForkPoolWorker-2] 2025-11-18 23:04:30 cd3ac88591d1 core_task_failure[280] INFO Repo git: https://github.com/moralcode/classclockapi
[augur]        | [2025-11-18 23:04:30,999: ERROR/MainProcess] Task handler raised error: NoResultFound('No row was found when one was required')
[augur]        | billiard.einfo.RemoteTraceback: 
[augur]        | """
[augur]        | Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 453, in trace_task
[augur]        |     R = retval = fun(*args, **kwargs)
[augur]        |                  ^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 736, in __protected_call__
[augur]        |     return self.run(*args, **kwargs)
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/augur/tasks/github/detect_move/tasks.py", line 27, in detect_github_repo_move_core
[augur]        |     ping_github_for_repo_move(session, key_auth, repo, logger)
[augur]        |   File "/augur/augur/tasks/github/detect_move/core.py", line 89, in ping_github_for_repo_move
[augur]        |     raise Exception("ERROR: Repo has moved! Resetting Collection!")
[augur]        | Exception: ERROR: Repo has moved! Resetting Collection!
[augur]        | 
[augur]        | During handling of the above exception, another exception occurred:
[augur]        | 
[augur]        | Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 470, in trace_task
[augur]        |     I, R, state, retval = on_error(task_request, exc)
[augur]        |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur]        |     R = I.handle_error_state(
[augur]        |         ^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur]        |     return {
[augur]        |            ^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur]        |     task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur]        |     self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur]        |     repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur]        |     return self._iter().one()  # type: ignore
[augur]        |            ^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur]        |     return self._only_one_row(
[augur]        |            ^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur]        |     raise exc.NoResultFound(
[augur]        | sqlalchemy.exc.NoResultFound: No row was found when one was required
[augur]        | 
[augur]        | During handling of the above exception, another exception occurred:
[augur]        | 
[augur]        | Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/billiard/pool.py", line 362, in workloop
[augur]        |     result = (True, prepare_result(fun(*args, **kwargs)))
[augur]        |                                    ^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 651, in fast_trace_task
[augur]        |     R, I, T, Rstr = tasks[task].__trace__(
[augur]        |                     ^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 574, in trace_task
[augur]        |     I, _, _, _ = on_error(task_request, exc)
[augur]        |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur]        |     R = I.handle_error_state(
[augur]        |         ^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur]        |     return {
[augur]        |            ^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur]        |     task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur]        |     self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur]        |     repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur]        |     return self._iter().one()  # type: ignore
[augur]        |            ^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur]        |     return self._only_one_row(
[augur]        |            ^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur]        |     raise exc.NoResultFound(
[augur]        | sqlalchemy.exc.NoResultFound: No row was found when one was required
[augur]        | """
[augur]        | 
[augur]        | The above exception was the direct cause of the following exception:
[augur]        | 
[augur]        | Traceback (most recent call last):
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/billiard/pool.py", line 362, in workloop
[augur]        |     result = (True, prepare_result(fun(*args, **kwargs)))
[augur]        |                                    ^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 651, in fast_trace_task
[augur]        |     R, I, T, Rstr = tasks[task].__trace__(
[augur]        |                     ^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 574, in trace_task
[augur]        |     I, _, _, _ = on_error(task_request, exc)
[augur]        |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 381, in on_error
[augur]        |     R = I.handle_error_state(
[augur]        |         ^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 175, in handle_error_state
[augur]        |     return {
[augur]        |            ^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/celery/app/trace.py", line 233, in handle_failure
[augur]        |     task.on_failure(exc, req.id, req.args, req.kwargs, einfo)
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 107, in on_failure
[augur]        |     self.augur_handle_task_failure(exc, task_id, repo_git, "core_task_failure")
[augur]        |   File "/augur/augur/tasks/init/celery_app.py", line 90, in augur_handle_task_failure
[augur]        |     repo = session.query(Repo).filter(Repo.repo_git == repo_git).one()
[augur]        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/orm/query.py", line 2798, in one
[augur]        |     return self._iter().one()  # type: ignore
[augur]        |            ^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1827, in one
[augur]        |     return self._only_one_row(
[augur]        |            ^^^^^^^^^^^^^^^^^^^
[augur]        |   File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 760, in _only_one_row
[augur]        |     raise exc.NoResultFound(
[augur]        | sqlalchemy.exc.NoResultFound: No row was found when one was required
``
</details>

_Originally posted by @MoralCode in https://github.com/chaoss/augur/issues/3391#issuecomment-3552943675_
            

MoralCode avatar Nov 19 '25 18:11 MoralCode

Hi @MoralCode, I'm Santosh, I’ve been looking into issue #3421 and analyzing the logs.

Here’s my understanding — when a repo is renamed/moved, Augur updates the repo_git in the DB correctly, but Celery tasks still use the old repo_git they were scheduled with. Then the failure handler tries:

session.query(Repo).filter(Repo.repo_git == repo_git).one()

This fails because the DB now stores the new URL, so the failure handler crashes as well. This leaves the repo stuck in “collecting” and produces repeated error logs.

Before I open a PR, I want to confirm a couple of things:

Is it okay to modify the failure handler to use repo_id instead of repo_git so it can always find the correct repo row? (repo_id never changes even when repo_git changes)

Some tasks already use repo_id, but others still use repo_git. Should the long-term direction be to update more tasks to rely on repo_id for DB lookups?

If this aligns with the intended architecture, I can start with a small PR fixing the failure handler, and then follow up with a second PR improving the normal task logic.

Thanks! Looking forward to your guidance.

Santosh69 avatar Nov 20 '25 19:11 Santosh69

I mostly filed this issue as a way to document that this assumption of using the repo_git exists in the code. Once #3166 is resolved, this error likely wont be triggered anymore because the task that causes the initial exception wont throw exceptions in common cases anymore.

While I'd like to change this to use the repo id or something, thats going to require a more complete audit and/or update of the data attached to each task to ensure that we can change this and not break existing tasks. This is a much larger task that affects core parts of the collection process, so I wouldn't want to put that amount of work/effort on someone who is new to the repo, even with AI tools to help understand the codebase - theres just too few points at which the necessary review and testing/consideration of the change can be done before the PR is submitted to maintainers.

MoralCode avatar Nov 20 '25 19:11 MoralCode

Thanks for the clarification @MoralCode , I agree , switching everything over to repo_id or something would require a larger architectural update across many tasks, and I understand it’s not something to rush into without a full audit/diagnose .

I’ll wait for #3166 to land, and in the meantime I’d be happy to pick up a smaller or more isolated issue(if there are any) to get familiar with the codebase safely. If you have any recommendations for issues, I’d like to take them on.

Santosh69 avatar Nov 22 '25 05:11 Santosh69