[TYPO3-UG Oesterreich] TER Update Fehler

Markus Kappe markus.kappe at dix.at
Fri Apr 26 19:41:21 CEST 2013


Liebe TUGA Mitglieder,

unter bestimmten Voraussetzungen hört der Spinner sich nicht auf zu drehen,
wenn man die Extension Liste aktualisieren will. TYPO3 6.0.x

Wurde schon gemeldet unter http://forge.typo3.org/issues/43539 aber dann
aufgrund von Nicht-Nachvollziehbarkeit wieder geschlossen.

Man untersucht den Ajax Call und sieht die Fehlermeldung
Fatal error:  Maximum execution time of 30 seconds exceeded in
/xxx/typo3_src-6.0.4/typo3/sysext/core/Classes/Charset/CharsetConverter.php
on line 2090

Das heißt, das Error Handling versagt hier. Der User bekommt kein Feedback.

Zum Fehler: Ich habe herausgefunden, dass eine Query fehlschlägt (Insert in
die Datenbank der importierten Extension-Details). Das hat 2 Auswirkungen:
1) Das Debugging wird ausgelöst, wenn es entsprechend konfiguriert ist
(devIpMask, sqlErrors, etc.). Das führt zum Timeout. Das erklärt, warum
manche das Problem haben und andere nicht.

2) Die Extensions aus dem aktuell bearbeiteten Batch (50 an der Zahl)
werden nicht in die Datenbank eingefügt.

Wie kommt es zum DB Fehler?
Das Insert lautet ca so:
INSERT INTO tx_extensionmanager_domain_model_extension (extension_key,
version, integer_version, alldownloadcounter, downloadcounter, title,
ownerusername, author_name, author_email, authorcompany, last_updated,
md5hash, repository, state, review_state, category, description,
serialized_dependencies, update_comment) VALUES
('qrcode', '1.0.0', 1000000, 155, 0, 'QR Code', 'b263', 'Bastian Braeu', '
bb at bftmedia.de', '', 1361908312, '3a7f3e83cbddbd910163ef5eb26d5937', 1,
999, 0, plugin, 'Display QR codes as content elements, embed as
Fluidtemplate, or use the view helper in your own extensions.',
'a:1:{s:7:\"depends\";a:3:{s:3:\"cms\";s:12:\"6.0.0-6.0.99\";s:7:\"extbase\";s:12:\"6.0.0-6.0.99\";s:5:\"fluid\";s:12:\"6.0.0-6.0.99\";}}',
'TYPO3 CMS 6.0');

Fehlermeldung: Unknown column 'plugin' in 'field list'

Was auffällt ist, dass das Wort "plugin" nicht escaped wurde. Ein Vergleich
mit anderen Inserts zeigt, dass an der Stelle normalerweise eine Zahl steht.

Vergleich mit dem XML, welches in SQL umgesetzt wird: hier ist bei normal
funktionierenden Datensätzen ein <category>plugin</category>. Bei einigen
wenigen falschen Datensätzen steht an der Stelle ein <category>3</category>
o.ä.

D.h. 1) sind die Ausgangsdaten falsch und 2) werden falsche Daten nicht
ausreichend abgefangen.

Zurück zum Fehler bei der Debug Ausgabe: die Zeit wird aufgebraucht
in TYPO3\CMS\Core\Encoder::encode() bei der Codierung der 21k großen Debug
Ausgabe.
Das encoden ist sehr unperformat geschrieben, es wird jedes Zeichen unter
Berücksichtigung des Zeichensatzes (UTF-8) aus dem 21k String
ausgeschnitten und separat encoded bevor es wieder zusammengesetzt wird.
Nach ca. 7k Zeichen auf diese Art encoded gibt mein Server auf - es sind 55
Sekunden vergangen (ca. 8 davon außerhalb des Encodings).

Es gibt einen einfachen
Workaround: $GLOBALS['TYPO3_CONF_VARS']['SYS']['t3lib_cs_utils'] muss auf
mbstring gesetzt werden. iconv hat nicht funktioniert bei meinem Test
(timeout).

Leider löst das nur einen Teil des Problems, denn die Debug Ausgabe (die
nun funktioniert) invalidiert den JSON Output des Ajax Calls. Hier muss
eindeutig noch ein Bugfix her.

Ein anderer Workaround ist, das Debugging abzudrehen. Dann sollte das mit
dem Spinner funktionieren. Leider werden dabei trotzdem einige Extensions
nicht importiert (es werden immer 50 gleichzeitig in die DB geschrieben und
wenn ein Datensatz kaputt ist, fehlen anschließend die anderen 49)

Gut, wieder etwas gelernt: die Zeichensatz-Operationen müssen auf mbstring
konfiguriert werden damit TYPO3 vernünftig läuft (zumindest bestimmte
Aspekte von TYPO3). Meiner Meinung nach sollte mbstring die Default
Einstellung sein und die anderen Varianten nur als Fallback dienen.
Entweder hart codierte Fallbacks (so dass man gar nichts mehr konfigurieren
braucht - automatische Erkennung) oder mbstring wird Default bei einer
Neuinstallation und per Check im Install Tool (oder Reports) wird überprüft
ob das Modul verfügbar ist - Möglichkeit umzukonfigurieren.


Was muss jetzt noch gemacht wereden, damit das Problem behoben ist?

Patch 1: Fehlermeldung beim Spinner, wenn der TER Import ein Problem hat
(d.h. kein gültiges JSON zurückkommt)
Patch 2: mbstring als Default verankern.
Patch 3: Datenkorrektur der "category 3"
Patch 4: Datenvalidierung bevor das Insert ausgeführt wird  // siehe
http://forge.typo3.org/issues/46115
Patch 5: eventuell encode() performanter neu schreiben // siehe
http://forge.typo3.org/issues/47124

So, ich habe jetzt viel Zeit mit der Fehlersuche verbracht und möchte
freundlich anfragen, ob jemand so nett wäre und die Infos auf englisch
übersetzen und Bug Reports machen würde.

Danke & LG
Markus


More information about the TYPO3-at mailing list