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