Bug #73760
Erreur récurrente sur les tests/build paserelle la relation « filr_rest_filr » n'existe pas
0%
Description
Je l'ai eu ici et là :
https://jenkins.entrouvert.org/job/gitea-wip/job/passerelle/job/PR-51/
https://jenkins.entrouvert.org/job/gitea-wip/job/passerelle/job/PR-52/
Sur le second ticket, c'est passé juste en relançant jenkins au bout de la troisième fois.
Sur le premier c'est passé aussi au bout de la troisième fois, mais suite à un commit.
Cependant, je ne l'ai pas eu ici :
https://jenkins.entrouvert.org/job/gitea-wip/job/passerelle/job/PR-53/
Je la reproduis en locale, mais uniquement si je tourne le tests complets :
$ tox -e py3-django22-xmlschema10 self = <django.db.backends.utils.CursorWrapper object at 0x7fe2a3ce52b0> sql = 'SELECT "filr_rest_filr"."id", "filr_rest_filr"."title", "filr_rest_filr"."slug", "filr_rest_filr"."description", "fil...ies", "filr_rest_filr"."verify_cert", "filr_rest_filr"."http_proxy", "filr_rest_filr"."base_url" FROM "filr_rest_filr"' params = () ignored_wrapper_args = (False, {'connection': <django.db.backends.postgresql.base.DatabaseWrapper object at 0x7fe2e18b8400>, 'cursor': <django.db.backends.utils.CursorWrapper object at 0x7fe2a3ce52b0>}) def _execute(self, sql, params, *ignored_wrapper_args): self.db.validate_no_broken_transaction() with self.db.wrap_database_errors: if params is None: return self.cursor.execute(sql) else: > return self.cursor.execute(sql, params) E psycopg2.errors.UndefinedTable: ERREUR: la relation « filr_rest_filr » n'existe pas E LINE 1: ...r"."http_proxy", "filr_rest_filr"."base_url" FROM "filr_rest... E ^ /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/db/backends/utils.py:84: UndefinedTable The above exception was the direct cause of the following exception: self = <tests.ldap.test_manager.TestImportExport object at 0x7fe2d8aefbb0>, app = <django_webtest.DjangoTestApp object at 0x7fe2a31b6160>, resource_class = <class 'passerelle.apps.ldap.models.Resource'> resource_params = {'description': 'resource', 'ldap_tls_cert': <ContentFile: Raw content>, 'ldap_tls_key': <ContentFile: Raw content>, 'ldap_url': 'ldap://localhost.entrouvert.org:52271', ...} def test_import(self, app, resource_class, resource_params): assert not resource_class.objects.count() > response = app.get('/manage/') tests/ldap/test_manager.py:151: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django_webtest/__init__.py:124: in get response = super(DjangoTestApp, self).get(url, **kwargs) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/webtest/app.py:324: in get return self.do_request(req, status=status, /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django_webtest/__init__.py:86: in do_request response = super(DjangoTestApp, self).do_request(req, status, /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/webtest/app.py:620: in do_request res = req.get_response(app, catch_exc_info=True) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/webob/request.py:1309: in send status, headers, app_iter, exc_info = self.call_application( /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/webob/request.py:1278: in call_application app_iter = application(self.environ, start_response) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/webtest/lint.py:196: in lint_app iterator = application(environ, start_response_wrapper) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/contrib/staticfiles/handlers.py:65: in __call__ return self.application(environ, start_response) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/wsgi.py:141: in __call__ response = self.get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/base.py:75: in get_response response = self._middleware_chain(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:36: in inner response = response_for_exception(request, exc) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:90: in response_for_exception response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:34: in inner response = get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/utils/deprecation.py:94: in __call__ response = response or self.get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:36: in inner response = response_for_exception(request, exc) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:90: in response_for_exception response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:34: in inner response = get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/utils/deprecation.py:94: in __call__ response = response or self.get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:36: in inner response = response_for_exception(request, exc) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:90: in response_for_exception response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:34: in inner response = get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/utils/deprecation.py:94: in __call__ response = response or self.get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:36: in inner response = response_for_exception(request, exc) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:90: in response_for_exception response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:34: in inner response = get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/utils/deprecation.py:94: in __call__ response = response or self.get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:36: in inner response = response_for_exception(request, exc) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:90: in response_for_exception response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:34: in inner response = get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/utils/deprecation.py:94: in __call__ response = response or self.get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:36: in inner response = response_for_exception(request, exc) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:90: in response_for_exception response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:34: in inner response = get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/utils/deprecation.py:94: in __call__ response = response or self.get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:36: in inner response = response_for_exception(request, exc) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:90: in response_for_exception response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:34: in inner response = get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/utils/deprecation.py:94: in __call__ response = response or self.get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:36: in inner response = response_for_exception(request, exc) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:90: in response_for_exception response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:34: in inner response = get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/utils/deprecation.py:94: in __call__ response = response or self.get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:36: in inner response = response_for_exception(request, exc) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:90: in response_for_exception response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/exception.py:34: in inner response = get_response(request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/base.py:115: in _get_response response = self.process_exception_by_middleware(e, request) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/core/handlers/base.py:113: in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/contrib/auth/decorators.py:21: in _wrapped_view return view_func(request, *args, **kwargs) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/views/generic/base.py:71: in view return self.dispatch(request, *args, **kwargs) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/views/generic/base.py:97: in dispatch return handler(request, *args, **kwargs) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/views/generic/base.py:158: in get context = self.get_context_data(**kwargs) passerelle/views.py:136: in get_context_data context['apps'].extend(app.objects.all()) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/db/models/query.py:274: in __iter__ self._fetch_all() /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/db/models/query.py:1242: in _fetch_all self._result_cache = list(self._iterable_class(self)) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/model_utils/managers.py:38: in __iter__ yield from iter /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/db/models/query.py:55: in __iter__ results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/db/models/sql/compiler.py:1142: in execute_sql cursor.execute(sql, params) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/db/backends/utils.py:67: in execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/db/backends/utils.py:76: in _execute_with_wrappers return executor(sql, params, many, context) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/db/backends/utils.py:84: in _execute return self.cursor.execute(sql, params) /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/db/utils.py:89: in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <django.db.backends.utils.CursorWrapper object at 0x7fe2a3ce52b0> sql = 'SELECT "filr_rest_filr"."id", "filr_rest_filr"."title", "filr_rest_filr"."slug", "filr_rest_filr"."description", "fil...ies", "filr_rest_filr"."verify_cert", "filr_rest_filr"."http_proxy", "filr_rest_filr"."base_url" FROM "filr_rest_filr"' params = () ignored_wrapper_args = (False, {'connection': <django.db.backends.postgresql.base.DatabaseWrapper object at 0x7fe2e18b8400>, 'cursor': <django.db.backends.utils.CursorWrapper object at 0x7fe2a3ce52b0>}) def _execute(self, sql, params, *ignored_wrapper_args): self.db.validate_no_broken_transaction() with self.db.wrap_database_errors: if params is None: return self.cursor.execute(sql) else: > return self.cursor.execute(sql, params) E django.db.utils.ProgrammingError: ERREUR: la relation « filr_rest_filr » n'existe pas E LINE 1: ...r"."http_proxy", "filr_rest_filr"."base_url" FROM "filr_rest... E ^ ============================================================================================= /tmp/tox-nroche/passerelle/py3-django22-xmlschema10/lib/python3.9/site-packages/django/db/backends/utils.py:84: ProgrammingError
FAILED tests/ldap/test_manager.py::TestImportExport::test_import - django.db.utils.ProgrammingError: ERREUR: la relation « filr_rest_filr » n'existe pas
Révisions associées
tests: remove test declared xfail (#73760)
Historique
Mis à jour par Emmanuel Cazenave il y a environ un an
J'y comprends alors j'ai fait une fausse application bidon, et ça plante sur celle-ci maintenant (https://jenkins.entrouvert.org/job/passerelle-wip/job/wip%252F73760-wtf/2/testReport/):
django.db.utils.ProgrammingError: ERREUR: la relation « alala_ololo_aaaa » n'existe pas LINE 1: ...ription", "alala_ololo_aaaa"."base_soap_url" FROM "alala_olo...
Mis à jour par Benjamin Dauvergne il y a environ un an
Et j'ai relancé plusieurs fois le job, c'est intermittent :/
Mis à jour par Emmanuel Cazenave il y a environ un an
Je tente des builds sans xdist, pour voir si ça a un rapport.
Mis à jour par Emmanuel Cazenave il y a environ un an
Emmanuel Cazenave a écrit :
Je tente des builds sans xdist, pour voir si ça a un rapport.
Oui à 90% (j'ai pas lancé assez de builds sans xdist pour dire 100%).
Aussi ça n'a rien à voir avec l'application firl_rest : dans une branche où j'ai shooté cette application, ça se met à péter sur une autre.
psycopg2.errors.UndefinedTable: ERREUR: la relation « pdf_resource » n'existe pas E LINE 1: ...escription", "pdf_resource"."fill_form_file" FROM "pdf_resou...
Quand même ça ne casse pas sur n'importe lesquelles, filr et pdf introduites récemment.
Je m'en vais tenter une bonne vieille dichotomie en espérant tomber sur le commit fautif, si tant est qu'il existe.
Mis à jour par Frédéric Péters il y a environ un an
Tout autre chose (inspiré par #74787), on avait à la fois le job jenkins -wip et le job gitea... qui se déclenchaient, sur la même branche, à un moment plutôt similaire, ça ne pourrait pas être la source de cette affaire ?
Mis à jour par Emmanuel Cazenave il y a environ un an
Frédéric Péters a écrit :
Tout autre chose (inspiré par #74787), on avait à la fois le job jenkins -wip et le job gitea... qui se déclenchaient, sur la même branche.
J'allais dire que non parce ça se produit aussi sur main, pas que dans les branches, mais je regarde le job gitea et je découvre https://jenkins.entrouvert.org/job/gitea/job/passerelle/job/main/, mais pas d'historique, va savoir.
Mis à jour par Emmanuel Cazenave il y a environ un an
J'ai testé l'approche numéro random de #74787 dans le job https://jenkins.entrouvert.org/job/s/ (passerelle-73760) et sur un des run est ressorti la trace "la relation « filr_rest_filr » n'existe pas".
Donc à priori vraiment pas une histoire de jobs concurrents.
Mis à jour par Valentin Deniaud il y a environ un an
Un truc à tester éventuellement c'est d'essayer de reproduire en ayant viré les trois tests qui utilisent la fixture transactional_db.
Mis à jour par Emmanuel Cazenave il y a environ un an
Valentin Deniaud a écrit :
Un truc à tester éventuellement c'est d'essayer de reproduire en ayant viré les trois tests qui utilisent la fixture transactional_db.
https://jenkins.entrouvert.org/job/s/ configuré pour tourner toutes les 30 minutes sur wip/73760-transactional-db où ces trois tests sont virés.
Mis à jour par Benjamin Dauvergne il y a environ un an
- Sujet changé de Erreur récuprente sur les tests/build paserelle la relation « filr_rest_filr » n'existe pas à Erreur récurrente sur les tests/build paserelle la relation « filr_rest_filr » n'existe pas
Mis à jour par Robot Gitea il y a environ un an
- Statut changé de Nouveau à En cours
- Assigné à changé de Emmanuel Cazenave à Benjamin Dauvergne
Benjamin Dauvergne (bdauvergne) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/passerelle/pulls/128
- Titre : WIP: bug mystérieux filr-rest-filr
- Modifications : https://git.entrouvert.org/entrouvert/passerelle/pulls/128/files
Mis à jour par Robot Gitea il y a environ un an
Benjamin Dauvergne (bdauvergne) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/passerelle/pulls/129
- Titre : WIP: filr-rest-filr
- Modifications : https://git.entrouvert.org/entrouvert/passerelle/pulls/129/files
Mis à jour par Benjamin Dauvergne il y a environ un an
Bon j'ai trouvé ça vient du test de migration dans toulouse_smart que j'ai écrit avec les pieds au lieu de reprendre le code qui marche coté authentic.
Mis à jour par Robot Gitea il y a environ un an
- Statut changé de Solution proposée à Solution validée
Nicolas Roche (nroche) a approuvé une pull request sur Gitea concernant cette demande :
Mis à jour par Robot Gitea il y a environ un an
- Statut changé de Solution validée à Résolu (à déployer)
Benjamin Dauvergne (bdauvergne) a mergé une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/passerelle/pulls/129
- Titre : utiliser la fixture migration d'authentic pour tester les migrations (#73760)
- Modifications : https://git.entrouvert.org/entrouvert/passerelle/pulls/129/files
Mis à jour par Benjamin Dauvergne il y a environ un an
- ajouter dans tox.ini
[passenv] PGPORT PGHOST PGUSER PGPASSWORD
- lancer
pg_virtualenv -o log_statement=all bash
- dans la session bash lancer tox comme d'habitude
- dans /tmp/pg_virt*/log/*.log on peut voir toutes les commandes SQL lancées et voir celles qui font foirer le run (typiquement une altération au schéma dans un BEGIN/COMMIT qui n'est pas défait) et trouver le test qui pose souci en cherchant un peu autour
Mis à jour par Transition automatique il y a environ un an
- Statut changé de Résolu (à déployer) à Solution déployée
tests: use migration fixture from authentic (#73760)