Bug 22711 - UMC maximum recursion depth reached
UMC maximum recursion depth reached
Status: CLOSED FIXED
Product: Z_UCS DVS
Classification: Unclassified
Component: General
UCS DVS 1.0
Other Linux
: P2 normal
: UCS DVS 1.0
Assigned To: Sönke Schwardt-Krummrich
Arvid Requate
:
Depends on: 22594 26172
Blocks:
  Show dependency treegraph
 
Reported: 2011-06-10 14:09 CEST by Stefan Gohmann
Modified: 2023-03-25 06:40 CET (History)
4 users (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Stefan Gohmann univentionstaff 2011-06-10 14:09:33 CEST
+++ This bug was initially created as a clone of Bug #22594 +++

Dieser Bug wird auch durch den Code in den DVS-Modulen getriggert und scheint
seine Ursache in einem Kommunikationsproblem zwischen UMC event loop und UVMM
zu haben. Ausgelöst wird der Bug anscheinend unter anderem dadurch, dass ein
Benutzer in einem UMC-Modul eine UVMM-Anfrage auslöst (z.B. Maschine Clonen)
und nebenbei dann in einem zweiten UMC Modul eine weitere UVMM-Anfrage auslöst.

Im konkreten Fall verbraucht der Prozess

root      6354 31754 46 08:42 ?        00:20:00 /usr/bin/python2.4
/usr/sbin/univention-management-console-module -m dvs_templates -s
/var/run/univention-management-console/31754-1306219366585.socket -i web -d 4
-l de_DE.utf8

dann ca. 90% CPU und looped im strace:

--------------------------------------
gettimeofday({1306221660, 138522}, NULL) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
write(2, "2011-05-24 09:21:00,138: notifier: ERROR   : maximum recursion depth
reached\nNone\n"..., 82) = 82
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2309, ...}) = 0
write(8, "2011-05-24 09:21:00,138: notifier: ERROR   : maximum recursion depth
reached\nNone\n"..., 82) = 82
gettimeofday({1306221660, 139368}, NULL) = 0
--------------------------------------

In /var/log/univention/management-console-web.log stehen viele Meldungen
folgender Art:
--------------------------------------
24.05.11 09:28:34  DEBUG_INIT
24.05.11 09:28:34  ADMIN       ( ERROR   ) : AJAX: EXCEPTION: [Errno 2] No such
file or directory:
'/tmp/webui/ffe604e17938c464caefb607da9b3c84/socket_filename'
24.05.11 09:28:34  ADMIN       ( ERROR   ) : AJAX: DATA = FieldStorage(None,
None, [MiniFieldStorage('session_id', 'ffe604e17938c464caefb607da9b3c84'),
MiniFieldStorage('umcpcmd', 'dvs/instance/state'), 
MiniFieldStorage('instance',
'qemu://xen13.dvs10.local/system#9902f9b7-2951-44a9-9e9e-1155e22e94f5'),
MiniFieldStorage('dojo.preventCache', '1306222113769')])
24.05.11 09:28:34  ADMIN       ( ERROR   ) : Traceback (most recent call last):
  File "/var/www/univention-management-console/ajax.py", line 87, in main
    fn = open('/tmp/webui/%s/socket_filename' % session_id).read()
IOError: [Errno 2] No such file or directory:
'/tmp/webui/ffe604e17938c464caefb607da9b3c84/socket_filename'
--------------------------------------

Endresultat ist, dass die Logmeldungen die Platte fluten.

Vermutlich ist das das gleiche Problem wie der Ursprungsbug:
+++ This bug was initially created as a clone of Bug #21616 +++
Comment 1 Stefan Gohmann univentionstaff 2011-06-10 14:09:50 CEST
Aus meiner Sicht blockt der Bug das Release.
Comment 2 Andreas Büsching univentionstaff 2011-06-10 16:11:19 CEST
Die maximale Rekursionstiefe wurde für den Modulprozess erhöht auf 50
Comment 3 Sönke Schwardt-Krummrich univentionstaff 2011-06-10 18:13:18 CEST
In UMC wurde der RefreshFrame um einen optionalen, booleschen Parameter "no_concurrency" erweitert, der den Default "False" verwendet.

no_concurrency=False:
Der Javascript-Timer feuert im angegebenen Intervall und setzt Ajax-Requests ab, ungeachtet dessen, ob die Antwort für diese Requests bereits eingegangen ist.

no_concurrency=True:
NACH dem Eingang der Antwort wird ein neuer Timeout gestartet. Sollte eine Antwort ausbleiben, finden keine Refreshs mehr statt. Das regelmäßige Intervall zwischen den Anfragen setzt sich dabei aus 
a) dem angegebenem Intervall und
b) der Zeit zwischen Anfrage und Antwort zusammen.

univention-dvs-sessionbroker wurde entsprechend um den Parameter (no_concurrency=True) erweitert.
Comment 4 Arvid Requate univentionstaff 2011-06-14 18:14:59 CEST
Verified. Das Maximum Recursion Level liess sich nicht mehr reproduzieren.