[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