I think I wasn't quite clear in my last email, so let me try to reformulate it:<br><br>I also gave it a try to try to do what you suggested here (<a href="http://blog.athico.com/2010/09/lazily-enabled-truth-maintenace.html" target="_blank">http://blog.athico.com/2010/09/lazily-enabled-truth-maintenace.html</a>), Mark, and couldn't make it work due to the following situation:<br>
<br>1) Current code seems to rely on the equality map to know that a logical insert (insertLogical) for an object that has already been regularly inserted (insert) should be ignored;<br><br>2) If I apply the modifications that you suggested, from what I understood, things would start to be put in the equality map only when a logical insert is issued;<br>
<br>*Problem*: How would I handle the situation described in item 1, if I don't have anything in the equality map at the moment a logical insert comes in and I have to "lazily activate" TMS?<br><br>--<br><br>
Moreover, I'm willing to attempt to implement the left and right un-linking and tried to start with this easier task to start to get familiar with drools-core. I already read the article you linked and your article. Would you have any document with an overview of the way drools implements rete?<br>
<br>Thanks in advance!<br><br>Cheers,<br>Leo.<br><br><br><br><br><br><br><div class="gmail_quote">On Sat, Sep 18, 2010 at 3:49 AM, Leonardo Gomes <span dir="ltr"><<a href="mailto:leonardo.f.gomes@gmail.com" target="_blank">leonardo.f.gomes@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote">
if you look at the AbstractWorkingMemory insert method you'll see
one argument is whether it's a logical insertion or not. You'll also
see it check the global maintainTMS configuration and also retrieve
the ObjectTypeConf. So between those things someone should be able
to get it working.<br></blockquote></div><div><br>Today, it enters a block where it operates on the equality map and also creates a default handle based on that TMS global option and *regardless* of whether it's a logical insert.<br>
<br>If I'm *not* putting things in the equality map for regular inserts, when a logical insert comes in, but there were already stated inserts, how will I know that? I would create a new handle for the logical insert and do the tms.addLogicalDependency(...), even tough there were regular inserts before and this seems to be a wrong behaviour.<br>
<br>Apparently, today, you can disable TMS and still use logical inserts in your drl, what, I believe, will lead to inconsistent behaviour, but you're at your own risk.<br><br>Ideas? I feel that I missed something :)<br>
<br>Cheers,<br>Leo.<br><br>P.S.: I reached the conclusions above based on the fact that LogicalAssertionTest started failing after I did the changes you suggested.<br><br> <br></div><div><div></div><div><font color="#888888">
</font><br><br><div class="gmail_quote">On Wed, Sep 15, 2010 at 3:47 PM, Mark Proctor <span dir="ltr"><<a href="mailto:mproctor@codehaus.org" target="_blank">mproctor@codehaus.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div bgcolor="#ffffff" text="#000000"><div>
On 15/09/2010 14:35, Michael Anstis wrote:
<blockquote type="cite">Is this in drools-core; or drools-compiler?
<div><br>
</div>
<div>Whilst not undertaking to do the work; have a purpose to nose
through the code makes understanding easier.<br>
</div>
</blockquote></div>
It's all in DroolsCore.<br>
<br>
It's a 5 minute hack for me and then 15 minute unit writing test.
But I thought I'd write it up in a hope to bring someone else into
the fold, we need more help writting the core engine someone else
out there must want to work on current edge engine design :)<br>
<br>
if you look at the AbstractWorkingMemory insert method you'll see
one argument is whether it's a logical insertion or not. You'll also
see it check the global maintainTMS configuration and also retrieve
the ObjectTypeConf. So between those things someone should be able
to get it working.<br><font color="#888888">
<br>
Mark</font><div><div></div><div><br>
<blockquote type="cite">
<div><br>
<div class="gmail_quote">On 14 September 2010 16:47, Mark
Proctor <span dir="ltr"><<a href="mailto:mproctor@codehaus.org" target="_blank">mproctor@codehaus.org</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div bgcolor="#ffffff" text="#000000"> Here is another
project proposal, this time simpler. I think this one has
Wolfgang's name on it ;)<br>
<br>
<a href="http://blog.athico.com/2010/09/lazily-enabled-truth-maintenace.html" target="_blank">http://blog.athico.com/2010/09/lazily-enabled-truth-maintenace.html</a><br>
<br>
Three weeks ago I posted the project idea for <a href="http://blog.athico.com/2010/08/left-and-right-unlinking-community.html" target="_blank">"Left and Right Unlinking"</a>. So far
there are no takers, so if you are interested let me know
:)<br>
<br>
In the meantime I tried to think of a simpler enhancement
that we would like to see done.<br>
<br>
At the moment Drools has a user setting
"MaintainTMSOption" which can be true or false. It's a
small optimisation that when turned off avoids using the
equality hashmap that is maintained for all inserted
objects.<br>
<br>
It would be a much better idea to remove this
configuration setting, thus simplifying things for end
users and have TMS lazily enabled on demand.<br>
<br>
For each object type there is an "ObjectTypeConf"
configuration object that is retrieved every time a
working memory action, such as insert, is executed. The
enabledTMS boolean should be moved there, so there is one
per object type, by default it is false.<br>
<br>
When a working memory action occurs, like insert, it
retrieved the ObjectTypeConf and checks the maintainTms
boolean there, instead of the current engine scoped
configuration. When a logical insertion occurs and the
ObjectTypeConf is retrieved if maintainTms is false it
sets the value to true and then iterates the associated
ObjectTypeNode memory lazily adding all the objects to the
TMS equality map. From then on for that ObjectType all
inserted objects are added to that equality map.<br>
<br>
With this you now have the advantage of TMS being laziy
enabled, so the minor hashmap operation is no longer used
and likewise a small memory saving from not populating the
map. There is a further advantage that this is now fine
grained and when enabled only impacts for that specific
object type.<br>
<br>
A further enhancement could use a int counter, instead of
a boolean. Each logical insertion for that object type
increases the counter, each retraction decreases the
counter; even if automatically retracted if the truth is
broken for that logical assertion. When the counter
reaches zero, TMS for that OTN can be disabled. We do not
however remove the objects from the equality map, as this
would cause "churn" if TMS is continuously enabled and
disabled. Instead when TMS is disabled record the current
fact counter id. Then if TMS is disabled on a retraction
but there is a counter id, we can check that counter id to
see if the fact is prior to TMS being disabled and thus
would need to be retracted from the equality map.<br>
</div>
<br>
_______________________________________________<br>
rules-dev mailing list<br>
<a href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
<br>
</blockquote>
</div>
<br>
</div>
<pre><fieldset></fieldset>
_______________________________________________
rules-dev mailing list
<a href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a>
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
</pre>
</blockquote>
<br>
</div></div></div>
<br>_______________________________________________<br>
rules-dev mailing list<br>
<a href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
<br></blockquote></div><br>
</div></div></blockquote></div><br>