[ZODB-Dev] ConflictError: database conflict error

Bob Horvath zodb at horvath.com
Sun Jan 9 22:23:00 EST 2005


Bob Horvath wrote:

> Tim Peters wrote:
>
>> [Bob Horvath]
>>  
>>
>>>>> ... <li>  Module ZODB.FileStorage, line 728, in store</li>
>>>>>
>>>>> </ul>ConflictError: database conflict error (oid 000000000000cd23,
>>>>> serial was 03597732139eabdd, now 0000000000000000)
>>>>>
>>>>>
>>>>>       
>>>>
>>
>> [Dieter Maurer]
>>  
>>
>>>> When the transaction started, the object with oid "cd23" did not exist
>>>> (this means "now 0000...000") but now that you want to commit, 
>>>> there is
>>>> one with serial "3597...bdd".
>>>>
>>>> I think this should not happen! Looks like a bug.
>>>>     
>>>
>>
>> [Bob]
>>  
>>
>>> Great.  I have a Data.fs file with some serious problems.
>>>   
>>
>>
>> The info here may help diagnose/repair it, and prevent more trouble:
>>
>>    http://zope.org/Wikis/ZODB/FileStorageBackup
>>
>>  Bob Horvath <zodb at horvath.com>
>>
>>  
>>
>
> That page is excellent.  I am surprised I hadn't googled it before.
>
>>  
>>
>>> On this specific problem, would it do anyone any good to look at my
>>> Data.fs file to help debug it?  Or is the problem most likely beyond
>>> where it could easily be debugged.
>>>   
>>
>>
>> Not enough info here to say.  What does fstest do?
>
>
> fstest is silent (without the verbose flag)
>
>> If that's OK, what does
>> fsrefs say?  (If `fstest` and `fsrefs` leave you scratching your 
>> head, you
>> haven't read the link above yet <wink>.)
>>  
>>
>
> fsrefs is not silent.  Two objects "failed to load" and there were 279 
> "missing".
>
> I should mention that I am running 2.7.0 versions of these scripts on 
> a fs file created by 2.6.2.
>
> The output from them are at...
>
> http://files.horvath.com/fstest.out
> http://files.horvath.com/fsrefs.out
> http://files.horvath.com/fsdump.out  (very large)
>
> So what do you do with  a file like that?
>
>

More interesting data....

http://files.horvath.com/tranalyzer.out

... ends with

Traceback (most recent call last):
  File "tranalyzer.py", line 333, in ?
    main(sys.argv)
  File "tranalyzer.py", line 325, in main
    t = Transaction(f, off, refs)
  File "tranalyzer.py", line 170, in __init__
    self.obs.append(Record(f, refs))
  File "tranalyzer.py", line 214, in __init__
    data = f.c(dl - 8)
  File "tranalyzer.py", line 105, in c
    self.checkleft(n)
  File "tranalyzer.py", line 87, in checkleft
    raise 'Not enough data left, %d < %d' % (self.left, n)


Not enough data left, 14766 < 17567408390136

Reading this stuff now, I wish I would have known it when this all 
started.  Deleting from before the error is not an option.  I would lose 
too much.  It would be easier to start from scratch and rebuild with 
what I want to recreate, but lose a lot of stuff in the process 
(although probably not such a bad idea housecleaning wise).

Are database errors in the middle of a Data.fs hopeless?



More information about the ZODB-Dev mailing list