Bug 26556 - Fallback für Widgets bei vielen Werten
Fallback für Widgets bei vielen Werten
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: UMC (Generic)
UCS 3.0
Other Linux
: P2 enhancement (vote)
: UCS 3.1
Assigned To: Dirk Wiesenthal
Alexander Kläser
: interim-3
: 28272 (view as bug list)
Depends on: 28248
Blocks:
  Show dependency treegraph
 
Reported: 2012-03-19 17:47 CET by Sönke Schwardt-Krummrich
Modified: 2017-08-31 17:09 CEST (History)
5 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): UCS Performance
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sönke Schwardt-Krummrich univentionstaff 2012-03-19 17:47:11 CET
Auf einem 3.0-1-System wurden 1000 Benutzer angelegt.
Weiterhin wurde ein LDAPSearch-Syntax-Objekt angelegt, welches die 1000 Benutzer zurückgibt (Display-Attribut: uid; Speicher-Attribut: uidNumber).
Die Syntax wurde in einem Extended Attribute verwendet, welches die Werte als Dropdown anzeigt. Das Laden der 1000 Werte benötigt ca. 20 Sekunden. In der Zeit passiert nichts, wenn versucht wird, das Dropdown aufzuklappen.

In UCS 2.4 haben wir bei mehr als 1000 Ergebnissen z.B. ein Texteingabefeld angezeigt. Ggf. könnte man hier auch eine Exception vom Backend ans Frontend durchreichen, um aus dem DropDown ein Texteingabefeld zu machen.
Comment 1 Alexander Kläser univentionstaff 2012-03-20 10:09:00 CET
Wir hatten einmal einen einfacheren Ansatz überlegt: Über eine UCR-Variable kann generell (wenn es viele Benutzer/Gruppen gibt) die ComboBox ein Texteingabefeld umgewandelt werden.
Comment 2 Stefan Gohmann univentionstaff 2012-07-17 17:09:53 CEST
UCS 3.1 will be the next release.
Comment 3 Alexander Kläser univentionstaff 2012-07-24 11:53:05 CEST
Generell wäre auch als hilfreiche Erweiterung ein Eingabefeld denkbar, in welches
ein Teilstring des Gruppennamens (oder Shares) eingegeben werden kann nach dem
automatisch gesucht wird (oder nach Klick auf einen entsprechenden Button). Bei
einem eindeutigen Match wird der Wert direkt übernommen. Mehrere Treffer
könnten entweder wie eine ausgeklappte ComboBox (oder über ein extra Popup)
angezeigt.
Comment 4 Alexander Kläser univentionstaff 2012-07-26 13:02:45 CEST
Das gleiche Problem tritt auch auf für Benutzer-/Gruppen-ACLs bei Mail-Foldern.
Comment 5 Alexander Kläser univentionstaff 2012-07-26 13:33:57 CEST
(In reply to comment #4)
> Das gleiche Problem tritt auch auf für Benutzer-/Gruppen-ACLs bei Mail-Foldern.

→ siehe Bug 28084
Comment 6 Janis Meybohm univentionstaff 2012-08-22 10:33:34 CEST
Wir haben das Problem auch bei Print-Quota Richtlinien. Hier verzögern die Syntax-Definitionen PrintQuotaGroup, PrintQuotaGroupPerUser und PrintQuotaUser die UMC in großen Umgebungen (bug28272).
Comment 7 Janis Meybohm univentionstaff 2012-08-22 11:59:16 CEST
(In reply to comment #6)
> Wir haben das Problem auch bei Print-Quota Richtlinien. Hier verzögern die
> Syntax-Definitionen PrintQuotaGroup, PrintQuotaGroupPerUser und PrintQuotaUser
> die UMC in großen Umgebungen (bug28272).

Außerdem problematisch beim gleichen Kunden (Ticket#: 2012081421000826):

ThinClient Windows Terminal Server listet einmal alle Windows Clients (dauert beim Kunden ca. 3min), Workaround:
ucr set directory/manager/web/modules/policies/thinclient/properties/windowsTerminalServer/syntax=string

NFS-Freigaben listet alle NFS-Freigaben (dauert beim Kunden ca. 3min). Workaround:
ucr set directory/manager/web/modules/policies/nfsmounts/properties/nfsMounts/syntax=ldapDn

Die Verzögerungen treten immer auf wenn man einen Container öffnet um z.B. eine Richtlinie zu verknüpfen o.ä. (und natürlich beim Aufrufen der Richtlinien selbst, dann aber nicht so gehäuft). Es wäre beim Anzeigen der Policies generell hilfreich wenn solch komplexe Anfragen unterbunden würden da man die Felder in der Übersicht eh nicht editieren kann.
Comment 8 Stefan Gohmann univentionstaff 2012-09-03 07:50:30 CEST
Bug #28291 sollte auch berücksichtigt werden.
Comment 9 Tim Petersen univentionstaff 2012-09-04 16:20:15 CEST
Es gibt noch eine Stelle, wo das problematisch ist und unangenehm an Ticket #2012090421001057 aufgefallen ist.

Druckermodul:
Das Dropdown für den Spoolhost verwendet die Syntax "UCS_Server" -> alle Master, Backup, Slave und Membersysteme
Besonders unschön: Das Dropdown gibt es standardmäßig zweimal == zwei parallele, identische Queries auf alle Rechnerobjekte (vermutlich noch ein seperates Problem, dass sowas nicht gecached wird).
Comment 10 Alexander Kläser univentionstaff 2012-10-05 17:43:17 CEST
Hier noch einmal eine Übersicht der Fälle, bei denen die Probleme auftraten:

Bug 28272:
* policies/print_quota/properties/quotaGroups
* policies/print_quota/properties/quotaGroupsPerUsers
* policies/print_quota/properties/quotaUsers

Bug 28084:
* mail/folder/properties/sharedFolderUserACL
* mail/folder/properties/sharedFolderGroupACL

Ticket 2012092621001186:
* shares/printer/properties/spoolHost

Ticket 2012090521001519:
* shares/share/properties/group
* shares/share/properties/owner

Ticket 2012090421001021:
* shares/share/properties/group
* shares/share/properties/owner

Ticket 2012081421000826:
* policies/thinclient/properties/windowsTerminalServer
* policies/nfsmounts/properties/nfsMounts

Ticket 2012081321001336:
* users/user/properties/primaryGroup

Ticket 2012072421004681:
* mail/folder/properties/sharedFolderUserACL
* mail/folder/properties/sharedFolderGroupACL

Ticket 2012052121002067:
* users/user/properties/homeShare
* users/user/properties/primaryGroup

Mehr habe ich im Bugzilla und OTRS auf Anhieb nicht finden können.
Comment 11 Dirk Wiesenthal univentionstaff 2012-10-08 15:25:03 CEST
Teilweise gefixt in:
  univention-directory-manager-modules 8.0.41-1.902.201210081449
  univention-management-console-module-udm 3.0.17-1.244.201210081509
  univention-management-console-frontend 2.0.87-1.438.201210081500

Neues Widget nur für UDM: Eine erweitere ComboBox. Bevor sie die eigentliche Query abschickt, lässt sie sich erst mal sagen, wieviele Objekte zu erwarten sind. Ist das mehr als ein threshold, wird nicht alles geladen. Standardmäßig ist dieser threshold 1000, kann aber über z.B.

ucr set directory/manager/web/modules/shares/share/properties/owner/threshold=100

anders gesetzt werden.

Die ComboBox sucht in diesem Fall nur noch nach dem, was in der ComboBox eingegeben wird, und zwar in den Standardattributen. Ist ein Wert bereits gesetzt, wird explizit dieser gesucht.

Funktioniert für jede Syntax, die von UDM_Objects erbt und für jede komplexe Syntax (, die aus UDM_Objects besteht). Das erschlägt fast jeden Fall, nur nicht den des nfsMounts. Vielleicht kann man die entsprechende subsyntax von LDAP_Search auf eine UDM_Objects-Syntax konvertieren?
Comment 12 Dirk Wiesenthal univentionstaff 2012-10-09 19:12:14 CEST
In
  univention-management-console-module-udm 3.0.22-1.250.201210091859

öffnet sich nun auch gleich das DropDown nach einer Suche.

Es bleibt noch immer zu klären, wie mit nfsMounts verfahren werden soll. Ein kurzer Blick auf die Syntax gibt mir das Gefühl, dass man das auch über UDM_Objects abbilden kann (und rückwärtskompatibel bleibt). Das muss aber wer entscheiden, der da einen tieferen Einblick hat.

Andernfalls müsste ich Extra-Funktionen für diese eine Syntax schreiben, die mit einiger Sicherheit ziemlich hacky wird (weil da ein Argument z.B. so lautet: attribute = [ 'shares/share: printablename' ])
Comment 13 Stefan Gohmann univentionstaff 2012-10-09 20:02:04 CEST
(In reply to comment #12)
> Es bleibt noch immer zu klären, wie mit nfsMounts verfahren werden soll. Ein
> kurzer Blick auf die Syntax gibt mir das Gefühl, dass man das auch über
> UDM_Objects abbilden kann (und rückwärtskompatibel bleibt). Das muss aber wer
> entscheiden, der da einen tieferen Einblick hat.

Das ist vermutlich ein LDAP Filter, damit nur Shares angezeigt werden, die die NFS Option gesetzt haben. Beim Share kann man auch angeben nur für Samba exportieren.
Kann man das über die Shares abbilden? Alternativ müsste die UDM Syntax entsprechend erweitert werden.
Comment 14 Dirk Wiesenthal univentionstaff 2012-10-10 17:46:40 CEST
Syntax Definition wurde in UDM_Objects konvertiert in
  univention-directory-manager-modules 8.0.50-1.911.201210101742

Damit sind alle im Kommentar 10 aufgelisteten Schwierigkeiten gelöst.

Die ComboBox macht auch all das, was man von ihr erwartet, insofern: FIXED
Comment 15 Stefan Gohmann univentionstaff 2012-10-11 09:21:59 CEST
(In reply to comment #11)
> Teilweise gefixt in:
>   univention-directory-manager-modules 8.0.41-1.902.201210081449
>   univention-management-console-module-udm 3.0.17-1.244.201210081509
>   univention-management-console-frontend 2.0.87-1.438.201210081500
> 
> Neues Widget nur für UDM: Eine erweitere ComboBox. Bevor sie die eigentliche
> Query abschickt, lässt sie sich erst mal sagen, wieviele Objekte zu erwarten
> sind. Ist das mehr als ein threshold, wird nicht alles geladen. Standardmäßig
> ist dieser threshold 1000, kann aber über z.B.
> 
> ucr set
> directory/manager/web/modules/shares/share/properties/owner/threshold=100
> 
> anders gesetzt werden.

Kann ich einen Default für alle Module setzen?
Comment 16 Dirk Wiesenthal univentionstaff 2012-10-11 09:54:12 CEST
(In reply to comment #15)
> (In reply to comment #11)
> > Teilweise gefixt in:
> >   univention-directory-manager-modules 8.0.41-1.902.201210081449
> >   univention-management-console-module-udm 3.0.17-1.244.201210081509
> >   univention-management-console-frontend 2.0.87-1.438.201210081500
> > 
> > Neues Widget nur für UDM: Eine erweitere ComboBox. Bevor sie die eigentliche
> > Query abschickt, lässt sie sich erst mal sagen, wieviele Objekte zu erwarten
> > sind. Ist das mehr als ein threshold, wird nicht alles geladen. Standardmäßig
> > ist dieser threshold 1000, kann aber über z.B.
> > 
> > ucr set
> > directory/manager/web/modules/shares/share/properties/owner/threshold=100
> > 
> > anders gesetzt werden.
> 
> Kann ich einen Default für alle Module setzen?

Nein, der Mechanismus ist derselbe wie der, die Syntax zu überschreiben. "threshold" ist ein neues Attribute von admin.property (von allen, obwohl nur interessant für jene mit syntax < UDM_Objects). Deshalb funktioniert auch das überschreiben.

1000 steht so im Konstruktor einer property. Dort könnte man natürlich UCR fragen. Wird sonst aber auch nie gemacht und man msste nach der Änderung UMC neustarten.
Comment 17 Alexander Kläser univentionstaff 2012-10-11 18:04:54 CEST
In einem MultiInput-Widget wird derzeit pro Eintrag ein UMCP-Requst nach udm/syntax/choices/info geschickt. Im Widget gibt es bereits einen Mechanismus, der Aufrufe nach udm/syntax/choices kapselt, vielleicht kann man das auch irgendwie machen?
Comment 18 Dirk Wiesenthal univentionstaff 2012-10-12 16:26:49 CEST
(In reply to comment #17)
> In einem MultiInput-Widget wird derzeit pro Eintrag ein UMCP-Requst nach
> udm/syntax/choices/info geschickt. Im Widget gibt es bereits einen Mechanismus,
> der Aufrufe nach udm/syntax/choices kapselt, vielleicht kann man das auch
> irgendwie machen?

Das war nicht ganz so einfach. Funktioniert jetzt im Prinzip, aber da der Chache nur 100ms vorgehalten wird, kommt es hin und wieder dazu, dass neu geladen werden muss. Wenn udm/syntax/choices/info neu geladen werden muss, dauert das aber so lange, dass auch udm/syntax/choices selbst neu geladen werden muss.

Es kann also dazu führen, dass jetzt der große Schwall an Daten zweimal geholt werden muss. Da das aber ohnehin nur dann passiert, wenn es verantwortbar wenig Einträge sein werden, kann man dieses Problem vielleicht ignorieren.

Auf jeden Fall:
  univention-management-console-module-udm 3.0.27-1.256.201210121618
  univention-management-console-frontend 2.0.105-1.460.201210121611
Comment 19 Alexander Kläser univentionstaff 2012-10-15 10:57:59 CEST
(In reply to comment #18)
> Das war nicht ganz so einfach. Funktioniert jetzt im Prinzip, aber da der
> Chache nur 100ms vorgehalten wird, kommt es hin und wieder dazu, dass neu
> geladen werden muss. Wenn udm/syntax/choices/info neu geladen werden muss,
> dauert das aber so lange, dass auch udm/syntax/choices selbst neu geladen
> werden muss.
> 
> Es kann also dazu führen, dass jetzt der große Schwall an Daten zweimal geholt
> werden muss. Da das aber ohnehin nur dann passiert, wenn es verantwortbar wenig
> Einträge sein werden, kann man dieses Problem vielleicht ignorieren.

Wie besprochen, die 100ms werden kein Problem sein. I.d.R. kommt der Aufruf 2x durch:
1. Beim initialen Laden des Formulars (→ es wird eine leere Zeile erzeugt)
2. Beim Nachladen der Formularwerte (→ es werden N neue Zeilen hinzugefügt, dabei wird die erste Combobox-Liste geladen und alle nachfolgenden Werte werden gecachet)
Comment 20 Alexander Kläser univentionstaff 2012-10-19 17:00:32 CEST
*** Bug 28272 has been marked as a duplicate of this bug. ***
Comment 21 Alexander Kläser univentionstaff 2012-10-25 18:43:02 CEST
Durch Bug 28248 kann man Fehler jetzt gut aufspüren. Auf einem System mit 50.000 Benutzern (10.200.26.55) konnte ich einen share nicht anlegen. Die zurückgegebene Liste für Verzeichnis-Besitzer war wohl zu groß und ist daher leer, ein entsprechender Traceback kam (bei sizelimit=2000).
Comment 22 Dirk Wiesenthal univentionstaff 2012-10-25 19:03:08 CEST
Warum wurde der Bug REOPENED? Das ist doch gerade Sinn und Zweck der Geschichte. Der 500er kam nicht bei syntax/choices, sondern bereits bei syntax/choices/info. Dort wäre aufgefallen, dass es zu viele werden würden. Die ComboBox hätte sich darum gekümmert, wenn man sie gelassen hätte. Wie soll ich merken, dass es mehr als 2000 sind, wenn Zahlen über 2000 auf einer unteren Ebene alles einstürzen lassen?

Das einzig Problematische hier ist der Fall, dass ein Benutzer in der ComboBox danach nach "*" sucht. Dann wäre ein Fehler auch angemessen. Den kann ich aber nicht ordentlich abfangen, wenn es ein 500er mit Traceback ist.
Ich würde sogar behaupten, das ist nicht weiter wild, dann sieht der Benutzer nämlich, dass es hier nicht weiter geht und sucht nach etwas Aussagekräftigerem.

Wenn ich diesen Fall explizit abfangen soll, brauche ich einen anderen Status-Code!
Comment 23 Alexander Kläser univentionstaff 2012-10-26 10:36:34 CEST
Dirk, ich kam nicht mehr dazu das zu fixen über Bug 28248. Wäre es möglich, dass du die ldapSizeLimit- und die ldapTimeout-Exceptions, die module.search() jetzt wirft (bei zu vielen Ergebnissen) in der read_choices_info-Methode abfängst? Wenn die geworfen werden, dann weiß die Methode ja, dass es zu viele Ergebnisse sind und nicht alle Elemente gelistet werden können.
Comment 24 Dirk Wiesenthal univentionstaff 2012-10-29 13:51:28 CET
univention-management-console-module-udm 3.0.45-1.274.201210291331
univention-directory-manager-modules 8.0.77-1.942.201210291337

syntax/choices/info setzt sich jetzt über das sizelimit hinweg. Der Benutzer bekommt also wieder die Suchmaske ohne anfängliche Fehlermeldung. Der Threshold für properties kann initial nicht mehr höher sein als das Serverlimit (falls man das z.B. auf 500 setzt).

Probleme für UDM:
 * Man kann immer noch nach * suchen und bekäme dann eine sizeLimitExceeded-Nachricht. Aber da das unmittelbar nach der Suche passiert, ist das IMHO völlig in Ordnung, der Benutzer sieht sofort, dass er einfach etwas anderes eingeben muss.
 * Man kann theoretisch den threshold für Properties per UCR überschreiben. Es ist also möglich, den anfänglich auf 1000 gesetzten threshold (ab wann man in der ComboBox suchen muss) später auf 3000 zu erhöhen. Dann ist er ggf höher als das Serverlimit von 2000. D.h. bei insgesamt 2500 Objekten sucht die ComboBox nach allen Werten und wird sich ein sizeLimitExceeded einfangen - die generische Fehlermeldung erscheint. Der Benutzer weiß nicht so recht, wo der Fehler aufgetreten ist. Unschön, aber IMHO gerade noch zu tolerieren, schließlich hat der Admin das System per UCR kaputt konfiguriert, das können wir ohnehin nicht komplett verhindern.
Comment 25 Alexander Kläser univentionstaff 2012-11-05 12:55:02 CET
Ok, Fehler kommen jetzt nicht mehr, das sieht gut aus.

Auf einem System mit 50K Benutzern habe ich einen Share angelegt, das Laden der Detailseite dauert auf meinem System immer noch 1min. Ich weiß nicht ob das ausreicht. Ich bin immer noch dafür, dass die sizelimitException entsprechend abgefangen wird, das sollte das ganze noch einen ganzen Schritt beschleunigen, oder sehe ich das falsch? Zusätzlich hätte man eine globale UCR-Variable, über die man alles steuern kann.
Comment 26 Dirk Wiesenthal univentionstaff 2012-11-05 13:40:36 CET
(In reply to comment #25)
> Ok, Fehler kommen jetzt nicht mehr, das sieht gut aus.
> 
> Auf einem System mit 50K Benutzern habe ich einen Share angelegt, das Laden der
> Detailseite dauert auf meinem System immer noch 1min. Ich weiß nicht ob das
> ausreicht. Ich bin immer noch dafür, dass die sizelimitException entsprechend
> abgefangen wird, das sollte das ganze noch einen ganzen Schritt beschleunigen,
> oder sehe ich das falsch? Zusätzlich hätte man eine globale UCR-Variable, über
> die man alles steuern kann.

Ist in Arbeit
Comment 27 Dirk Wiesenthal univentionstaff 2012-11-05 17:15:53 CET
Fixed in
  univention-management-console-module-udm 3.0.52-1.281.201211051710
Comment 28 Alexander Kläser univentionstaff 2012-11-06 13:50:18 CET
Super! Das Öffnen der Seite braucht jetzt nur noch 4sec :) !

Frage, die folgende Stelle, macht die denn noch Sinn? Wird die Eigenschaft threshold gesetzt?

> if (this._totalSize <= this.threshold) {
>     this._behaveNormally();
> } else {
> ...
Comment 29 Dirk Wiesenthal univentionstaff 2012-11-06 14:19:15 CET
(In reply to comment #28)
> Super! Das Öffnen der Seite braucht jetzt nur noch 4sec :) !
> 
> Frage, die folgende Stelle, macht die denn noch Sinn? Wird die Eigenschaft
> threshold gesetzt?
> 
> > if (this._totalSize <= this.threshold) {
> >     this._behaveNormally();
> > } else {
> > ...

Ja, wird sie. Und zwar immer auf ucr.get('sizelimit'). Aber man kann sie noch immer überschreiben, wenn man mag. Man könnte sie sicher rausnehmen, aber bis jetzt lief alles einigermaßen stabil, so wie es war und ich wollte nicht wieder zu viel anfassen.
Comment 30 Alexander Kläser univentionstaff 2012-11-12 11:24:23 CET
OK, ich habe auf meinem System jetzt 50K Benutzer und 10K Gruppen und das Widget funktioniert soweit gut. Es kommen entsprechende Fehlernachrichten, wenn zu viele Werte gefunden werden, die Detailseiten öffnen sich schnell und gesetzt Werte sind direkt sichtbar.

Insofern → VERIFIED
Comment 31 Stefan Gohmann univentionstaff 2012-12-12 21:08:20 CET
UCS 3.1-0 has been released: 
 http://forum.univention.de/viewtopic.php?f=54&t=2125

If this error occurs again, please use "Clone This Bug".