You may have realized that D2 takes some time to load the login screen when you want to log in. The usual behaviour is that after typing D2’s url in your browser, you’ll see something that looks like a loading screen (after d2 spin wheel):
and after a few moments the login screen in shown.
This behaviour is not something Documentum users are used to when using Webtop so, why this happens? Well, by now you’ve probably realized that D2 does not show the repository name, but the repository description. And in a questionable design decision, this processing is done every time the login screen is loaded (=every time a user access).
This happens on C6-Common\com\emc\common\dctm\objects\DfDocbaseMapEx class and the effect is quite clear as it is shown in this log trace:
c.e.c.d.o.DfDocbaseMapEx[] : Load docbases from docbrocker 8.925s
Yes, here we have users waiting for 9 seconds before the login screen is shown, and this happens every single time they try to access D2.
So, what wizardry is behind this odd behaviour? Let’s check it:
public DfDocbaseMapEx(String attrName, String direction) throws DfException {
StopWatch stopWatch = new StopWatch(true);
this.m_docbases = new TreeSet(new DfDocbaseComparator(this, attrName, direction));
IDfClient client = DfClient.getLocalClient();
IDfDocbaseMap docbaseMap = client.getDocbaseMap();
int count = docbaseMap.getDocbaseCount();
for (int i = 0; i < count; i++) {
try {
String server;
IDfTypedObject serverMap = docbaseMap.getServerMap(i);
String name = docbaseMap.getDocbaseName(i);
String currentServer = serverMap.getString("i_host_name");
if (serverMap.findString("r_host_name", currentServer) == -1) {
server = serverMap.getRepeatingString("r_host_name", 0);
} else {
server = currentServer;
}
String description = docbaseMap.getDocbaseDescription(i);
String version = docbaseMap.getServerVersion(i);
DfDocbaseEx docbase = new DfDocbaseEx(this, name, server, description, version);
this.m_docbases.add(docbase);
}
catch (DfException e) {
LOG.error("{}", e);
}
}
LOG.debug("Load docbases from docbrocker {}", stopWatch);
}
Well, there is no much mistery here, getting an IDfTypedObject for each repository registered in your docbroker, every single time a user logs in… it may not be very noticeable with one repository, but try this code with +10 repositories… You can add logging inside the loop and check how much time takes for each repository…
This questionable design decision, makes you also wonder about other behaviors/configurations from D2:
- Repository filter option: This acts as a simple cosmetic filter, as you can see that there’s no filtering when the list is populated. This means that you can have one repository listed, but you still have to wait for all the repositories to be “processed”
- If you have enabled autologin/default repository, you’ll face the same situation, users will be logged in directly… after several seconds waiting for the login screen (that they won’t see) to finish loading.
So, what can we do to fix it (besides waiting for OT to fix it)?. Well, as you can see the code is no rocket science, so there are a bunch of possibilities:
- Don’t process every single time the repository list (basically check if this.m_docbases == null or size == 0)
- Load settings.properties and actually apply the repository filter inside the for loop
- Process autologin setting as in #2
- Add an option in D2FS/settings.properties to use repository name and forget about description
- Don’t instantiate the servermap and use i_host_name from docbaseMap
By implementing any of these approaches you’ll get something like this when loading the repository list:
Standard D2:
repo1:16.4.0100.0153 Linux64.Oracle -> 1.087s
repo2:16.4.0100.0153 Linux64.Oracle -> 1.093s
repo3:16.4.0100.0153 Linux64.Oracle -> 1.098s
repo4:16.4.0100.0153 Linux64.Oracle -> 1.108s
Total: 4.389s
Modified D2:
repo1:16.4.0100.0153 Linux64.Oracle -> 0.000s
repo2:16.4.0100.0153 Linux64.Oracle -> 0.000s
repo3:16.4.0100.0153 Linux64.Oracle -> 0.000s
repo4:16.4.0100.0153 Linux64.Oracle -> 0.000s
Total: 0.002s
And users will be much happier than before 😀