Projet

Général

Profil

Actions

Anomalie #5584

fermé

{DB0001} query error : ERROR: duplicate key value violates unique constraint "pg_type_typname_nsp_index" DETAIL: Key (typname, typnamespace)=(session_conf, 43891) already exists.

Ajouté par Jérôme Augé il y a presque 11 ans. Mis à jour il y a plus de 10 ans.

Statut:
Intégré
Priorité:
Normal
Assigné à:
Version cible:
Début:
25/06/2015
Echéance:
% réalisé:

100%

Temps estimé:
Version source:
Solution proposée:

Pré-créer la table session_conf à l'installation.
Ajouter aussi le "create table if not exists"

Principaux fichiers impactés:
Complexité:
Contrôle:
Thème:
Socle technique
Régression:
Non

Description

Sur un contexte vierge fraîchement installé par le CLI et auquel aucun client Web ne c'est connecté, si plusieurs requêtes sont lancés en //, ces requêtes retournent une erreur "HTTP/1.1 500 Dynacase Uncaugth Exception" et dans le error_log j'ai :

[25-Jun-2015 13:34:06 Europe/Paris] 0) /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php:770 DbObj::setError()
[25-Jun-2015 13:34:06 Europe/Paris] 1) /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php:587 DbObj::exec_query()
[25-Jun-2015 13:34:06 Europe/Paris] 2) /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php:657 DbObj::Create()
[25-Jun-2015 13:34:06 Europe/Paris] 3) /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php:756 DbObj::tryCreate()
[25-Jun-2015 13:34:06 Europe/Paris] 4) /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php:217 DbObj::exec_query()
[25-Jun-2015 13:34:06 Europe/Paris] 5) /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php:146 DbObj::Select()
[25-Jun-2015 13:34:06 Europe/Paris] 6) /var/www/autotest/contexts/document-uis/WHAT/Class.Session.php:307 DbObj::__construct()
[25-Jun-2015 13:34:06 Europe/Paris] 7) /var/www/autotest/contexts/document-uis/WHAT/Class.Session.php:218 Session::newId()
[25-Jun-2015 13:34:06 Europe/Paris] 8) /var/www/autotest/contexts/document-uis/WHAT/Class.Session.php:93 Session::Open()
[25-Jun-2015 13:34:06 Europe/Paris] 9) /var/www/autotest/contexts/document-uis/WHAT/Lib.Main.php:57 Session::Set()
[25-Jun-2015 13:34:06 Europe/Paris] 10) /var/www/autotest/contexts/document-uis/WHAT/Class.ActionRouter.php:21 ::getMainAction()
[25-Jun-2015 13:34:06 Europe/Paris] 11) /var/www/autotest/contexts/document-uis/guest.php:42 ActionRouter::__construct()
[25-Jun-2015 13:34:06 Europe/Paris] {DB0001} query error : ERROR:  duplicate key value violates unique constraint "pg_type_typname_nsp_index" 
DETAIL:  Key (typname, typnamespace)=(session_conf, 43891) already exists.

create table session_conf ( key     varchar(50),
                            val     varchar(200))

[25-Jun-2015 13:34:06 Europe/Paris] 0) /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php:770 DbObj::setError()
[25-Jun-2015 13:34:06 Europe/Paris] 1) /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php:217 DbObj::exec_query()
[25-Jun-2015 13:34:06 Europe/Paris] 2) /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php:146 DbObj::Select()
[25-Jun-2015 13:34:06 Europe/Paris] 3) /var/www/autotest/contexts/document-uis/WHAT/Class.Session.php:307 DbObj::__construct()
[25-Jun-2015 13:34:06 Europe/Paris] 4) /var/www/autotest/contexts/document-uis/WHAT/Class.Session.php:218 Session::newId()
[25-Jun-2015 13:34:06 Europe/Paris] 5) /var/www/autotest/contexts/document-uis/WHAT/Class.Session.php:93 Session::Open()
[25-Jun-2015 13:34:06 Europe/Paris] 6) /var/www/autotest/contexts/document-uis/WHAT/Lib.Main.php:57 Session::Set()
[25-Jun-2015 13:34:06 Europe/Paris] 7) /var/www/autotest/contexts/document-uis/WHAT/Class.ActionRouter.php:21 ::getMainAction()
[25-Jun-2015 13:34:06 Europe/Paris] 8) /var/www/autotest/contexts/document-uis/guest.php:42 ActionRouter::__construct()
[25-Jun-2015 13:34:06 Europe/Paris] {DB0001} query error : ERROR:  relation "session_conf" does not exist
LINE 1: select session_conf.key,session_conf.val from session_conf  ...
                                                      ^

