[kepler-dev] IOPortEvent bug

Colin Enticott Colin.Enticott at csse.monash.edu.au
Mon May 24 15:59:57 PDT 2010


Hi Christopher,

Thank you for your reply. Yes, it is an odd one. I've had the problem
for a little while, but end up doing things other ways to make it
work.

The problem occurs with my director. What type of small test case
would you like? I could write a small actor that clones itself on a PN
composite? I guess the multi instance composite would do the trick. I
would only need some parameter dependencies for it.

Regards,
Colin

On 25 May 2010 04:02, Christopher Brooks <cxh at eecs.berkeley.edu> wrote:
> 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
>



-- 
Colin


More information about the Kepler-dev mailing list