--000e0cd4c08ef92a9e04a1487e47
Content-Type: text/plain;
 charseto-8859-1
Content-Transfer-Encoding: quoted-printable

It's strange that moduleName should change like that. Can you reproduce this
issue by printing rete.getFocus() rather than moduleName?

-W


On 18 April 2011 19:25, Grube, Ralf <r.gr...@itcampus.de> wrote:

> Hi Jess team,
>
> I am not sure whether the email has reached you a month ago. So I start a
> second trial here and would be glad if you could take a look on this issue.
>
> Thanks,
> Ralf
>
> p.s. ohh, I have send my first email to a single jess-user only :)  So
> actually this is my first trial ;)
>
> -----Ursprüngliche Nachricht-----
> Von: Grube, Ralf
> Gesendet: Mittwoch, 23. März 2011 16:00
> An: 'jess-u...@sandia.gov'
> Betreff: Wrong results if using modules and peers in a multithreaded
> context
>
> Hi,
>
> we have seen some nondeterministic behavior if executing rules with
> multiple threads on different Rete peers. Our rule base is scoped by modules
> which seems to cause the problems.
>
> Basically our execution works like this (the System.outs are there to
> understand the results below):
>
> <code>
>                // a Rete peer
>                Rete rete               String threadName
>                String moduleName
> System.out.println(String.format("<<%s, %d>> BeforeSettingModule: %s",
> threadName, rete.hashCode(), moduleName));
>
>            rete.setFocus(moduleName);
>            rete.setCurrentModule(moduleName);
>
>                moduleName
>  System.out.println(String.format("<<%s, %d>> AfterSettingModule: %s",
> threadName, rete.hashCode(), moduleName));
>
>                // ... some more non Rete related code that consumes a litte
> bit time
>
>                moduleName
>  System.out.println(String.format("<<%s, %d>> BeforeAddingFacts: %s",
> threadName, rete.hashCode(), moduleName));
>
>            for (Object fact : getFacts()) {
>                rete.add(fact);
>                }
>
>                moduleName
>  System.out.println(String.format("<<%s, %d>> BeforeRun: %s", threadName,
> rete.hashCode(), moduleName));
>
>                rete.run();
> </code>
>
> I have logged the current thread name together with the used Rete hashCode
> to show:
> 1. each thread always works on the same Rete instance
> 2. each thread uses its own Rete instance
>
> Here is an excerpt of the results:
>
> <<pool-1-thread-13, 3779465>> BeforeSettingModule: 553486623
> <<pool-1-thread-13, 3779465>> AfterSettingModule: 553486625
> <<pool-1-thread-11, 7866553>> AfterSettingModule: 553486625
> <<pool-1-thread-11, 7866553>> BeforeAddingFacts: 553486625
> <<pool-1-thread-9, 12910198>> BeforeRun: 553486625
> <<pool-1-thread-11, 7866553>> BeforeRun: 553486625
> <<pool-1-thread-6, 2780950>> BeforeRun: 553486625
> <<pool-1-thread-7, 11541827>> BeforeSettingModule: 553486625
> <<pool-1-thread-7, 11541827>> AfterSettingModule: 553486624
> <<pool-1-thread-7, 11541827>> BeforeAddingFacts: 553486624
> <<pool-1-thread-15, 28571894>> BeforeSettingModule: 553486623
> <<pool-1-thread-15, 28571894>> AfterSettingModule: 553486625
> <<pool-1-thread-15, 28571894>> BeforeAddingFacts: 553486625
> <<pool-1-thread-7, 11541827>> BeforeRun: 553486625
> <<pool-1-thread-13, 3779465>> BeforeAddingFacts: 553486625
> <<pool-1-thread-11, 7866553>> BeforeSettingModule: 553486625
> <<pool-1-thread-11, 7866553>> AfterSettingModule: 553486626
> <<pool-1-thread-11, 7866553>> BeforeAddingFacts: 553486626
> <<pool-1-thread-1, 15628820>> BeforeRun: 553486625
> <<pool-1-thread-13, 3779465>> BeforeRun: 553486626
>
>
> The erroneous result is produced by 'pool-1-thread-13' here.
> As you can see it has currentModule '553486625' before adding the facts and
> before running the engine the current module suddenly is '553486626'. In
> this example a suspect could be 'pool-1-thread-11' because it changes the
> module just before the erroneous log. But this is not verified.
> The problem causes round about 1% of our results to be wrong. The error
> rate increases if increasing the number of threads.
>
> The problem disappears if replacing the Rete peer by a separate Rete
> instance that has its own rule base. So it is only related to
> Rete.getPeer().
>
>
>
> Regards,
> Ralf Grube
>
>
> E-Mail: r.gr...@itcampus.de
>
> Tel: +49. 341. 4 92 87 55
> Fax: +49. 341. 4 92 87 01
>
> http://www.itcampus.eu
> _______________________________________________
>
> itCampus Software- und Systemhaus GmbH
> Nonnenstraße 42 | 04229 Leipzig
>
> // a Software AG Company //
>
> Court of Registry: Amtsgericht Leipzig HRB 15872
> CEO: Dr. Andreas Lassmann
> CTO: Tobias Schmidt
> ______________________________________________
>
>
>
>
>
>
>
> --------------------------------------------------------------------
> To unsubscribe, send the words 'unsubscribe jess-users y...@address.com'
> in the BODY of a message to majord...@sandia.gov, NOT to the list
> (use your own address!) List problems? Notify owner-jess-us...@sandia.gov.
> --------------------------------------------------------------------
>
>

