Bug #21079
Erreur lors de la création d'un tenant
0%
Description
Dans une install mutitenant from scratch, avec un serveur postgres, la commande 'authentic-ctl create_tenant toto' produit la stacktrace suivante :
Applying a2_rbac.0004_auto_20150523_0028...Traceback (most recent call last): File "/home/cazino/envs/publik-env/bin/authentic2-ctl", line 6, in <module> exec(compile(open(__file__).read(), __file__, 'exec')) File "/home/cazino/src/authentic/authentic2-ctl", line 21, in <module> execute_from_command_line(sys.argv[:1] + argv) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line utility.execute() File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 346, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 394, in run_from_argv self.execute(*args, **cmd_options) File "/home/cazino/src/hobo/hobo/agent/authentic2/apps.py", line 45, in new_execute return old_execute(self, *args, **kwargs) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute output = self.handle(*args, **options) File "/home/cazino/src/hobo/hobo/multitenant/management/commands/create_schemas.py", line 19, in handle tenant.create_schema(check_if_exists=True) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/tenant_schemas/models.py", line 118, in create_schema verbosity=verbosity) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 120, in call_command return command.execute(*args, **defaults) File "/home/cazino/src/hobo/hobo/agent/authentic2/apps.py", line 45, in new_execute return old_execute(self, *args, **kwargs) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute output = self.handle(*args, **options) File "/home/cazino/src/hobo/hobo/multitenant/management/commands/migrate_schemas.py", line 49, in handle self.run_migrations(self.schema_name, settings.TENANT_APPS) File "/home/cazino/src/hobo/hobo/multitenant/management/commands/migrate_schemas.py", line 60, in run_migrations command.execute(*self.args, **self.options) File "/home/cazino/src/hobo/hobo/agent/authentic2/apps.py", line 45, in new_execute return old_execute(self, *args, **kwargs) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute output = self.handle(*args, **options) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 222, in handle executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 110, in migrate self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 148, in apply_migration state = migration.apply(state, schema_editor) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/migrations/migration.py", line 115, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/migrations/operations/models.py", line 359, in database_forwards getattr(new_model._meta, self.option_name, set()), File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 320, in alter_unique_together self._delete_composed_index(model, fields, {'unique': True}, self.sql_delete_unique) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 349, in _delete_composed_index ", ".join(columns), ValueError: Found wrong number (2) of constraints for a2_rbac_role(slug, service_id)
Peut se résoudre en commentant tout ce qui se trouve dans la liste 'operations' de src/authentic2/a2_rbac/migrations/0004_auto_20150523_0028.py
Ensuite la commande 'authentic-ctl migrate_schemas' plante à nouveau avec :
Applying a2_rbac.0011_auto_20160209_1511...Traceback (most recent call last): File "/home/cazino/envs/publik-env/bin/authentic2-ctl", line 6, in <module> exec(compile(open(__file__).read(), __file__, 'exec')) File "/home/cazino/src/authentic/authentic2-ctl", line 21, in <module> execute_from_command_line(sys.argv[:1] + argv) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line utility.execute() File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 346, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 394, in run_from_argv self.execute(*args, **cmd_options) File "/home/cazino/src/hobo/hobo/agent/authentic2/apps.py", line 45, in new_execute return old_execute(self, *args, **kwargs) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute output = self.handle(*args, **options) File "/home/cazino/src/hobo/hobo/multitenant/management/commands/migrate_schemas.py", line 53, in handle self.run_migrations(tenant.schema_name, settings.TENANT_APPS) File "/home/cazino/src/hobo/hobo/multitenant/management/commands/migrate_schemas.py", line 60, in run_migrations command.execute(*self.args, **self.options) File "/home/cazino/src/hobo/hobo/agent/authentic2/apps.py", line 45, in new_execute return old_execute(self, *args, **kwargs) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute output = self.handle(*args, **options) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 222, in handle executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 110, in migrate self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 148, in apply_migration state = migration.apply(state, schema_editor) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/migrations/migration.py", line 115, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/migrations/operations/models.py", line 359, in database_forwards getattr(new_model._meta, self.option_name, set()), File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 320, in alter_unique_together self._delete_composed_index(model, fields, {'unique': True}, self.sql_delete_unique) File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 349, in _delete_composed_index ", ".join(columns), ValueError: Found wrong number (2) of constraints for a2_rbac_role(slug, service_id)
Qui se résout à nouveau en rendant vide la liste 'operations' de src/authentic2/a2_rbac/migrations/0011_auto_20160209_1511.py
Après quoi la commande 'authentic-ctl migrate_schemas' ne plante plus.
Historique
Mis à jour par Frédéric Péters il y a plus de 6 ans
Le soucis vient en amont de la migration manuelle "0003_partial_unique_index_on_name_and_slug.py" (qui appelle le CreatePartialIndexes défini dans authentic2/migrations/__init__.py); retirer la création d'index de celle-ci assurer que la suite rencontre le nombre attendu de contraintes. (L'origine de cette migration est #7357).
Mis à jour par Frédéric Péters il y a plus de 6 ans
Les migrations 4 et 11, elles ont un AlterUniqueTogether sur "role", c'est dans ce cadre que des contraintes sont supprimées et comptées et que la contrainte inattendue fait échouer l'affaire. (alter_unique_together appelle delete_composed_index qui s'attend à n'avoir qu'une contrainte à supprimer.).
Tout ça est quand même du plutôt vieux code, c'est curieux de tomber dessus maintenant, je me demande ce qui a pu bouger.
(...)
django-tenant-schemas. Quand je bascule de "ma" branche wip/github-remerge-2017 (créée pour Django 1.11) vers notre branche master, ça passe.
Mis à jour par Frédéric Péters il y a plus de 6 ans
Ça vient de https://github.com/bernardopires/django-tenant-schemas/pull/385 (super les méga commits, puis reverté puis annulé reverté et des merge dans tous les sens, génial), en revertant la partie concernant l'introspection des index, je retourne au comportement attendu, toutes les migrations passent. Poussé dans la branche wip/github-remerge-2017.
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Statut changé de Nouveau à Rejeté
Pas un problème authentic, je ferme donc.