Skip to content
This repository has been archived by the owner on Nov 3, 2023. It is now read-only.

Duplicate entry in tl_search im Unique Key "checksum,pid" #8460

Closed
BugBuster1701 opened this issue Sep 6, 2016 · 28 comments
Closed

Duplicate entry in tl_search im Unique Key "checksum,pid" #8460

BugBuster1701 opened this issue Sep 6, 2016 · 28 comments
Assignees
Labels
Milestone

Comments

@BugBuster1701
Copy link
Contributor

Der Fehler tritt immer dann auf, wenn sich eine Seite auf zwei verschiedene Arten aufrufen lässt. Beispiel an der Online-Demo:
http://demo.contao.org/en/ vs. http://demo.contao.org/en/index.html ==> Fehlermeldung ganz unten.

Der Indexer prüft ob URL-PID Kombi vorhanden, ja Update, nein Insert.
Hier folgt beim zweiten Aufruf also ein Insert, die Checksumme ist aber gleich, Peng!

@BugBuster1701
Copy link
Contributor Author

Entweder vorher prüfen oder per "insert ignore..." wären die Möglichkeiten dir mir einfallen dazu.

@t-me
Copy link

t-me commented Sep 6, 2016

Same problem on my website :
https://www.maat-lifestyle.nl/ vs https://www.maat-lifestyle.nl/index.html
i have just updated contao to 3.5.16

@leofeyer
Copy link
Member

leofeyer commented Sep 6, 2016

Seems OK to me, since you are not supposed to explicitly call the /index.html fragment.

@BugBuster1701
Copy link
Contributor Author

Das passiert wohl auch bei der Frontendvorschau, wenn man diese bei der ersten Seite aufruft.

@antilet
Copy link

antilet commented Sep 7, 2016

...you are not supposed to explicitly call the /index.html fragment.

