[PEAK] A few issues and suggestions

Sergey Schetinin maluke at gmail.com
Wed Nov 5 22:03:05 EST 2008


I brough that code back in to test. This time it results in the
infinite loop I described earlier. I did add the "else: cancel(self)"
block anyway, to see what happens. And it broke the loop, but the
results didn't seem right either -- it apparently have broken a lot of
rule dependency chains. I mean, even without that _minh rule, the
addition of that else clause messes things up completely as well.

On Wed, Nov 5, 2008 at 18:58, Phillip J. Eby <pje at telecommunity.com> wrote:
> At 04:37 PM 11/5/2008 +0200, Sergey Schetinin wrote:
>>
>> One more issue:
>>
>>  File "c:\files\checkouts\trellis\peak\events\stm.py", line 470, in
>> atomically
>>    return super(Controller,self).atomically(self._process, func, args, kw)
>>  File "c:\files\checkouts\trellis\peak\events\stm.py", line 186, in
>> atomically
>>    self.cleanup(*sys.exc_info())
>>  File "c:\files\checkouts\trellis\peak\events\stm.py", line 182, in
>> atomically
>>    retval = func(*args, **kw)
>>  File "c:\files\checkouts\trellis\peak\events\stm.py", line 486, in
>> _process
>>    self.run_rule(listener)
>>  File "c:\files\checkouts\trellis\peak\events\stm.py", line 364, in
>> run_rule
>>    listener.run()
>>  File "c:\files\checkouts\trellis\peak\events\trellis.py", line 559, in
>> run
>>    raise AssertionError("This should never happen!", self)
>> AssertionError: ('This should never happen!', Cell(<bound method
>> VPanel._minh of <gui5.models.VPanel object at 0x00C8CBB0>>, 0))
>>
>>
>>
>> And the rule for which that happens looks like this:
>>
>>    @maintain(initially=0)
>>    def _minh(self):
>>        prev = self._minh
>>        if prev == 0 and self.live:
>>            return self.height
>>        return prev
>
> Unfortunately, the rule itself will give us no clue of what happened.
>  Basically, it looks like for this to have happened, the cell had to have
> been assigned to between the time it was scheduled, and the time it was run.
>  I suspect it could be triggered by a sequence like:
>
> cell A depends on B and C
> B depends on C
> C triggers a change in B
> B sets a value in A
>
> Probably, setting a value should cancel the scheduled rule if it doesn't
> need initialization.  I suggest adding an "else: cancel(self)" to the "if
> self._needs_init:" block in Cell.set_value.  If that makes the problem go
> away, the above hypotheses are probably correct.
>
>



-- 
Best Regards,
Sergey Schetinin

http://s3bk.com/ -- S3 Backup
http://word-to-html.com/ -- Word to HTML Converter



More information about the PEAK mailing list