Projet

Général

Profil

Development #54658

possibilité pour une mise à jour des données de se casser et laisser un schéma vide

Ajouté par Frédéric Péters il y a presque 3 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
08 juin 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

    def do_schema(self):
        self.ex('SET search_path = public')
        self.logger.debug('dropping schema %s', self.schema_temp)
        self.drop_tables_sequencially(self.schema_temp)
        self.ex('DROP SCHEMA IF EXISTS {schema_temp} CASCADE')
        self.logger.debug('creating schema %s', self.schema)
        self.ex('CREATE SCHEMA {schema_temp}')
        self.ex('SET search_path = {schema_temp},public')

Le drop_tables_sequencially peut échouer, ex:

  File "/usr/lib/python3/dist-packages/wcs_olap/cmd.py", line 108, in main2
    olap_feeder.feed()
  File "/usr/lib/python3/dist-packages/wcs_olap/feeder.py", line 619, in feed
    self.drop_tables_sequencially(self.schema)
  File "/usr/lib/python3/dist-packages/wcs_olap/feeder.py", line 368, in drop_tables_sequencially
    % (quote(schema), quote(table_name), quote(constraint_name)))
  File "/usr/lib/python3/dist-packages/wcs_olap/feeder.py", line 336, in ex
    self.cur.execute(sql, vars=vars)
psycopg2.extensions.TransactionRollbackError: deadlock detected
DÉTAIL : Process 2936 waits for AccessExclusiveLock on relation 825879306 of database 50671; blocked by process 25139.
Process 25139 waits for AccessShareLock on relation 825902239 of database 50671; blocked by process 2936.
ASTUCE : See server log for query details.

et le résultat derrière c'est une base sans (toutes) les données/tables nécessaires.


Fichiers


Demandes liées

Lié à OLAP / Business Intelligence pour Publik - Bug #54808: pas de permissions pour SET deadlock_timeoutFermé14 juin 2021

Actions

Révisions associées

Révision c74766bf (diff)
Ajouté par Benjamin Dauvergne il y a presque 3 ans

feeder: set deadlock_timeout to 10 seconds (#54658)

It makes wcs-olap always win in a deadlock with another client.

Révision b3a59edb (diff)
Ajouté par Benjamin Dauvergne il y a presque 3 ans

Revert "feeder: set deadlock_timeout to 10 seconds (#54658)"

This reverts commit c74766bf2c7a911ab04da9084231ef3397cb2964.

Révision 05c40317 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 2 ans

feeder: prevent situation of half-dropped schema (#54658)

To prevent loosing currently loaded data wcs-olap, failing ro rename the
temporary schema to its final name, wcs-olap will:

- first, inside a transaction, rename the current schema instead of
dropping it, then rename the new schema to the current schema's name;
in case of failure it will retry 33 times sleeping 1 second between
each attempt;

- if successfull, drop the renamed old schema, again in a retry loop, if
it fails to drop it logs an error, without aborting the current
feeding.

Historique

#2

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

Le deadlock_timeout est à une seconde par défaut, pour toutes les transactions, je pense qu'on peut le pousser à 10s durant la mise à jour olap.

#3

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

  • Assigné à mis à Benjamin Dauvergne
#4

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

#6

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

Benjamin Dauvergne a écrit :

Autant modifier le timeout le plus tôt possible.

Le but si ce n'est pas clair c'est que dans un duel (due à la détection des deadlock par postgresql), ce soit toujours wcs-olap qui gagne vu que sont timeout est plus élevé; ça laisse toujours une marge d'erreur car le scheduling des processus peut faire que wcs-olap perde quand même mais 10s ça laisse quand même une bonne marge.

#7

Mis à jour par Nicolas Roche il y a presque 3 ans

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

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit c74766bf2c7a911ab04da9084231ef3397cb2964
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue Jun 8 17:24:52 2021 +0200

    feeder: set deadlock_timeout to 10 seconds (#54658)

    It makes wcs-olap always win in a deadlock with another client.
#9

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

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

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

  • Statut changé de Solution déployée à Nouveau
  • Patch proposed changé de Oui à Non

Le commit étant annulé (#54808) ce ticket reste.

#11

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

Plus simple, ne pas s'occuper du deadlock juste faire les choses dans le bon ordre dans une transaction et ré-essayer.

#13

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

  • Lié à Bug #54808: pas de permissions pour SET deadlock_timeout ajouté
#14

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

Le 33 secondes c'est parce que les requêtes dans bijoe prennent au plus 30 secondes avant d'échouer (petite idée que wcs-olap devrait gagner un duel, mais je ne suis même pas sûr qu'un simple renommage de schéma prennent des verrous, par contre le schema drop en prend pleins, mais une fois le nom modifié il ne devrait plus y avoir d'accès de la part de bijoe).

#15

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

  • Tracker changé de Development à Bug
#16

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

J'ai récupéré atomic() depuis #56039 où il a disparu.

#17

Mis à jour par Serghei Mihai il y a plus de 2 ans

Je valide une fois jenkins vert.

#18

Mis à jour par Serghei Mihai il y a plus de 2 ans

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

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 05c40317767e218acdb7675fec39ea2a34c7360b
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Sat Aug 7 18:43:29 2021 +0200

    feeder: prevent situation of half-dropped schema (#54658)

    To prevent loosing currently loaded data wcs-olap, failing ro rename the
    temporary schema to its final name, wcs-olap will:

    - first, inside a transaction, rename the current schema instead of
      dropping it, then rename the new schema to the current schema's name;
      in case of failure it will retry 33 times sleeping 1 second between
      each attempt;

    - if successfull, drop the renamed old schema, again in a retry loop, if
      it fails to drop it logs an error, without aborting the current
      feeding.
#20

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

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

Formats disponibles : Atom PDF