[kepler-dev] IOPortEvent bug

Christopher Brooks cxh at eecs.berkeley.edu
Mon May 24 11:02:35 PDT 2010


Hi Colin,
Yes, this looks like some sort of cloning problem.  I'd need a small
test case to do much more analysis on this.  As you say, it could be
a problem with _parseTreeEvaluator not being properly reset.
Perhaps Variable.clone() should set _parseTreeEvaluator to null?

It is odd to me that your error message is for $h instead of $a or $j.
I wonder why that is?  The error does seem to be a scoping issue.

_Christopher

On 5/24/10 12:42 AM, Colin Enticott wrote:
> Hi Christopher,
>
> I'm having trouble again when I use the clone(Workspace) method again
> on an active workflow. This time I am getting an exception when
> evaluating an expression. The actor has an expression:
> $a $b $c $d $e $f $g $h $i $j
>
> The Parameter "a" refers to parameter "A" and likewise for the rest
> (yes, this is a test workflow :-) ).
>
> After the following code to clone the actor into a new workspace, I
> get the following exception:
>
>   _actor = (Actor)((Entity)_parentActor).clone(_workspace);
>   _actor.setName(name);
>   ((ComponentEntity)_actor).setContainer(tca);
>
>
> ptolemy.kernel.util.IllegalActionException: Error evaluating
> expression: $a $b $c $d $e $f $g $h $i $j
>    in .ParameterDepend.String Constant_C2_TCA.String Constant_C2.value
> Because:
> The ID h is undefined.
>    with tag colour {sequenceID=2, batchSize=1024, parameters={A = 1, B
> = 1, C = 1, D = 1, E = 1, F = 1, G = 1, H = 1, I = 2, J = 1},
> hashcode=-1226196380}
>    in .ParameterDepend.String Constant_C2_TCA.String Constant_C2
> 	at ptolemy.data.expr.Variable.validate(Variable.java:1449)
> 	at ptolemy.kernel.util.NamedObj._validateSettables(NamedObj.java:2658)
> 	at ptolemy.kernel.Entity._validateSettables(Entity.java:651)
> 	at ptolemy.kernel.util.NamedObj.validateSettables(NamedObj.java:1972)
> 	at org.monash.nimrod.NimrodDirector.NimrodProcessThread._updateParameters(NimrodProcessThread.java:692)
> 	at org.monash.nimrod.NimrodDirector.NimrodProcessThread.run(NimrodProcessThread.java:389)
>
>
> But if I change the code into this slower, more java memory hungry
> version, it works:
>          String s = ((Entity)_parentActor).exportMoML(name);
>          MoMLChangeRequest l = new MoMLChangeRequest(this, tca, s);
>          l.execute();
>          _actor = (Actor)tca.getEntity(name);
>
> Looking at the code for th Variable class, it is hard for me to tell
> what isn't being updated. The best guess I have is I can't see
> _parseTreeEvaluator being reset in the clone(Workspace) method. The
> _parseTreeEvaluator holds onto state including a "ParserScope". Could
> this be the problem?
>
> Or is it something else I am doing?
>
> Thanks,
> Colin
>
>
> On 4 January 2010 05:04, Christopher Brooks<cxh at eecs.berkeley.edu>  wrote:
>> Hi Colin,
>> Thanks, I wrote a test that illustrates this problem and then
>> fixed it.
>>
>> The test is
>>
>> test NamedObj-8.1.0 {clone should not have _debugListener set} {
>>     set n [java::new ptolemy.kernel.util.Workspace "N"]
>>     set a [java::new ptolemy.kernel.util.NamedObj $n "A" ]
>>     set listener [java::new ptolemy.kernel.util.RecorderListener]
>>     $a addDebugListener $listener
>>     set b [java::cast ptolemy.kernel.util.NamedObj [$a clone]]
>>     set listenerB [java::new ptolemy.kernel.util.RecorderListener]
>>     $b addDebugListener $listenerB
>>     $b setName B
>>     $b clone
>>     list [$listener getMessages] \
>>         [$listenerB getMessages]
>> } {{Cloned .A into workspace: N
>> } {Changed name from .A to .B
>> Cloned .B into workspace: N
>> }}
>>
>>
>> Before the fix, the result was:
>>
>> {Cloned .A into workspace: N
>> Changed name from .A to .B
>> Cloned .B into workspace: N
>> } {Changed name from .A to .B
>> Cloned .B into workspace: N
>> }
>>
>> which indicates that the listener to A is getting messages intended for B.
>>
>> _Christopher
>>
>> On 12/28/09 9:15 PM, Colin Enticott wrote:
>>>
>>> Hi Christopher,
>>>
>>> Along the same lines as this old bug, it seems _debugListeners is not
>>> being nulled on the new object after clone(Workspace) is called.
>>>
>>> It's funny I noticed problems with debugging after two years working
>>> with Kepler. It's obvious I don't debug my code enough ;-)
>>>
>>> Oh, I'm still working with Kepler-1.0.0. If this has been fixed since,
>>> I apologise.
>>>
>>> Kind regards,
>>> Colin
>>>
>>> 2008/2/23 Colin Enticott<Colin.Enticott at infotech.monash.edu.au>:
>>>>
>>>> Thanks Dan and Christoper.  Works a treat.
>>>>
>>>> Colin
>>>>
>>>> -----Original Message-----
>>>> From: cxh at eecs.berkeley.edu [mailto:cxh at eecs.berkeley.edu]
>>>> Sent: Saturday, 23 February 2008 6:14 AM
>>>> To: Daniel Crawl
>>>> Cc: Colin Enticott; Kepler-Dev
>>>> Subject: Re: [kepler-dev] IOPortEvent bug
>>>>
>>>> Done!
>>>>
>>>>
>>>> cxh at carson 192% cvs diff -D yesterday IOPort.java
>>>> Index: IOPort.java
>>>> ===================================================================
>>>> RCS file: /home/cvs/ptII/ptolemy/actor/IOPort.java,v
>>>> retrieving revision 1.260
>>>> retrieving revision 1.261
>>>> diff -r1.260 -r1.261
>>>> 129c129
>>>> <      @version $Id: IOPort.java,v 1.260 2008/02/19 18:25:47 cxh Exp $
>>>> ---
>>>>>
>>>>>   @version $Id: IOPort.java,v 1.261 2008/02/22 19:11:58 cxh Exp $
>>>>
>>>> 420a421,424
>>>>>
>>>>>          newObject._hasPortEventListeners = false;
>>>>>          newObject._portEventListeners = null;
>>>>>
>>>> cxh at carson 193%
>>>>
>>>> On my todo list is to write some tests for the IOPortListener
>>>> code.
>>>>
>>>> _Christopher
>>>>
>>>> --------
>>>>
>>>>
>>>>     Hi Colin,
>>>>
>>>>     The cloned IOPort's listener list should be set to null. Since
>>>>     Kepler CVS no longer has a separate copy of IOPort.java, could
>>>>     someone make this change in ptII CVS?
>>>>
>>>>     Thanks,
>>>>
>>>>       --dan
>>>>
>>>>     Colin Enticott wrote:
>>>>     >    Hi all,
>>>>     >
>>>>     >    I was having trouble with my code and I have narrowing it down to
>>>>     >    IOPortEvents feature.  There appears to be a bug in the IOPort
>>>> class
>>>> with
>>>>     >    IOPortEvent feature and cloning.  It looks like if there has been
>>>> an
>>>>     >    IOPortEventListener added, when it is cloned, all the clones will
>>>> have
>>>> a
>>>>     >    reference to the same listener list.  I guess the list itself
>>>> should
>>>> be
>>>>     >    cloned or the clone's list reference should be set back to null.
>>>>     >
>>>>     >    It is possible if someone could have a look at this?
>>>>     >
>>>>     >    Thanks,
>>>>     >    Colin
>>>>     >
>>>>     >    _______________________________________________
>>>>     >    Kepler-dev mailing list
>>>>     >    Kepler-dev at ecoinformatics.org
>>>>     >
>>>> http://mercury.nceas.ucsb.edu/ecoinformatics/mailman/listinfo/kepler-dev
>>>>     >
>>>>
>>>>     _______________________________________________
>>>>     Kepler-dev mailing list
>>>>     Kepler-dev at ecoinformatics.org
>>>>
>>>>   http://mercury.nceas.ucsb.edu/ecoinformatics/mailman/listinfo/kepler-dev
>>>> --------
>>>>
>>>> _______________________________________________
>>>> Kepler-dev mailing list
>>>> Kepler-dev at ecoinformatics.org
>>>> http://mercury.nceas.ucsb.edu/ecoinformatics/mailman/listinfo/kepler-dev
>>>>
>>>
>>>
>>>
>>
>> --
>> Christopher Brooks, PMP                       University of California
>> CHESS Executive Director                      US Mail: 337 Cory Hall
>> Programmer/Analyst CHESS/Ptolemy/Trust        Berkeley, CA 94720-1774
>> ph: 510.643.9841 fax:510.642.2718             (Office: 545Q Cory)
>> home: (F-Tu) 707.665.0131 cell: 707.332.0670
>>
>
>
>

-- 
Christopher Brooks, PMP                       University of California
CHESS Executive Director                      US Mail: 337 Cory Hall
Programmer/Analyst CHESS/Ptolemy/Trust        Berkeley, CA 94720-1774
ph: 510.643.9841 fax:510.642.2718	      (Office: 545Q Cory)
home: (F-Tu) 707.665.0131 cell: 707.332.0670


More information about the Kepler-dev mailing list