[PEAK] Re: trellis.Set.discard
Sergey Schetinin
maluke at gmail.com
Sat Oct 11 15:06:11 EDT 2008
On Sat, Oct 11, 2008 at 18:59, Phillip J. Eby <pje at telecommunity.com> wrote:
> At 04:04 AM 10/11/2008 +0300, Sergey Schetinin wrote:
>>
>> I've noticed that set.discard both reads and writes the set so
>> Set.discard should raise an exception.
>
> Eh? It doesn't read and write the set, it performs an idempotent operation
> on the set. To be a read, it would have to communicate information *out* of
> the method.
That's right, I just got confused for a moment.
> Congratulations; you just found a way to violate causality in a task. :)
>
> What I don't understand is why this works when it's NOT in a task. That is,
> if you change TaskCell to @trellis.atomically and take out the yield, it
> does what we expect it to.
>
> The discard operation uses to_add, which sets up a savepoint at a time when
> .v is false. Later, when .v is true, the add operation adds to to_add.
> This second operation is also critical, because if you don't do the add, no
> rollback occurs.
>
> Clearly, there is some reason why the second execution of the maintain rule
> is being rolled back, which then forces a rollback all the way to the first
> execution of the rule.
>
> This would seem to imply that there is something dreadfully wrong with using
> these sorts of savepoints in "futures"; it is a flaw that they are allowed
> to rollback to the middle of a rule's execution. They *should* be required
> to roll back all the way to the beginning of the rule, or something of that
> sort.
>
> But I am still baffled as to why this only seems to be triggered in the task
> case.
I was investigating exactly what is happening and stumbled over
something odd. When I add some debug prints, the version with
@atomically starts to print "False" as well. The minimal change to
trigger this is to add str(self.queues) to Controller.schedule in
stm.py. I imagine there's something in Cell.__repr__ that changes the
behavior, but don't yet understand what is it. It doesn't seem to
force the rule to run or anything like that.
--
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