[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