Projet

Général

Profil

Bug #21079

Erreur lors de la création d'un tenant

Ajouté par Emmanuel Cazenave il y a plus de 6 ans. Mis à jour il y a plus de 6 ans.

Statut:
Rejeté
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
10 janvier 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:

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

#1

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).

#2

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.

#3

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.

#4

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.

Formats disponibles : Atom PDF