Bug 38190 - Opening a user is too slow
Opening a user is too slow
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: UMC - Users
UCS 4.0
Other Linux
: P5 normal (vote)
: UCS 4.0-3-errata
Assigned To: Alexander Kramer
Alexander Kläser
:
Depends on:
Blocks: 39777 39779 39833 39863
  Show dependency treegraph
 
Reported: 2015-04-02 05:49 CEST by Stefan Gohmann
Modified: 2016-02-12 16:17 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
Performance when opening a user (122.68 KB, image/png)
2015-04-02 10:04 CEST, Alexander Kläser
Details
Patch: 2015-08-12 Opening a user is too slow (8.45 KB, patch)
2015-08-12 10:53 CEST, Alexander Kramer
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Stefan Gohmann univentionstaff 2015-04-02 05:49:36 CEST
If I open a user on demo.univention.de, it took between 2 to 4 seconds. A user should be opened in less than a second.
Comment 1 Alexander Kläser univentionstaff 2015-04-02 10:04:50 CEST
Created attachment 6796 [details]
Performance when opening a user

On my system:
  FF 1.9s
  Chromium: 1.6s

On possibility for speeding up this process could be to see how to trigger widgets to load their data earlier in order to bundle these commands as early as possible.
Comment 2 Alexander Kläser univentionstaff 2015-07-15 15:40:30 CEST
Another option would be to pre-render the detail page (as it is currently rendered on the fly).
Comment 3 Florian Best univentionstaff 2015-07-15 16:16:01 CEST
(In reply to Alexander Kläser from comment #2)
> Another option would be to pre-render the detail page (as it is currently
> rendered on the fly).
Can we render it before having the meta data from the server?
Comment 4 Alexander Kläser univentionstaff 2015-07-15 16:53:54 CEST
(In reply to Florian Best from comment #3)
> (In reply to Alexander Kläser from comment #2)
> > Another option would be to pre-render the detail page (as it is currently
> > rendered on the fly).
> Can we render it before having the meta data from the server?

This should be fine. We looked into the limiting factor of the opening process and concluded that the largest factor is the rendering of the page. Requests could be cached, but they would not influence the final speed very much, as they can be parallelized with the GET request that loads the full user data. Thus the page should be pre-rendered. To avoid problems, the page could be deleted and pre-rendered again when closing the detail page. However, re-using the same detail page instance for any user would avoid to slow down the interface when closing a detail page.
Comment 5 Alexander Kläser univentionstaff 2015-07-24 11:49:12 CEST
(In reply to Alexander Kläser from comment #4)
> [...]
> Thus the page should be pre-rendered. To avoid problems, the page
> could be deleted and pre-rendered again when closing the detail page.

@Alex+Drees: As discussed, could the both of you please have a look at this. I suggest to start with the above cited approach. This should be fine as a first step :) . As page rendering is performed in a asynchronous way, it should be fine to do when opening a UDM module.

A strategy for multiple available UDM types could be as follows. Do no pre-render a detail page (or optionally pre-render a detail page of the UDM type that is used the most), but render the page on the fly as requested. After closing the detail page re-render a page for the same type again.

This strategy should work for opening objects as well as creating new objects.
Comment 6 Alexander Kramer univentionstaff 2015-08-12 10:53:39 CEST
Created attachment 7100 [details]
Patch: 2015-08-12 Opening a user is too slow

With the help of Alex and Florian I am able to preload the Detailpage for 'users/user'. This cuts the load time down to 200ms or less.

But for that I had to implement a lot of changes. So it is necessary to test the whole udm module.

Currently I experience the following problem. If I close the wizard for creating a user/computer by clicking the cancel button - I'll get this js error:

TypeError {stack: (...), message: "Cannot read property 'className' of null"}
 "TypeError: Cannot read property 'className' 

FYI: This will only appear if you close the wizard by clicking the cancel button. Using the x icon works fine
Comment 7 Alexander Kramer univentionstaff 2015-08-26 09:26:36 CEST
(In reply to Alexander Kramer from comment #6)
> Created attachment 7100 [details]
> Patch: 2015-08-12 Opening a user is too slow
> 
> With the help of Alex and Florian I am able to preload the Detailpage for
> 'users/user'. This cuts the load time down to 200ms or less.
> 
> But for that I had to implement a lot of changes. So it is necessary to test
> the whole udm module.
> 
> Currently I experience the following problem. If I close the wizard for
> creating a user/computer by clicking the cancel button - I'll get this js
> error:
> 
> TypeError {stack: (...), message: "Cannot read property 'className' of null"}
>  "TypeError: Cannot read property 'className' 
> 
> FYI: This will only appear if you close the wizard by clicking the cancel
> button. Using the x icon works fine

I tracked the error down to the following line inside udm/NewObjectDialog.js:

createWizard.on('Cancel', lang.hitch(this, function() {
    topic.publish('/umc/actions', 'udm', this.moduleFlavor, 'create-wizard',
    'cancel');
    this.destroyRecursive();
    this.hide().then(function() {
-->        detailsValues.detailPage.onCloseTab();
    });
}));

I tried to dig deeper inside detailsValues.detailPage.onCloseTab() but sadly
I did not found something helpful. So I changed this.hide() to this.destroyRecursiv(). This solved the error.
Comment 8 Alexander Kramer univentionstaff 2015-08-26 11:09:51 CEST
> I tried to dig deeper inside detailsValues.detailPage.onCloseTab() but sadly
> I did not found something helpful. So I changed this.hide() to
> this.destroyRecursiv(). This solved the error.

Simple reason:

Inside udm.js closeDetailPage was called accidentally twice if one pressed the cancel button of the newDetailDialog. The error above appears during the second time, because the first run already destroyed the detailPage. I removed the second call.
Comment 9 Alexander Kramer univentionstaff 2015-08-26 14:23:16 CEST
Also added an event handler if newObjectDialog is canceld, to preload the Detailpage
Comment 10 Alexander Kramer univentionstaff 2015-08-27 10:58:18 CEST
UCS4.0-3
r 63275

Package: univention-management-console-module-udm
Version: 5.1.25-87.605.201508271026
User: akramer
Branch: ucs_4.0-0
Scope: errata4.0-3

r 63277 / r 63278 yaml file



UCS4.1-0
r 63276 

Successful build
Package: univention-management-console-module-udm
Version: 6.0.2-5.606.201508271045
User: akramer
Branch: ucs_4.1-0
Scope:
Comment 11 Florian Best univentionstaff 2015-10-14 19:42:42 CEST
It's not possible to open a object from remote anymore (e.g. opening the UCS@school class from the UCS@school wizards)

TypeError: Cannot set property 'isFirstChild' of null
    at g._showChild (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:665:355)
    at g._transition (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:664:247)
    at g.selectChild (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:663:505)
    at l.selectChild (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:249:153)
    at declare._setDetailPage (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/umc/modules/udm.js:1632:9)
    at declare.createDetailPage (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/umc/modules/udm.js:1641:10)
    at b._hitchArgs (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:818:321)
    at e (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:764:337)
    at h (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:764:263)
    at f.resolve (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:766:352) "TypeError: Cannot set property 'isFirstChild' of null
    at g._showChild (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:665:355)
    at g._transition (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:664:247)
    at g.selectChild (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:663:505)
    at l.selectChild (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:249:153)
    at declare._setDetailPage (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/umc/modules/udm.js:1632:9)
    at declare.createDetailPage (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/umc/modules/udm.js:1641:10)
    at b._hitchArgs (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:818:321)
    at e (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:764:337)
    at h (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:764:263)
    at f.resolve (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:766:352)
    ----------------------------------------
    rejected at a (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:765:243)
    at e (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:764:496)
    at h (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:764:263)
    at f.resolve (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:766:352)
    at a (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:765:217)
    at e (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:764:477)
    at h (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:764:263)
    at f.resolve (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:766:352)
    at a (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:765:217)
    at e (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:764:477)
    ----------------------------------------
Error
    at f.then.b.then [as then] (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:767:143)
    at declare.buildRendering (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/umc/modules/udm.js:289:30)
    at c.create (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:1333:125)
    at c.postscript (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:1332:99)
    at new <anonymous> (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:1158:192)
    at null.<anonymous> (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:1263:244)
    at b.hitch (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:819:130)
    at e (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:764:337)
    at f.then.b.then [as then] (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:767:198)
    at l.openModule (http://ucs-2759.mydomain.intranet/univention-management-console/js_$20150210074722$/dojo/dojo.js:1261:207)"
Comment 12 Alexander Kramer univentionstaff 2015-10-23 11:04:42 CEST
(In reply to Florian Best from comment #11)
> It's not possible to open a object from remote anymore (e.g. opening the
> UCS@school class from the UCS@school wizards)
> 
> TypeError: Cannot set property 'isFirstChild' of null


How to reproduce:

0.) Preconditions: You need an UCS@School 4.1-0 Single Master with at least one class

1.) Logout from UMC
2.) Login
3.) Choose 'School administration' / 'Classes (schools)'
4.) Pick one random class
5.) Click the button 'Advanced Settings'