Das lässt sich doch gar nicht vermeiden: wenn die Startseite über die Navigation aufgerufen wird, wird sie mit ihrem alias aufgerufen, und wenn www.domain.de aufgerufen wrid, dann eben ohne... :(

@bezin
Copy link

bezin commented Sep 7, 2016

Das lässt sich doch gar nicht vermeiden: wenn die Startseite über die Navigation aufgerufen wird, wird sie mit ihrem alias aufgerufen, und wenn www.domain.de aufgerufen wrid, dann eben ohne... :(

Wenn du das Navigationsmodul verwendest und die Startseite den Alias index hat, sollte die Seite ohne Alias aufgerufen werden. Wenn du einen Startseiten-Link manuell setzt, solltest du ihn auf / setzen statt auf /index.

@antilet
Copy link

antilet commented Sep 7, 2016

Die Startseite hat aber - warum auch immer - einen anderen alias und ja via Navigationsmodul.
Unabhängig davon, sollte meiner Meinung nach der Fehler wieder behoben werden, so wie vor 3.2.16;
es macht in meinen Augen keinen Sinn, zu sagen, man soll dies nicht und das nicht ...

@leofeyer
Copy link
Member

leofeyer commented Sep 7, 2016

Improved in e29de00.

@leofeyer leofeyer closed this as completed Sep 7, 2016
@vstuber
Copy link

vstuber commented Sep 9, 2016

Ich denke, dass selbst mit dieser Änderung immer noch ein schwerwiegendes Problem vorliegt.

Beispiel:

Ich rufe eine Seite mit einem Get-Parameter auf, z. B.
http://irgendeineseite.de/index.php/home.html?test=123

Danach nochmal mit geändertem Parameter, z. B.
http://irgendeineseite.de/index.php/home.html?test=124

Dabei läuft das System noch immer in einen Fatal Error bzw. Uncaught Exception
"Duplicate entry '52037b6602fe14f41604503cf06bcb15-73' for key 'checksum_pid'".

Das passiert nicht, wenn man die Seite zunächst komplett ohne den Get-Parameter aufruft, aber auf jeden Fall, wenn bereits der erste Aufruf der Seite den Get-Parameter hat.

Ich habe die Änderung aus e29de00 mal in die 3.5.16 übernommen, aber das behebt diesen Fehler nicht.

@UH-Nerion
Copy link

UH-Nerion commented Sep 9, 2016

Hallo,

wir haben das gleiche Problem. Sporadisch wird eine Seite nicht richtig geladen. Am Ende der Seite taucht dann die Contao Fehler-Meldung auf, mit verweiß auf die Logdateien, dort ist dann folgendes zu finden:

[09-Sep-2016 12:40:06 GMT] PHP Fatal error: Uncaught exception 'Exception' with message 'Query error: Duplicate entry 'e926d079e1d8ad3db4baf086cbd219d9-111' for key 'checksum_pid' (UPDATE tl_search SET tstamp=1473424806, url='xxx', title='xxx', protected='', filesize='75.05', groups=0, pid='111', language='de', text='xxx', checksum='e926d079e1d8ad3db4baf086cbd219d9' WHERE id='5')' thrown in /.../system/modules/core/library/Contao/Database/Statement.php on line 295
#0 /.../system/modules/core/library/Contao/Database/Statement.php(264): Contao\Database\Statement->query()
#1 /.../system/modules/core/library/Contao/Search.php(206): Contao\Database\Statement->execute('5')
#2 /.../system/modules/core/classes/FrontendTemplate.php(330): Contao\Search::indexPage(Array)
#3 /.../system/modules/core/classes/FrontendTemplate.php(124): Contao\FrontendTemplate->addToSearchIndex()
#4 /.../system/modules/core/pages/PageRegular.php(190): Contao\FrontendTemplate->output(true)
#5 /.../system/modules/core/controllers/FrontendIndex.php(285): Contao\PageRegular->generate(Object(Contao\PageModel), true)
#6 /.../httpdocs/index.php(20): Contao\FrontendIndex->run()

Das Problem tritt erst seit Version 3.5.16 auf.
Kurzfristig beheben lässt sich das Problem, indem man unter Systemwartung die "tl_search" leert.
Da es immer wieder sporadisch auftaucht, ist das für uns sehr schlecht, da vereinzelt die Webseiten-Designs dann nicht korrekt geladen werden.

Danke

@leofeyer
Copy link
Member

leofeyer commented Sep 9, 2016

Behoben in 9142f5c.

leofeyer added a commit to contao/core-bundle that referenced this issue Sep 9, 2016
@UH-Nerion
Copy link

Danke
Habe nun mal die beiden Änderungen in der Search.php vorgenommen. Hoffentlich ist das Problem damit behoben.

@leofeyer
Copy link
Member

leofeyer commented Sep 9, 2016

Falls nicht, bitte nochmal hier melden. 😉

@UH-Nerion
Copy link

UH-Nerion commented Sep 15, 2016

Hallo,
leider ist das Problem heute wieder aufgetaucht, nachdem jetzt einige Tage Ruhe war.
Ein aktualisieren der Webseite hat geholfen, dennoch wurde folgender Fehler im error_log protokolliert:

[15-Sep-2016 09:54:23 GMT] PHP Fatal error: Uncaught exception 'Exception' with message 'Query error: Duplicate entry 'ab5ea4d5eaafe3b224e7af60063410d2-123' for key 'checksum_pid' (UPDATE tl_search SET tstamp=1473933263,....

Im Error Log ist jedoch zusehen, dass der Fehler weiterhin regelmäßig auftaucht.

Nachtrag: Habe festgestellt, dass es nur auftaucht, wenn ich in Contao eingeloggt bin und dann im gleichen Browser unsere Webseite besuche. Sobald ich mich auslogge, ist der Fehler wieder weg.

@leofeyer
Copy link
Member

Wenn Du im Backend eingeloggt bist, sollte überhaupt nichts indiziert werden.

@fritzmg
Copy link
Contributor

fritzmg commented Sep 15, 2016

Wenn Du im Backend eingeloggt bist, sollte überhaupt nichts indiziert werden.

Ich denke er meinte es passiert, wenn er das Frontend aufruft, während er im Backend eingelogged ist (in einem anderen Tab bspw.)

@UH-Nerion
Copy link

UH-Nerion commented Sep 15, 2016

Ja genau @fritzmg

@leofeyer
Copy link
Member

Ich denke er meinte es passiert, wenn er das Frontend aufruft, während er im Backend eingelogged ist (in einem anderen Tab bspw.)

Ja, das meine ich auch. Solange BE_USER_LOGGED_IN gleich true ist, sollte weder in den Cache noch in den Suchindex geschrieben werden.

@UH-Nerion
Copy link

Ich kann euch nur berichten was ich festgestellt habe. Warum das so ist, weiß ich leider nicht :-)

@fritzmg
Copy link
Contributor

fritzmg commented Sep 15, 2016

@leofeyer Der Suchindex wird immer aufgebaut wenn das Frontend aufgerufen wird, egal ob man im Backend eingelogged ist oder nicht.

@fritzmg
Copy link
Contributor

fritzmg commented Sep 15, 2016

$this->getLoginStatus('BE_USER_AUTH') (in the constructor of FrontendIndex) seems to return false, even though you are logged into the backend and the cookie exists.

@antilet
Copy link

antilet commented Sep 15, 2016

Ja, das meine ich auch. Solange BE_USER_LOGGED_IN gleich true ist, sollte weder in den Cache noch in den Suchindex geschrieben werden.

Der Fehler tritt/trat sogar bei Frontendvorschau auf...
(wie es nach den o.g. Änderungen aussieht, weiß ich nicht.)

@fritzmg
Copy link
Contributor

fritzmg commented Sep 15, 2016

It's because of this part of getLoginStatus:

// Disable the cache if a back end user is logged in
if (TL_MODE == 'FE' && $strCookie == 'BE_USER_AUTH')
{
    $_SESSION['DISABLE_CACHE'] = true;

    // Always return false if we are not in preview mode (show hidden elements)
    if (!\Input::cookie('FE_PREVIEW'))
    {
        $_SESSION['TL_USER_LOGGED_IN'] = false; // backwards compatibility
        return false;
    }
}

This is actually partly legacy code since $_SESSION['DISABLE_CACHE'] = true; does not have any effect and is not needed anymore (see #8249). Since this part of the code returns false the search index will be generated as usual while being logged into the backend.

@leofeyer
Copy link
Member

@leofeyer Der Suchindex wird immer aufgebaut wenn das Frontend aufgerufen wird, egal ob man im Backend eingelogged ist oder nicht.

Nein, in der Frontend-Vorschau (show unpusblished elements) wird nichts indiziert.

@fritzmg
Copy link
Contributor

fritzmg commented Sep 19, 2016

Nein, in der Frontend-Vorschau (show unpusblished elements) wird nichts indiziert.

Ja, in der Frontend-Vorschau nicht, sonst jedoch schon.

@UH-Nerion
Copy link

Richtig, ich rede auch nicht von der Frontend-Vorschau.

@fritzmg
Copy link
Contributor

fritzmg commented Sep 19, 2016

@UH-Nerion dein Problem konnte ich aber bisher nicht reproduzieren.

jsonn pushed a commit to jsonn/pkgsrc that referenced this issue Sep 24, 2016
### 4.2.4 (2016-09-21)

 * Handle special character passwords in the "close account" module (see contao/core#8455).
 * Handle broken SVG files in the Image and File class (see contao/core#8470).
 * Reduce the maximum field length by the file extension length (see contao/core#8472).
 * Fall back to the field name if there is no label (see contao/core#8461).
 * Do not assume NULL by default for binary fields (see contao/core#8477).
 * Correctly render the diff view if not the latest version is active (see contao/core#8481).
 * Update the list of countries and languages (see contao/core#8453).
 * Correctly set up the MooTools CDN URL (see contao/core#8458).
 * Also check the URL length when determining the search URL (see contao/core#8460).
 * Only regenerate the session ID upon login.
@ausi
Copy link
Member

ausi commented Feb 17, 2017

I think this can be fixed with this PR: #8647

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

9 participants