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 <tsmil...@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-...@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@zope.org
https://mail.zope.org/mailman/listinfo/zodb-dev

Reply via email to