--000e0cd4c08ef92a9e04a1487e47
Content-Type: text/html;
 charseto-8859-1
Content-Transfer-Encoding: quoted-printable

It&#39;s strange that moduleName should change like that. Can you reproduce 
this issue by printing rete.getFocus() rather than 
moduleName?<br><br>-W<br><br><br><div class="gmail_quote">On 18 April 2011 
19:25, Grube, Ralf <span dir="ltr">&lt;<a 
href="mailto:r.gr...@itcampus.de";>r.gr...@itcampus.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 
204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi Jess team,<br>
<br>
I am not sure whether the email has reached you a month ago. So I start a 
second trial here and would be glad if you could take a look on this issue.<br>
<br>
Thanks,<br>
Ralf<br>
<br>
p.s. ohh, I have send my first email to a single jess-user only :)  So actually 
this is my first trial ;)<br>
<br>
-----Ursprüngliche Nachricht-----<br>
Von: Grube, Ralf<br>
Gesendet: Mittwoch, 23. März 2011 16:00<br>
An: &#39;<a href="mailto:jess-u...@sandia.gov";>jess-u...@sandia.gov</a>&#39;<br>
Betreff: Wrong results if using modules and peers in a multithreaded context<br>
<br>
Hi,<br>
<br>
we have seen some nondeterministic behavior if executing rules with multiple 
threads on different Rete peers. Our rule base is scoped by modules which seems 
to cause the problems.<br>
<br>
Basically our execution works like this (the System.outs are there to 
understand the results below):<br>
<br>
&lt;code&gt;<br>
                // a Rete peer<br>
                Rete rete               String threadName<br>
                String moduleName               
System.out.println(String.format(&quot;&lt;&lt;%s, %d&gt;&gt; 
BeforeSettingModule: %s&quot;, threadName, rete.hashCode(), moduleName));<br>
<br>
            rete.setFocus(moduleName);<br>
            rete.setCurrentModule(moduleName);<br>
<br>
                moduleName              
System.out.println(String.format(&quot;&lt;&lt;%s, %d&gt;&gt; 
AfterSettingModule: %s&quot;, threadName, rete.hashCode(), moduleName));<br>
<br>
                // ... some more non Rete related code that consumes a litte 
bit time<br>
<br>
                moduleName              
System.out.println(String.format(&quot;&lt;&lt;%s, %d&gt;&gt; 
BeforeAddingFacts: %s&quot;, threadName, rete.hashCode(), moduleName));<br>
<br>
            for (Object fact : getFacts()) {<br>
                rete.add(fact);<br>
                }<br>
<br>
                moduleName              
System.out.println(String.format(&quot;&lt;&lt;%s, %d&gt;&gt; BeforeRun: 
%s&quot;, threadName, rete.hashCode(), moduleName));<br>
<br>
                rete.run();<br>
