[PEAK] A few issues and suggestions

Sergey Schetinin maluke at gmail.com
Tue Nov 4 15:14:28 EST 2008


On Tue, Nov 4, 2008 at 16:36, Phillip J. Eby <pje at telecommunity.com> wrote:
> I don't see from this example why .c's initialization *shouldn't* be undone,
> unless you're saying that the make() isn't also being undone...  in which
> case the test should be about that.

You're right, but in the app it wasn't obvious that the problem is
with make, what was apparent is that some changes from __init__ don't
stick. So, I didn't know what the problem is exactly, until I figured
out the test case.

> It seems to me that the real issue here is that CellAttribute and
> TodoProperty don't undo-log their addition of a cell to a Component's
> __cells__.  I didn't originally do this because then the Cells() addon would
> need to support locking to be able to be threadsafe in the future.  But I
> suppose that bridge can be crossed later.
>
> Is there any other reason besides this inconsistency, that the component
> __init__ shouldn't be undone?

No, I think this is it.

> (Btw, the same problem occurs with cells in addons and services, and won't
> be fixed by undo-logging the cell creation.  It's a big open issue at the
> moment, since even avoiding an __init__ doesn't help.  In essence, undo
> logging and "write-until-read" consistency simply don't mix, and  Addons,
> services, and the Cells() map all run off the write-until-read model.)
>
> At 05:09 AM 11/4/2008 +0200, Sergey Schetinin wrote:
>>
>> Here's the test case:
>>
>> class C(Component):
>>    x = attr(0)
>>    def __init__(self):
>>        self.x = 10
>>        @on_undo
>>        def undo():
>>            print 'UNDO'
>>
>>
>> class TC(Component):
>>    c = make(C)
>>    x = attr(0)
>>    y = attr(0)
>>
>>    @maintain
>>    def test(self):
>>        if self.x:
>>            self.c
>>            self.y
>>
>>    @maintain
>>    def write(self):
>>        self.y = self.x
>>
>>
>> tc = TC()
>>
>> @atomically
>> def test():
>>    tc.x = 1
>>    tc.test
>>
>> print tc.c.x
>>
>> # prints UNDO \ 0
>>
>>
>>
>>
>>
>> On Tue, Nov 4, 2008 at 04:51, Sergey Schetinin <maluke at gmail.com> wrote:
>> >> Thanks for your help identifying and fixing the problems.  I've checked
>> >> in
>> >> fixes, as described here:
>> >>
>> >> http://svn.eby-sarna.com?rev=2595&view=rev
>> >
>> > Thanks a lot. However, I see that some problems, that I thought was
>> > related to my monkeypatching, didn't go away, what happens in effect
>> > is that changes done Component.__init__ get rolled back. I'm working
>> > on a test case for this, and I've noticed something I didn't think
>> > about before. In the following example __init__ reads data it
>> > shouldn't. This isn't a problem normally, but something to keep in
>> > mind when writing components' __init__
>> >
>> > class TC(Component):
>> >    y = attr(0)
>> >
>> >    def __init__(self):
>> >        print self.read # 0
>> >
>> >    @compute
>> >    def read(self):
>> >        return self.y
>> >
>> >    @maintain
>> >    def write(self):
>> >        self.y = 5
>> >
>>
>>
>>
>> --
>> Best Regards,
>> Sergey Schetinin
>>
>> http://s3bk.com/ -- S3 Backup
>> http://word-to-html.com/ -- Word to HTML Converter
>
>



-- 
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