Now loading the LDAP DetailPage should fail with the error above.

I tracked it down to: udm.js / _setDetailPage / line 1632: this.selectChild(this._searchPage)

this._searchPage is null, so you'll get TypeError: Cannot set property 'isFirstChild' of null

The strange thing about this bug is, that it only occurs if you initially logged in. You can just close the failed Page, open it again and everything works fine.
Comment 13 Alexander Kramer univentionstaff 2015-10-23 11:40:02 CEST
Bug #38190: Check if _searchPage exists before selecting it

UCS 4.0-3 / r64794
r64795 yaml file

Package: univention-management-console-module-udm
Version: 5.1.25-91.617.201510231123
Branch: ucs_4.0-0
Scope: errata4.0-3


UCS 4.1-0 / r64796

Successful build
Package: univention-management-console-module-udm
Version: 6.0.6-2.618.201510231135
User: akramer
Branch: ucs_4.1-0
Comment 14 Florian Best univentionstaff 2015-11-02 11:29:41 CET
When trying to create a group the following traceback occurs:

TypeError: Cannot read property 'childNodes' of null
    at Object.place (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:7024:20)
    at declare.addChild (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:22071:17)
    at declare._renderForm (https://master30.saml.dev/univention-management-console/js_$20152810082120$/umc/modules/udm/NewObjectDialog.js:185:9)
    at null.<anonymous> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/umc/modules/udm/NewObjectDialog.js:116:11)
    at lang.hitch (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:37638:55)
    at signalListener (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:35784:21)
    at signalWaiting (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:35775:4)
    at Deferred.resolve (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:35939:5)
    at https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:88893:16
    at signalListener (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:35784:21) "TypeError: Cannot read property 'childNodes' of null
    at Object.place (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:7024:20)
    at declare.addChild (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:22071:17)
    at declare._renderForm (https://master30.saml.dev/univention-management-console/js_$20152810082120$/umc/modules/udm/NewObjectDialog.js:185:9)
    at null.<anonymous> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/umc/modules/udm/NewObjectDialog.js:116:11)
    at lang.hitch (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:37638:55)
    at signalListener (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:35784:21)
    at signalWaiting (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:35775:4)
    at Deferred.resolve (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:35939:5)
    at https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:88893:16
    at signalListener (https://master30.saml.dev/univention-management-console/js_$20152810082120$/dojo/dojo.js.uncompressed.js:35784:21)
Comment 15 Alexander Kläser univentionstaff 2015-11-03 14:28:47 CET
(In reply to Florian Best from comment #14)
> When trying to create a group the following traceback occurs:
> 
> TypeError: Cannot read property 'childNodes' of null
>     at Object.place
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:7024:20)
>     at declare.addChild
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:22071:17)
>     at declare._renderForm
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> umc/modules/udm/NewObjectDialog.js:185:9)
>     at null.<anonymous>
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> umc/modules/udm/NewObjectDialog.js:116:11)
>     at lang.hitch
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:37638:55)
>     at signalListener
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:35784:21)
>     at signalWaiting
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:35775:4)
>     at Deferred.resolve
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:35939:5)
>     at
> https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:88893:16
>     at signalListener
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:35784:21) "TypeError: Cannot read property
> 'childNodes' of null
>     at Object.place
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:7024:20)
>     at declare.addChild
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:22071:17)
>     at declare._renderForm
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> umc/modules/udm/NewObjectDialog.js:185:9)
>     at null.<anonymous>
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> umc/modules/udm/NewObjectDialog.js:116:11)
>     at lang.hitch
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:37638:55)
>     at signalListener
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:35784:21)
>     at signalWaiting
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:35775:4)
>     at Deferred.resolve
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:35939:5)
>     at
> https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:88893:16
>     at signalListener
> (https://master30.saml.dev/univention-management-console/js_$20152810082120$/
> dojo/dojo.js.uncompressed.js:35784:21)

