When using the REST interface provided by CMIS, if you have multiple repositories on your docbroker, you may have noticed a slight delay in the response to your queries. I came across this issue in an environment with multiple repositories (+10), where additionally, every dmadmin user has different password, so not only we had this delay on the responses, we also had a log full of authentication errors.
If the delay was slighty concerning, the errors thrown on the log pointed to something more serious (and most likely a known issue in D2).
With a little bit of debugging and decompiling, we found out the culprit on opencmis-dctm-connector-XXX.jar, in the com.emc.documentum.fs.cmis.impl.cmisoperations.impl.GetRepositoryInfosOperationHandler class. This (surprise surprise) is the same situation that we saw with D2. Check the getRepositoryInfoList method:
private List getRepositoryInfoList(CallContext context, GetRepositoryInfosOperationInputBean inputBean, List repositoryEntries) { List repositoryInfoList = new ArrayList(); for (CmisRepositoryEntryType repositoryEntry : repositoryEntries) { String repositoryId = repositoryEntry.getRepositoryId(); if (CmisAuthenticationManager.INSTANCE.authenticate(context, repositoryId)) { repositoryInfoList.add(getRepositoryInfo(context, inputBean, repositoryEntry)); } } return repositoryInfoList; }
Yes, they’ve done it again. The code tries to authenticate with the provided credentials in evey single repository known to the docbroker. Luckily for us, this method has the requested repository (i.e.: http//cmis…/resources/RepositoryName/…) in the context variable, so you can just do a comparison there and “magically” improve the perfomance (or wait until Opentext releases a “fix”).
Note that this happens in every version I could test from 16.4 to 20.4 😦