[Zope] ConflictError (ID-Counter for all Documents)

Troy Farrell troy@entheossoft.com
Thu, 24 Jan 2002 21:38:49 -0600


Ahhh.  Threading issues.  Can you try something?
Look a lib/python/ts_regex.py
I think that this is the locking you are looking for.  If this works, it 
could be the answer to our unique_id problems.
I see a Zope3 utility coming: unique id number generator.

Troy

-- 
Troy Farrell
Developer
Entheos Software
mailto:troy@entheossoft.com
http://www.entheossoft.com

Thomas Guettler wrote:

>     Toby Dickenson wrote:
> 
>> On Thu, 24 Jan 2002 11:59:18 +0100, Thomas Guettler
>> <zopestoller@thomas-guettler.de> wrote:
>>
>>> Catch the Exception, and retry it.
>>>
>>
>> Dont catch it yourself. Zope is already doing this, and only shows the
>> client an error message if it still fails after 3 attempts.
>>
>>> Use PCounter from ZODB/test/ConflictResolution.py
>>>
>>
>> No, for two reasons:
>>
>> That class makes a good counter, but it is no use if you want to use
>> the counter to generate unique ids. It works by allowing two
>> transactions to proceed simultaneously with the same count value, then
>> incrementing the count by two instead of one.
>>
>> Secondly, it wouldnt help even if it did generate unique ids. You
>> would still get a conflict from the folder object.
>>
>> The easiest solution is to use only one publisher thread. That means
>> no concurrency, no conflicts, but limited scalability.
>>
> Would this mean that if someone is downloading a 100MB file all other 
> request have to wait?
> 
> I already asked this in an other thread: How can I get somethink like a 
> syncronized block in Java?
> 
> syncronize{
> last_id=last_id+1
> }
> 
>>
>> You best solution is:
>>
>> 1. Use a BTreeFolder (download it from www.zope.org), which allows for
>> concurrent writes. It wont eliminate the need for retries, but it
>> should decrease the probability of a failure after the three retries
>> to an acceptable level.
>>
> I downloaded it. But it doesn't allow me to _setObject() of an int or a 
> string.
> 
> 
>>
>> 2. Use a different method of generating ids, to avoid the problem
>> where two concurrent writes always generate the same id. The easiest
>> solution is random ids.
>>
> 
> I now use BTreeFolder to store all documents. The ID of  the documents 
> is created with DateTime().millis()
> This works much better than before, but still gives me some conflicts 
> when I add the new document to the folder:
> 
> Sometimes I get a strange error:
> 2002-01-24T17:14:44 ERROR(200) ZODB Couldn't load state for 
> '\x00\x00\x00\x00\x0
> 0\x00!\x0b'
> Traceback (innermost last):
>  File F:\ZOPE-2~1\lib\python\ZODB\Connection.py, line 446, in setstate
> AttributeError: 'None' object has no attribute 'load'
> 
> 
> 
> 
> _______________________________________________
> Zope maillist  -  Zope@zope.org
> http://lists.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce
> http://lists.zope.org/mailman/listinfo/zope-dev )
> 
>