This is a problem that has been introduced along with Bug 38834. The following lines are executed at the bottom of udm/NewObjectDialog/buildRendering():

  this.canContinue.then(createWizard);
  this.canContinue.then(undefined, lang.hitch(this._preWizard, 'selectCorrectChild'));
  this._notificationText = new NotificationText();
  this.own(this._notificationText);
  this.addChild(this._notificationText, 0);

As soon as "this.canContinue.then(createWizard)" is executed, destroyRecursive() is called as the NewObjectDialog does not need to be shown. As consequence, the last this.addChild() throws an exception since the dialog has already been destroyed (and thus this.domNode/this.containerNode do not exist).

Ergo the traceback did not really crash something. I moved the last three lines to the top of the buildRendering() method.

univention-management-console-module-udm (6.0.6-3):
r65132 | Bug #38190: adjusted order of calls in NewObjectDialog:buildRendering()

univention-management-console-module-udm (5.1.25-92):
r65134 | Bug #38190: adjusted order of calls in NewObjectDialog:buildRendering()

2015-06-23-univention-management-console-module-udm.yaml:
r65135 | Bug #38190: adjusted package version in YAML file
Comment 16 Alexander Kläser univentionstaff 2015-11-03 15:57:46 CET
I needed another adjustment, as the dialog for creating a user would stand still  after entering the password and hitting "create" due to a JS error.

