Possible bug with triggered NSFDBHOOK events in DOTS (on Windows 2019)
by Richard Pajerski
Posted on Friday December 23, 2022 at 01:13PM in Technology
[February 2023 update: DOTS follow-up, SPR for applet bug]
I recently took advantage of DOTS being back in the Domino 12 server, to replace a Java agent with a scheduled DOTS tasklet and have been pleased with the results. Using tasklets is generally going to be far more efficient than using Java agents in Domino since a JVM is loaded once with the DOTS server task and remains resident in memory until the DOTS task is stopped whereas with each agent invocation a new instance of the JVM is started. There are other benefits to using tasklets over Java agents which I may take up in a future post but for the moment, I've run across an issue on a Windows 2019 server installation.
Although the deployment above uses a scheduled tasklet, I was originally hoping to use the triggered NSFDBHOOK events in order to capture some document saves in (more/less) real time. But while testing on Windows 2019, I noticed that the HOOK_EVENT_NOTE_UPDATE and HOOK_EVENT_NOTE_OPEN events were not being emitted at all or only very infrequently. I had earlier tested the same tasklet on a Domino installation on a Windows 8.1 client and the events fired more/less as expected. Aside from the OS difference, everything about the Domino installations was identical -- with one exception: the Domino program installation directory on the Windows client had no spaces but the Windows server was installed in the default C:\Program<space>Files\HCL directory. Sure enough, after reinstalling Domino on the Windows 2019 server without the space (specifically in C:\Domino), events began firing again. HCL has also reproduced this and may open an SPR.
In the meantime, after working a bit more with those NSF hook events, my impression is that they are not altogether reliable -- or at least, there doesn't appear to be a one-to-one correlation with each document save/open and a DOTS-generated event. Some document saves/opens never fire an event. The source code for the older versions of DOTS is on openntf.org here: https://stash.openntf.org/projects/DOTS/repos/dots/browse/sources but I'm not sure if this is the same code being shipped with the Domino 12 server (though I assume it's pretty close).
If I'm looking in the right place, lines 79 and 80 of the postMessage method (https://stash.openntf.org/projects/DOTS/repos/dots/browse/sources/dotsNSFHook.cpp), have:
STATUS error = MQOpen(queueName, 0, &dotsmq);
if ( error == NOERROR ){
where DOTS presumably intercepts the necessary events from an internal Domino queue. But what if there *are* errors here? Will our DOTS tasklets ever know about them? Maybe errors are unlikely here but perhaps this is the source of some missed events.