select session_conf.key,session_conf.val from session_conf  where session_conf.key=E'MAGIC'

[25-Jun-2015 13:34:06 Europe/Paris] 28238> Dynacase got an uncaught exception 'Dcp\Db\Exception' with message '{DB0001} query error : ERROR:  relation "session_conf" does not exist
LINE 1: select session_conf.key,session_conf.val from session_conf  ...
                                                      ^

select session_conf.key,session_conf.val from session_conf  where session_conf.key=E'MAGIC'
' in file /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php at line 826:
[25-Jun-2015 13:34:06 Europe/Paris] 28238> #0 /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php(770): DbObj->setError('select session_...')
[25-Jun-2015 13:34:06 Europe/Paris] 28238> #1 /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php(217): DbObj->exec_query('select session_...')
[25-Jun-2015 13:34:06 Europe/Paris] 28238> #2 /var/www/autotest/contexts/document-uis/WHAT/Class.DbObj.php(146): DbObj->Select('MAGIC')
[25-Jun-2015 13:34:06 Europe/Paris] 28238> #3 /var/www/autotest/contexts/document-uis/WHAT/Class.Session.php(307): DbObj->__construct('service='docume...', 'MAGIC')
[25-Jun-2015 13:34:06 Europe/Paris] 28238> #4 /var/www/autotest/contexts/document-uis/WHAT/Class.Session.php(218): Session->newId()
[25-Jun-2015 13:34:06 Europe/Paris] 28238> #5 /var/www/autotest/contexts/document-uis/WHAT/Class.Session.php(93): Session->Open('3')
[25-Jun-2015 13:34:06 Europe/Paris] 28238> #6 /var/www/autotest/contexts/document-uis/WHAT/Lib.Main.php(57): Session->Set('')
[25-Jun-2015 13:34:06 Europe/Paris] 28238> #7 /var/www/autotest/contexts/document-uis/WHAT/Class.ActionRouter.php(21): getMainAction(NULL, NULL)
[25-Jun-2015 13:34:06 Europe/Paris] 28238> #8 /var/www/autotest/contexts/document-uis/guest.php(42): ActionRouter->__construct(Object(Account))
[25-Jun-2015 13:34:06 Europe/Paris] 28238> #9 {main}
[25-Jun-2015 13:34:06 Europe/Paris] 28238> End Of Exception.

Le problème semble provenir du mécanisme d'auto-création des tables :
- N requêtes sont émises
- les N requêtes détectent que la table T n'existe pas
- une des requêtes va alors créer la table T
- les autres requêtes vont faire de même à quelques msec. d'écart et vont alors tomber sur l'erreur que la table T existe déjà

Script de reproduction de l'erreur :

#!/bin/bash

PGSERVICE=$pgservice_core psql -f - <<'EOF' > /dev/null
DROP TABLE sessions;
DROP TABLE session_conf;
EOF
{
        curl -s -D - -o /dev/null 'http://localhost/autotest/contexts/document-uis//guest.php?app=DOCUMENT&action=TEMPLATE&part=attribute&subPart=default&bust=1435231231678' &
        curl -s -D - -o /dev/null 'http://localhost/autotest/contexts/document-uis//guest.php?app=DOCUMENT&action=TEMPLATE&part=attribute&subPart=default&bust=1435231231678' &
        curl -s -D - -o /dev/null 'http://localhost/autotest/contexts/document-uis//guest.php?app=DOCUMENT&action=TEMPLATE&part=attribute&subPart=default&bust=1435231231678' &
} | grep HTTP/1.1

Sortie:

HTTP/1.1 500 Dynacase Uncaugth Exception
HTTP/1.1 500 Dynacase Uncaugth Exception
HTTP/1.1 200 OK

Actions

Formats disponibles : Atom PDF