Hope on the NDPS front

We just received a revised NDPSM module from Novell. This is the latest hope in the fight against printers that suddenly stop printing. Novell had to rewrite how printer pooling was done, since apparently the first incarnation of it was sub-optimal in a number of ways.

The NDPSM.NLM that we had before, dated mid-February came in at 356KB, and had this info:
Version 3.01.14 Wednesday, February 16, 2005
Copyright (c) 1989-2005 Novell Inc. All rights reserved.
NDPS Manager

The NDPSM.NLM that we just received comes in at 1050KB, and has this info:
Version 3.01.14 Wednesday, March 30, 2005
Copyright (c) 1989-2005 Novell Inc. All rights reserved.
NDPS Manager (Debug)

The extra size probably is partially due to the debug symbols included in it. But it is very encouraging. I spoke with the developer who was working on this while I was at Brainshare last week. He gave me a good idea why the old code was not the best when it comes to handling printer pooling.

We already knew that the problem was because the scheduler was attempting to print two things at the same time. I had proof of this on the wire, and the developer suspected it from the code. If it prints that fast, a timing condition kicks in that in involves PCOUNTER in some way to cause the scheduler to forget it has a job on deck and just sit there forever.

The NDPS pooling code before was written in a fairly unmodular way. If I understand it right, a 'pool' bit was set somewhere, and all throughout the scheduler code you got assertions like this one:
if isPool then {
[do pool stuff]
} else {
[do non-pool stuff]
}
Which sucks from a code-path point of view. The revised code introduces a layer of abstraction into the mix. The scheduler doesn't do much different if it is a pool, the servicing agents know they're in a pool and avoid conflicts while they contest for jobs to service. Or rather, the scheduler offers up jobs for servicing by attached printer-agents, and the agents line up to service them. This can scale pretty well.

One of the trivial improvements included in this new NDPSM is the ability to clear operator-holds from jobs while in the NRM NDPS Manager portal. Previously, only user-holds could be cleared. I mentioned this to the developer last week, and I'm happy to see it in code today. That's spiffy.