univention-management-console-module-udm (6.0.6-4):
r65139 | Bug #38190: re-adjust order in NewObjectDialog:_renderForm()

univention-management-console-module-udm (5.1.25-93):
r65140 | Bug #38190: re-adjust order in NewObjectDialog:_renderForm()

2015-06-23-univention-management-console-module-udm.yaml:
r65142 | Bug #38190: adjusted package version in YAML file
Comment 17 Alexander Kläser univentionstaff 2015-11-04 12:46:45 CET
AFAIS, the changes work very well. I have just two points that can be addressed at a later point in time:

* It would be great to preload detail pages for other object types (e.g., groups, 
  maybe computers?), as well. 

* In the LDAP navigation module, when adding a new group to the LDAP root, I 
  received the following traceback (which does not seem to do any harm):

> TypeError: Cannot read property 'setDetails' of null(…) "TypeError: Cannot read property 'setDetails' of null
>     at null.<anonymous> (http://172.17.0.2/univention-management-console/js_$20150411115441$/umc/modules/udm.js:1663:27)
>     at lang.hitch (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:40545:55)
>     at signalListener (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37569:21)
>     at signalWaiting (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37560:4)
>     at canceler.resolve (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37724:5)
>     at http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:95770:16
>     at signalListener (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37569:21)
>     at signalWaiting (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37560:4)
>     at canceler.resolve (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37724:5)
>     at signalListener (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37569:21)
>     ----------------------------------------
>     rejected at signalDeferred (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37616:15)
>     at signalListener (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37587:5)
>     at signalWaiting (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37560:4)
>     at canceler.resolve (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37724:5)
>     at http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:95770:16
>     at signalListener (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37569:21)
>     at signalWaiting (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37560:4)
>     at canceler.resolve (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37724:5)
>     at signalListener (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37569:21)
>     at signalWaiting (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37560:4)
>     ----------------------------------------
> Error
>     at Promise.canceler.then.promise.then [as then] (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37784:24)
>     at declare.createDetailPage (http://172.17.0.2/univention-management-console/js_$20150411115441$/umc/modules/udm.js:1655:28)
>     at null.<anonymous> (http://172.17.0.2/univention-management-console/js_$20150411115441$/umc/modules/udm.js:1561:10)
>     at lang.hitch (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:40545:55)
>     at target.(anonymous function).dispatcher [as onFirstPageFinished] (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:73846:38)
>     at declare.buildCreateWizard (http://172.17.0.2/univention-management-console/js_$20150411115441$/umc/modules/udm/NewObjectDialog.js:198:9)
>     at null.<anonymous> (http://172.17.0.2/univention-management-console/js_$20150411115441$/umc/modules/udm/NewObjectDialog.js:178:11)
>     at lang.hitch (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:40545:55)
>     at signalListener (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37569:21)
>     at canceler.then.promise.then [as then] (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js.uncompressed.js:37790:5)"logError @ dojo.js.uncompressed.js:80558(anonymous function) @ dojo.js.uncompressed.js:80605array.filter @ dojo.js.uncompressed.js:2718logRejected @ dojo.js.uncompressed.js:80600
Comment 18 Alexander Kläser univentionstaff 2015-11-04 14:28:39 CET
Changes: OK
YAML file: OK
Merge to 4.1-0: OK

→ VERIFIED
Comment 19 Alexander Kläser univentionstaff 2015-11-04 14:37:20 CET
Another one without real side effects to the UI. When closing the "Add a new user" dialog immediately, the following traceback occurs on the console log:

> TypeError: Cannot set property 'value' of undefined(…) "TypeError: Cannot set property 'value' of undefined
>     at l._setDisplayedValueAttr (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1329:392)
>     at l._setValueAttr (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1328:169)
>     at e (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1157:92)
>     at l._setValueAttr (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1415:465)
>     at e (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1157:92)
>     at declare._setValueAttr (http://172.17.0.2/univention-management-console/js_$20150411115441$/umc/modules/udm/ComboBox.js:106:9)
>     at c.set (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1339:329)
>     at l._setCustomValue (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1416:274)
>     at null.<anonymous> (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1420:315)
>     at b.hitch (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:820:23)
>     ----------------------------------------
>     rejected at a (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:767:243)
>     at d (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:766:496)
>     at h (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:766:263)
>     at a.resolve (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:768:352)
>     at a (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:767:217)
>     at d (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:766:477)
>     at h (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:766:263)
>     at a.resolve (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:768:352)
>     at a (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:767:217)
>     at d (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:766:477)
>     ----------------------------------------
> Error
>     at a.then.b.then [as then] (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:769:143)
>     at http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:290:239
>     at l._loadValues (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1420:211)
>     at e (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1157:92)
>     at declare._loadValues (http://172.17.0.2/univention-management-console/js_$20150411115441$/umc/modules/udm/ComboBox.js:75:10)
>     at l.startup (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1414:474)
>     at http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1336:46
>     at Object.b.forEach (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:36:419)
>     at c.startup (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1335:471)
>     at e (http://172.17.0.2/univention-management-console/js_$20150411115441$/dojo/dojo.js:1157:92)
Comment 20 Alexander Kläser univentionstaff 2015-11-04 14:40:06 CET
For the records... I have checked various use cases that could have been affected by the changes made:

* Cancel and/or close a dialog (at different dialog pages)
* Open various object types and create new instances
* Verify that fields are correctly disabled (e.g., UIDs can be edited when 
  creating a user, however they cannot when opening a user)
* Open objects in a new module tab directly
* Different browsers
* Removal of objects
* Creating/opening objects in the LDAP navigation module
Comment 21 Alexander Kläser univentionstaff 2015-11-04 14:55:50 CET
(In reply to Alexander Kläser from comment #17)
> AFAIS, the changes work very well. I have just two points that can be
> addressed at a later point in time:
> 
> * It would be great to preload detail pages for other object types (e.g.,
> groups, 
>   maybe computers?), as well. Bug 39777
Comment 22 Janek Walkenhorst univentionstaff 2015-11-04 17:27:43 CET
<http://errata.software-univention.de/ucs/4.0/354.html>