[Zope] Fwd: [Further investigations] Re: A question about __setstate__ in Shared/DC/ZRDB/Connection.py

Marco Bizzarri marco.bizzarri at gmail.com
Fri Sep 19 10:58:20 EDT 2008


On Fri, Sep 19, 2008 at 4:15 PM, Tres Seaver <tseaver at palladion.com> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Marco Bizzarri wrote:
>
>> Thanks for the suggestion, Tres, I'm trying it right now.
>
>> I think this could be responsible for the problem I had a few months
>> ago, under the name: "Asking advice on a Zope "stuck" (or: what did I
>> do wrong?)"
>
>> Do you think there will be some sort of "general" solution to the
>> problem? I mean, the problem is actually that there are some objects
>> which should not be ghostified, or am I wrong?
>
> There are two problems here:
>
>  - Some objects need to be able to mark themselves as "sticky" for
>   at least the duration of a transaction;  my workaround is hackish,
>   because if you omit the 'del conn._p_changed' it causes the object
>   to be written needlessly;  likewise, if the conn object *is* actually
>   written to during the transaction, those changes will be discarded.

I'm afraid the workaround is not working for me; I've modified the
test as follows:


class DoubleTransactionTest(ZopeTestCase.ZopeTestCase):

   def _add_big_image(self, value, data):
       Image.manage_addFile(self.app, "f%06s" % value, data , "a title")

   def test_showdouble(self):
       manage_addZPsycopgConnection(self.app, "db_connection", "",
"host=localhost user=postgres dbname=template1")
       self.app._setObject('sql', SQL.SQL("sql", "", "db_connection",
"", "select * from pg_tables"))
       self.app.db_connection._p_changed = 1
       self.app.sql()
       data =  "*" * (1 << 20)
       for x in range(1000):
           self._add_big_image(x, data)
           print "Added %s " % x
       self.app.sql()

But I can still see two transactions (I'm not bothering about removing
the _p_changed flag, because this is a one shot test, just to see if
it works... maybe I'm putting this in the wrong place).


>  - We need a way to keep the Pdata objects from evicting "precious"
>   objects;  ideally, Pdata instances would never be added to the cache
>   at all.  I worked a bit on a spike in which the Pdata iterator part
>   would use a one-off connection with a zero-sized cache, but got
>   stuck somewhere;  maybe somebody else can make it work.

I would be glad to help, but my current understanding on "inner" Zope
are not good enough (and my "free" time is even less ;))


> Tres.
> - --

Do you mind if I forward this to ML?

Regards
Marco
--
Marco Bizzarri
http://notenotturne.blogspot.com/
http://iliveinpisa.blogspot.com/


More information about the Zope mailing list