Projet

Général

Profil

Support #25043

[multitenants] échec de migration des tenants

Ajouté par Christophe Siraut il y a presque 6 ans. Mis à jour il y a presque 6 ans.

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

0%

Temps estimé:
Patch proposed:
Non
Planning:

Description

Connecté via pgpool2, le set_schema() de hobo/multitenant/management/commands/migrate_schemas.py ne sert à rien:

    def run_migrations(self, schema_name, included_apps):
        if int(self.options.get('verbosity', 1)) >= 1:
            self._notice("=== Running migrate for schema %s" % schema_name)
        connection.set_schema(schema_name, include_public=False)
        command = MigrateCommand()
        command.execute(*self.args, **self.options)
        connection.set_schema_to_public()

La connexion est réinitiée dans django.core.management.commands.migrate sans le set_schema():

    def handle(self, *args, **options):                                         

        self.verbosity = options['verbosity']                                   
        self.interactive = options['interactive']                               

        # Import the 'management' module within each installed app, to register 
        # dispatcher events.                                                    
        for app_config in apps.get_app_configs():                               
            if module_has_submodule(app_config.module, "management"):           
                import_module('.management', app_config.name)                   

        # Get the database we're operating from                                 
        db = options['database']                                                
        connection = connections[db]                                            

        # Hook for backends needing any database preparation                    
        connection.prepare_database()  

On pourrait profiter du hook prévu, pour faire une sous-classe simple et tenant-aware.

Historique

#2

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

C'est étonnant car ça marche sans pgpool2, pourquoi le fait d'utiliser pgpool2 ferait que django.db.connection != connections[db] ? Ici j'ai l'impression que tu supposes qu'en recherchant la db par son nom, ici certainement 'default' on aurait pas la même connection, dans mon souvenir de lecture de ce code le dictionnaire connections est thread local, mais au sein d'un même thread on obtient toujours la même connection tant qu'on ne fait pas .close().

#3

Mis à jour par Christophe Siraut il y a presque 6 ans

  • Statut changé de Nouveau à Rejeté

set_tenant fonctionne bien, mon problème est ailleurs.

#5

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

En excluant des changements de packaging, le diff actuel me semble pointer comme seul changement #9891 (mais le fork existait déjà, pour je ne sais pas quelle raison d'alors).

Formats disponibles : Atom PDF