Re: [ZODB-Dev] [ZEO] Storage error with big transactions.

2007-02-14 Thread Andreas Jung



--On 13. Februar 2007 14:31:57 -0500 Tim Peters <[EMAIL PROTECTED]> 
wrote:




Under the covers "someone" is trying to invalidate a current ZEO cache
entry, and the ZEO cache is complaining because it doesn't believe it
/has/ current data ("assert o is not None").  Best guess for why it
doesn't have it is that it silently refused to add current data to
begin with, because the object pickle was bigger than the size of the
disk file allocated for the ZEO cache.  Offhand I don't recall that
this situation is tested, so it's likely to fail in some way.  One way
to check:  configure the ZEO cache file to be reasonably bigger than
the size of `data = '*'*1`.  If the problem goes away then,
that's the cause ;-)


You're right (as always). Increasing the cache size makes the problem
disappear. I created a bug report for this issue:



-aj



pgpXTOiewuXOI.pgp
Description: PGP signature
___
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev


Re: [ZODB-Dev] [ZEO] Storage error with big transactions.

2007-02-13 Thread Dieter Maurer
Andreas Jung wrote at 2007-2-12 18:25 +0100:
> ...
>This script fails badly during during the first commit() call. Is this a bug
>or feature? I am using Zope 2.10.2 on MacOSX Intel.

Looks like a bug.

Apparently, an invalidation message arrives at the ZEO client cache
for an object that is not in the cache.

Of course, this is a standard case and must be handled correctly
by the cache.

However in your (buggy) case, the object is not in the "FileCache"
(on disk) instance but "self.current" contains the object.
This inconsistency between the on disk state and the in memory state
causes the bug.

Looks like a "ZEO.cache.ClientCache" bug.



-- 
Dieter
___
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev


Re: [ZODB-Dev] [ZEO] Storage error with big transactions.

2007-02-13 Thread Tim Peters

[Andreas Jung]

I have the following script to emulate a long running writing ZEO client
by writing 100MB to a page template:

import transaction

pt = app.foo
while 1:
data = '*'*1
T = transaction.begin()
pt.pt_edit(data, 'text/html')
T.commit()
print 'done'

This script fails badly during during the first commit() call. Is this a bug
or feature? I am using Zope 2.10.2 on MacOSX Intel.


Probably a bug:

...

suxmac2:~/sandboxes/zeo-test ajung$ bin/zopectl run test.py
2007-02-12 18:18:18 CRITICAL txn.-1610559552 A storage error occurred
during the second phase of the two-phase commit.  Resources may be in an
inconsistent state.
Traceback (most recent call last):
  File "", line 1, in ?
  File "test.py", line 8, in ?
T.commit()
  File "/opt/zope/2.10.2/lib/python/transaction/_transaction.py", line 395,
in commit
self._commitResources()
  File "/opt/zope/2.10.2/lib/python/transaction/_transaction.py", line 503,
in _commitResources
rm.tpc_finish(self)
  File "/opt/zope/2.10.2/lib/python/ZODB/Connection.py", line 696, in
tpc_finish
self._storage.tpc_finish(transaction, callback)
  File "/opt/zope/2.10.2/lib/python/ZEO/ClientStorage.py", line 955, in
tpc_finish
self._update_cache(tid)
  File "/opt/zope/2.10.2/lib/python/ZEO/ClientStorage.py", line 980, in
_update_cache
self._cache.invalidate(oid, version, tid)
  File "/opt/zope/2.10.2/lib/python/ZEO/cache.py", line 375, in invalidate
assert o is not None
AssertionError


Under the covers "someone" is trying to invalidate a current ZEO cache
entry, and the ZEO cache is complaining because it doesn't believe it
/has/ current data ("assert o is not None").  Best guess for why it
doesn't have it is that it silently refused to add current data to
begin with, because the object pickle was bigger than the size of the
disk file allocated for the ZEO cache.  Offhand I don't recall that
this situation is tested, so it's likely to fail in some way.  One way
to check:  configure the ZEO cache file to be reasonably bigger than
the size of `data = '*'*1`.  If the problem goes away then,
that's the cause ;-)
___
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev


