Projet

Général

Profil

Development #65472

Crash migration sur mise à jour

Ajouté par Emmanuel Cazenave il y a presque 2 ans. Mis à jour il y a presque 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
19 mai 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/migrations/operations/special.py", line 190, in database_forwards
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     self.code(from_state.apps, schema_editor)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/authentic2/apps/authenticators/migrations/0003_auto_20220413_1504.py", line 13, in create_login_password_a>
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     LoginPasswordAuthenticator.objects.get_or_create(
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/manager.py", line 82, in manager_method
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return getattr(self.get_queryset(), name)(*args, **kwargs)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 541, in get_or_create
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return self._create_object_from_params(kwargs, params)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 575, in _create_object_from_params
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     obj = self.create(**params)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 422, in create
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     obj.save(force_insert=True, using=self.db)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 743, in save
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     self.save_base(using=using, force_insert=force_insert,
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 779, in save_base
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     parent_inserted = self._save_parents(cls, using, update_fields)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 808, in _save_parents
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     updated = self._save_table(
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 873, in _save_table
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 910, in _do_insert
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return manager._insert([self], fields=fields, return_id=update_pk,
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/manager.py", line 82, in manager_method
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return getattr(self.get_queryset(), name)(*args, **kwargs)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 1186, in _insert
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return query.get_compiler(using=using).execute_sql(return_id)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py", line 1377, in execute_sql
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     cursor.execute(sql, params)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 99, in execute
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return super().execute(sql, params)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/__init__.py", line 446, in execute
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return real_execute(self, sql, params)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 67, in execute
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return executor(sql, params, many, context)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 84, in _execute
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return self.cursor.execute(sql, params)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/utils.py", line 89, in __exit__
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     raise dj_exc_value.with_traceback(traceback) from exc_value
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:   File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 84, in _execute
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]:     return self.cursor.execute(sql, params)
mai 19 18:46:42 authentic authentic2-multitenant-manage[371498]: django.db.utils.DataError: ERREUR:  valeur trop longue pour le type character varying(128)

Fichiers


Demandes liées

Lié à Authentic 2 - Development #53902: avoir une classe de base pour les modèles de gestion des moyens d'authentificationFermé10 mai 2021

Actions

Révisions associées

Révision 297b97d6 (diff)
Ajouté par Valentin Deniaud il y a presque 2 ans

authenticators: adjust show_condition field contraints (#65472)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

  • Lié à Development #53902: avoir une classe de base pour les modèles de gestion des moyens d'authentification ajouté
#3

Mis à jour par Valentin Deniaud il y a presque 2 ans

  • Assigné à mis à Valentin Deniaud
#4

Mis à jour par Valentin Deniaud il y a presque 2 ans

Le champ show_condition est trop court pour contenir les conditions existantes sur la recette. Aussi il y a peut-être des endroits où on essaye de mettre None dedans alors que le champ ne peut pas être nul.

L'idée c'est d'éditer la migration, pour qu'elle passe aux endroits où elle n'est pas passée. Les endroits où elle est passée, on ajustera plus tard.

#5

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

J'ai juste un souci avec :

             show_condition = show_condition.get(provider.slug) or ''

si y a plusieurs instances ça ne marchera pas, on gardera la dernière condition (je ne connais pas de cas où on en a plusieurs mais tant qu'à faire faisons du code logique).

Il vaudrait mieux stocker la nouvelle valeur dans une variable nommée différemment dans le corps de la boucle.

#7

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

  • Statut changé de Solution proposée à Solution validée

C'est bon pour moi, tu peux tester directement sur GLC en copiant les 4 fichiers concernés si tu ne veux pas te tapper un tag/deploy pour rien (grandlyon-cut-test-sso-1 j'ai coupé sur sso-2).

#9

Mis à jour par Valentin Deniaud il y a presque 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 297b97d633a30fb6bbbbbd742a69b913e7cb257a
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu May 19 19:11:18 2022 +0200

    authenticators: adjust show_condition field contraints (#65472)
#15

Mis à jour par Transition automatique il y a presque 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#16

Mis à jour par Pierre Ducroquet il y a presque 2 ans

authentic2_multitenant=# select nspname, relname, pa.attname, pa.atttypmod - 4 from pg_class pc join pg_namespace pn on pn.oid = pc.relnamespace left join pg_attribute pa on pa.attrelid = pc.oid and pa.attname = 'show_condition'  where relname = 'authenticators_baseauthenticator' and pa.atttypmod <> 1028;
                     nspname                      |             relname              |    attname     | ?column? 
--------------------------------------------------+----------------------------------+----------------+----------
 connexion_chateauroux_test_entrouvert_org        | authenticators_baseauthenticator | show_condition |      128
 connexion_chemdata_test_entrouvert_org           | authenticators_baseauthenticator | show_condition |      128
 connexion_chris_a_test_entrouvert_org            | authenticators_baseauthenticator | show_condition |      128
 connexion_chris_test_entrouvert_org              | authenticators_baseauthenticator | show_condition |      128
 connexion_cinor_test_entrouvert_org              | authenticators_baseauthenticator | show_condition |      128
 connexion_clermont_metropole_test_entrouvert_org | authenticators_baseauthenticator | show_condition |      128
 connexion_cnil_test_entrouvert_org               | authenticators_baseauthenticator | show_condition |      128
 connexion_correze_test_entrouvert_org            | authenticators_baseauthenticator | show_condition |      128
 connexion_csam_test_entrouvert_org               | authenticators_baseauthenticator | show_condition |      128
 connexion_csma_test_entrouvert_org               | authenticators_baseauthenticator | show_condition |      128
(10 lignes)

(y'a un delta de 4 sur atttypmod pour des raisons internes à PG)

Du coup si vous voulez que j'unifie ça...

authentic2_multitenant=# select 'ALTER TABLE ' || nspname || '.' || relname || ' ALTER COLUMN show_condition TYPE character varying (1024);' from pg_class pc join pg_namespace pn on pn.oid = pc.relnamespace left join pg_attribute pa on pa.attrelid = pc.oid and pa.attname = 'show_condition'  where relname = 'authenticators_baseauthenticator' and pa.atttypmod <> 1028;
                                                                         ?column?                                                                         
----------------------------------------------------------------------------------------------------------------------------------------------------------
 ALTER TABLE connexion_chateauroux_test_entrouvert_org.authenticators_baseauthenticator ALTER COLUMN show_condition TYPE character varying (1024);
 ALTER TABLE connexion_chemdata_test_entrouvert_org.authenticators_baseauthenticator ALTER COLUMN show_condition TYPE character varying (1024);
 ALTER TABLE connexion_chris_a_test_entrouvert_org.authenticators_baseauthenticator ALTER COLUMN show_condition TYPE character varying (1024);
 ALTER TABLE connexion_chris_test_entrouvert_org.authenticators_baseauthenticator ALTER COLUMN show_condition TYPE character varying (1024);
 ALTER TABLE connexion_cinor_test_entrouvert_org.authenticators_baseauthenticator ALTER COLUMN show_condition TYPE character varying (1024);
 ALTER TABLE connexion_clermont_metropole_test_entrouvert_org.authenticators_baseauthenticator ALTER COLUMN show_condition TYPE character varying (1024);
 ALTER TABLE connexion_cnil_test_entrouvert_org.authenticators_baseauthenticator ALTER COLUMN show_condition TYPE character varying (1024);
 ALTER TABLE connexion_correze_test_entrouvert_org.authenticators_baseauthenticator ALTER COLUMN show_condition TYPE character varying (1024);
 ALTER TABLE connexion_csam_test_entrouvert_org.authenticators_baseauthenticator ALTER COLUMN show_condition TYPE character varying (1024);
 ALTER TABLE connexion_csma_test_entrouvert_org.authenticators_baseauthenticator ALTER COLUMN show_condition TYPE character varying (1024);
(10 lignes)

Et j'ai un \gexec à faire, si ça vous convient.

Pour unifier plus globalement les schémas, faut me laisser un peu plus de temps pour déterrer et paramétrer le bon outil.

#17

Mis à jour par Frédéric Péters il y a presque 2 ans

Oui, vas-y.

#18

Mis à jour par Pierre Ducroquet il y a presque 2 ans

Fait.

authentic2_multitenant=# \gexec
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE

#20

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF