I finally squashed this expression pool bug. The code ensuring that old empty pool directories got removed wasn’t wired in the newest contentIterator implementation.
Iterating over the content of the expression pool is necessary for purge purposes or simply when an engine is restarting, to resync processes using scheduling capabilities (cron, when, sleep expressions mainly).
The 1.6.x FileExpressionStore implementation of its contentIterator was building a list of all expressions and then iterating over it. This proved problematic in production systems with lots of expressions. So the 1.7.x implementation flatly iterates, it doesn’t build a whole list.
This implementation shall be used as well for the upcoming final JCR (JSR-170) OpenWFE persistence system.
Unfortunately, the 1.6.x implementation had code for dealing with old empty pool directories. I forgot to wire back in that code in the current 1.7.0pre line and time after time, a running instance of the engine accumulated lots of empty directories (the cron example library was filling the pool with its empty directories…).
OpenWFE 1.7.0pre7 fixes that.