[ZODB-Dev] newbie ZEO first try. ConflictError.

tsmiller tsmiller at gnixterhouse.com
Thu Nov 26 13:51:27 EST 2009


Laurence,
Thank you for your very quick reply.  I did as you suggested and now the
ConflictError is now handled.  And that is a most excellent thing because
now ConflictError is raised every time.  So it still seems to be confused. 
I am trying to figure out if I will be able to use ZEO in my application.  

Now my program reads:

while True:
        root[ "one" ] = time.asctime()
        while True:
                try:
                        print "Try to commit transaction"
                        transaction.commit()
                        print "root is",  root
                except POSException.ConflictError:
                        print "we have a conflict"
                        transaction.abort()
                        time.sleep(.2)
                else:
                        break

        time.sleep(10)


And the output is:

// the program is only running once here
Try to commit transaction
root is {'one': 'Thu Nov 26 11:37:53 2009'}
Try to commit transaction
root is {'one': 'Thu Nov 26 11:38:03 2009'}
Try to commit transaction
root is {'one': 'Thu Nov 26 11:38:13 2009'}
Try to commit transaction
root is {'one': 'Thu Nov 26 11:38:23 2009'}
Try to commit transaction
root is {'one': 'Thu Nov 26 11:38:33 2009'}

// after I start a second copy, the first copy always has a conflict ( the
second copy does not get this conflict error).  
Try to commit transaction
we have a conflict
Try to commit transaction
root is {'one': 'Thu Nov 26 11:38:35 2009'}
Try to commit transaction
we have a conflict
Try to commit transaction
root is {'one': 'Thu Nov 26 11:38:46 2009'}
Try to commit transaction
we have a conflict
Try to commit transaction
root is {'one': 'Thu Nov 26 11:38:56 2009'}
Try to commit transaction
we have a conflict

thanks,
tom



Laurence Rowe wrote:
> 
> You must be prepared to abort and retry the whole transaction:
> 
>    while True:
>            while True:
>                    try:
>                            root[ "one" ] = time.asctime()
>                            transaction.commit()
>                    except POSException.ConflictError:
>                            transaction.abort()
>                            time.sleep(.2)
>                    else:
>                            break
> 
>            time.sleep(10)
> 
> 
> Laurence
> 
> 2009/11/26 tsmiller <tsmiller at gnixterhouse.com>:
>>
>> ZODB Developers,
>>
>> Can you please tell me what I am doing wrong in my first simple attempt
>> to
>> make use of ZEO.  My ZODB and ZEO are both the same version (3.6.0).
>>
>> First, I start my ZEO server and it looks like it starts properly:
>>
>> python2.4 /usr/lib/python2.4/site-packages/ZEO/runzeo.py -a
>> localhost:9100
>> -f /home/tom/zeo/test.fs
>>
>> ------
>> 2009-11-26T00:05:14 INFO ZEO.runzeo (8192) opening storage '1' using
>> FileStorage
>> ------
>> 2009-11-26T00:05:14 INFO ZEO.StorageServer (8192) StorageServer created
>> RW
>> with storages: 1:RW:/home/tom/zeo/test.fs
>> ------
>> 2009-11-26T00:05:14 INFO ZEO.zrpc (8192) listening on ('localhost', 9100)
>>
>>
>> Second, I start my client, twice.  The purpose is to write to the same
>> test.fs file from both of them.  The idea is to loop continuously,
>> writing
>> to test.fs from each program.  If I only start the program once, it
>> writes
>> to test.fs fine.  But the first time it tries to commit a transaction
>> after
>> starting a second copy of the program, it always gives an error.
>>
>>    from ZEO import ClientStorage
>>    from ZODB import DB
>>    from ZODB import POSException
>>    import transaction
>>    import time
>>
>>    addr = 'localhost', 9100
>>    storage = ClientStorage.ClientStorage( addr )
>>    db = DB(storage)
>>    conn = db.open()
>>    root = conn.root()
>>    while True:
>>            root[ "one" ] = time.asctime()
>>            while True:
>>                    try:
>>                            transaction.commit()
>>                    except POSException.ConflictError:
>>                            time.sleep(.2)
>>                    else:
>>                            break
>>
>>            time.sleep(10)
>>
>>
>> The traceback folows. The conflict error is not handled and I don't know
>> why.    I am sure that I am missing something simple.
>>
>> we have a conflict
>> Traceback (most recent call last):
>>  File "zeotest.py", line 17, in ?
>>    transaction.commit()
>>  File "/usr/lib/python2.4/site-packages/transaction/_manager.py", line
>> 96,
>> in commit
>>    return self.get().commit(sub, deprecation_wng=False)
>>  File "/usr/lib/python2.4/site-packages/transaction/_transaction.py",
>> line
>> 370, in commit
>>    self._prior_operation_failed() # doesn't return
>>  File "/usr/lib/python2.4/site-packages/transaction/_transaction.py",
>> line
>> 250, in _prior_operation_failed
>>    raise TransactionFailedError("An operation previously failed, "
>> ZODB.POSException.TransactionFailedError: An operation previously failed,
>> with traceback:
>>
>>  File "zeotest.py", line 17, in ?
>>    transaction.commit()
>>  File "/usr/lib/python2.4/site-packages/transaction/_manager.py", line
>> 96,
>> in commit
>>    return self.get().commit(sub, deprecation_wng=False)
>>  File "/usr/lib/python2.4/site-packages/transaction/_transaction.py",
>> line
>> 380, in commit
>>    self._saveCommitishError() # This raises!
>>  File "/usr/lib/python2.4/site-packages/transaction/_transaction.py",
>> line
>> 378, in commit
>>    self._commitResources()
>>  File "/usr/lib/python2.4/site-packages/transaction/_transaction.py",
>> line
>> 433, in _commitResources
>>    rm.commit(self)
>>  File "/usr/lib/python2.4/site-packages/ZODB/Connection.py", line 484, in
>> commit
>>    self._commit(transaction)
>>  File "/usr/lib/python2.4/site-packages/ZODB/Connection.py", line 518, in
>> _commit
>>    raise ConflictError(object=obj)
>> ConflictError: database conflict error (oid 0x00, class
>> persistent.mapping.PersistentMapping)
>>
>>
>> thanks,
>>
>> tom
>>
>>
>> --
>> View this message in context:
>> http://old.nabble.com/newbie-ZEO-first-try.--ConflictError.-tp26532984p26532984.html
>> Sent from the Zope - ZODB-Dev mailing list archive at Nabble.com.
>>
>> _______________________________________________
>> For more information about ZODB, see the ZODB Wiki:
>> http://www.zope.org/Wikis/ZODB/
>>
>> ZODB-Dev mailing list  -  ZODB-Dev at zope.org
>> https://mail.zope.org/mailman/listinfo/zodb-dev
>>
> _______________________________________________
> For more information about ZODB, see the ZODB Wiki:
> http://www.zope.org/Wikis/ZODB/
> 
> ZODB-Dev mailing list  -  ZODB-Dev at zope.org
> https://mail.zope.org/mailman/listinfo/zodb-dev
> 
> 

-- 
View this message in context: http://old.nabble.com/newbie-ZEO-first-try.--ConflictError.-tp26532984p26533587.html
Sent from the Zope - ZODB-Dev mailing list archive at Nabble.com.



More information about the ZODB-Dev mailing list