&lt;/code&gt;<br>
<br>
I have logged the current thread name together with the used Rete hashCode to 
show:<br>
1. each thread always works on the same Rete instance<br>
2. each thread uses its own Rete instance<br>
<br>
Here is an excerpt of the results:<br>
<br>
&lt;&lt;pool-1-thread-13, 3779465&gt;&gt; BeforeSettingModule: 553486623<br>
&lt;&lt;pool-1-thread-13, 3779465&gt;&gt; AfterSettingModule: 553486625<br>
&lt;&lt;pool-1-thread-11, 7866553&gt;&gt; AfterSettingModule: 553486625<br>
&lt;&lt;pool-1-thread-11, 7866553&gt;&gt; BeforeAddingFacts: 553486625<br>
&lt;&lt;pool-1-thread-9, 12910198&gt;&gt; BeforeRun: 553486625<br>
&lt;&lt;pool-1-thread-11, 7866553&gt;&gt; BeforeRun: 553486625<br>
&lt;&lt;pool-1-thread-6, 2780950&gt;&gt; BeforeRun: 553486625<br>
&lt;&lt;pool-1-thread-7, 11541827&gt;&gt; BeforeSettingModule: 553486625<br>
&lt;&lt;pool-1-thread-7, 11541827&gt;&gt; AfterSettingModule: 553486624<br>
&lt;&lt;pool-1-thread-7, 11541827&gt;&gt; BeforeAddingFacts: 553486624<br>
&lt;&lt;pool-1-thread-15, 28571894&gt;&gt; BeforeSettingModule: 553486623<br>
&lt;&lt;pool-1-thread-15, 28571894&gt;&gt; AfterSettingModule: 553486625<br>
&lt;&lt;pool-1-thread-15, 28571894&gt;&gt; BeforeAddingFacts: 553486625<br>
&lt;&lt;pool-1-thread-7, 11541827&gt;&gt; BeforeRun: 553486625<br>
&lt;&lt;pool-1-thread-13, 3779465&gt;&gt; BeforeAddingFacts: 553486625<br>
&lt;&lt;pool-1-thread-11, 7866553&gt;&gt; BeforeSettingModule: 553486625<br>
&lt;&lt;pool-1-thread-11, 7866553&gt;&gt; AfterSettingModule: 553486626<br>
&lt;&lt;pool-1-thread-11, 7866553&gt;&gt; BeforeAddingFacts: 553486626<br>
&lt;&lt;pool-1-thread-1, 15628820&gt;&gt; BeforeRun: 553486625<br>
&lt;&lt;pool-1-thread-13, 3779465&gt;&gt; BeforeRun: 553486626<br>
<br>
<br>
The erroneous result is produced by &#39;pool-1-thread-13&#39; here.<br>
As you can see it has currentModule &#39;553486625&#39; before adding the facts 
and before running the engine the current module suddenly is 
&#39;553486626&#39;. In this example a suspect could be 
&#39;pool-1-thread-11&#39; because it changes the module just before the 
erroneous log. But this is not verified.<br>

The problem causes round about 1% of our results to be wrong. The error rate 
increases if increasing the number of threads.<br>
<br>
The problem disappears if replacing the Rete peer by a separate Rete instance 
that has its own rule base. So it is only related to Rete.getPeer().<br>
<br>
<br>
<br>
Regards,<br>
Ralf Grube<br>
<br>
<br>
E-Mail: <a href="mailto:r.gr...@itcampus.de";>r.gr...@itcampus.de</a><br>
<br>
Tel: +49. 341. 4 92 87 55<br>
Fax: +49. 341. 4 92 87 01<br>
<br>
<a href="http://www.itcampus.eu"; target="_blank">http://www.itcampus.eu</a><br>
_______________________________________________<br>
<br>
itCampus Software- und Systemhaus GmbH<br>
Nonnenstraße 42 | 04229 Leipzig<br>
<br>
// a Software AG Company //<br>
<br>
Court of Registry: Amtsgericht Leipzig HRB 15872<br>
CEO: Dr. Andreas Lassmann<br>
CTO: Tobias Schmidt<br>
______________________________________________<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
--------------------------------------------------------------------<br>
To unsubscribe, send the words &#39;unsubscribe jess-users <a 
href="mailto:y...@address.com";>y...@address.com</a>&#39;<br>
in the BODY of a message to <a 
href="mailto:majord...@sandia.gov";>majord...@sandia.gov</a>, NOT to the list<br>
(use your own address!) List problems? Notify <a 
href="mailto:owner-jess-us...@sandia.gov";>owner-jess-us...@sandia.gov</a>.<br>
--------------------------------------------------------------------<br>
<br>
</blockquote></div><br>

--000e0cd4c08ef92a9e04a1487e47--


--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users y...@address.com'
in the BODY of a message to majord...@sandia.gov, NOT to the list
(use your own address!) List problems? Notify owner-jess-us...@sandia.gov.
--------------------------------------------------------------------

Reply via email to