I asked some of these questions in IRC and tirelli asked me to post here in the dev list.
 
We are hoping that drools will have this functionality sometime in the future.  Our target production date is May.  These questions are related to the Job/Workers problem that Steve Shabino has discussed with the dev team before.
 
Start w/ steady state.  Facts loaded and rules fired.  We have truth as of time1.
Thread 1 asserts new/updated facts and calls fireAllRules.  fireAllRules takes about 20 seconds to run.
Thread 2 calls getQueryResults before fireAllRules completes.  The returned QueryResults should be correct and consistent with truth as of time1.  Call to getQueryResults should NOT block until fireAllRules completes.
Thread 1 call to fireAllRules finishes.  We now have truth as of time2.
 
<tirelli> just as a quick comment: from our perspective, the support to concurrent query calls would return a consistent state, but not exactly what you called truth at time1
<tirelli> since the engine would be firing rules all the time
 
We do have a workaround if our desired behavior isn't "correct."  The queries we'll need to run are well defined and a relatively small number.  Speaking in the Job/Worker realm, we'll need to query for the TopWorkers for all Jobs.  We could keep a map of Job to TopWorkers and update the map every time fireAllRules completes and service all TopWorker by Job queries from this cache.
 
Maybe the bigger question, but maybe not appropriate for the dev list, is our concern about query results possibly changing while fireAllRules runs valid?  Our concern is that we could get different results depending on when we perform the query.  For example, if we query for TopWorkers for a Job against "truth @ time1" and "truth @ time2" our results should be well defined.  However if we perform the same query while fireAllRules is running we might get results that are different from both those other results.  Is this a valid concern?
 
Thanks for your time.
 
Eric