Re: [ZODB-Dev] [ZEO] Storage error with big transactions.

2007-02-13 Thread Andreas Jung



--On 13. Februar 2007 06:03:03 -0500 Jim Fulton <[EMAIL PROTECTED]> wrote:




Based on the traceback you gave, this looks like a bug.  I've noticed,
however, that large database records can lead to memory errors at sizes
much smaller than I would expect.  If the problem is ultimately traced to
a hidden memory error, there's not much that can be done.  In the long
run, I expect we'll advise that "large" objects be put in blobs, where
"large" might be smaller than one might expect.


Sure. This was just a simple approach to block ZEO for a while. In real
I would use something pdata-ish or blobs.

For example, I've seen

90MB records lead to memory errors even on machines with a hundreds of
megabytes free.


My Powerbook has 2GB of RAM and about 1.3GB were free :-)

Andreas



pgp8O0ZarMbGH.pgp
Description: PGP signature
___
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev


Re: [ZODB-Dev] [ZEO] Storage error with big transactions.

2007-02-13 Thread Jim Fulton


On Feb 12, 2007, at 12:25 PM, Andreas Jung wrote:

I have the following script to emulate a long running writing ZEO  
client

by writing 100MB to a page template:

import transaction

pt = app.foo
while 1:
   data = '*'*1
   T = transaction.begin()
   pt.pt_edit(data, 'text/html')
   T.commit()
   print 'done'

This script fails badly during during the first commit() call. Is  
this a bug

or feature? I am using Zope 2.10.2 on MacOSX Intel.


Based on the traceback you gave, this looks like a bug.  I've  
noticed, however, that large database records can lead to memory  
errors at sizes much smaller than I would expect.  If the problem is  
ultimately traced to a hidden memory error, there's not much that can  
be done.  In the long run, I expect we'll advise that "large" objects  
be put in blobs, where "large" might be smaller than one might  
expect.  For example, I've seen 90MB records lead to memory errors  
even on machines with a hundreds of megabytes free.


Jim

--
Jim Fulton  mailto:[EMAIL PROTECTED]Python 
Powered!
CTO (540) 361-1714  
http://www.python.org
Zope Corporationhttp://www.zope.com http://www.zope.org



___
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev


[ZODB-Dev] [ZEO] Storage error with big transactions.

2007-02-13 Thread Andreas Jung

I have the following script to emulate a long running writing ZEO client
by writing 100MB to a page template:

import transaction

pt = app.foo
while 1:
   data = '*'*1
   T = transaction.begin()
   pt.pt_edit(data, 'text/html')
   T.commit()
   print 'done'

This script fails badly during during the first commit() call. Is this a bug
or feature? I am using Zope 2.10.2 on MacOSX Intel.

Andreas




suxmac2:~/sandboxes/zeo-test ajung$ bin/zopectl run test.py
2007-02-12 18:18:18 CRITICAL txn.-1610559552 A storage error occurred 
during the second phase of the two-phase commit.  Resources may be in an 
inconsistent state.

Traceback (most recent call last):
 File "", line 1, in ?
 File "test.py", line 8, in ?
   T.commit()
 File "/opt/zope/2.10.2/lib/python/transaction/_transaction.py", line 395, 
in commit

   self._commitResources()
 File "/opt/zope/2.10.2/lib/python/transaction/_transaction.py", line 503, 
in _commitResources

   rm.tpc_finish(self)
 File "/opt/zope/2.10.2/lib/python/ZODB/Connection.py", line 696, in 
tpc_finish

   self._storage.tpc_finish(transaction, callback)
 File "/opt/zope/2.10.2/lib/python/ZEO/ClientStorage.py", line 955, in 
tpc_finish

   self._update_cache(tid)
 File "/opt/zope/2.10.2/lib/python/ZEO/ClientStorage.py", line 980, in 
_update_cache

   self._cache.invalidate(oid, version, tid)
 File "/opt/zope/2.10.2/lib/python/ZEO/cache.py", line 375, in invalidate
   assert o is not None
AssertionError

pgpVN1GD4G126.pgp
Description: PGP signature
___
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev