I discovered a serious flaw in the way Fred is ordering his byte arrays.
Byte arrays are compared one byte at a time and are supposed to be done
in unsigned arithmetic, but they are currently being done with signed
arithmetic.  It's a silly mistake but all too easy with Java's
omission of unsigned types (so that you have to convert bytes to ints
and AND them with 0xff to accomplish an unsigned comparison).

This means that some of the data stored in the binary trees that make up
the datastore accounting tables is extremely screwed up.  This bug might
also be responsible for the "duplicate entry" throws and NPEs that some
people were seeing.

I have thought for a while about whether it would be feasible to write
an automatic converter for this data to go along with the bug fix, but
have concluded it's too difficult and in any event, I suspect that the
data may be fundamentally inconsistent.

Therefore I will program the node to automatically wipe the store at
startup when it detects the old version of the accounting tables (we
will be going from version 1 to version 2 -- the version number is
stored in the root block at the beginning of the store).

This will be build 455.  It will not be mandatory.  Hopefully the
network will not be shocked too badly if people upgrade at different
times.

-tavin


_______________________________________________
Devl mailing list
Devl at freenetproject.org
http://lists.freenetproject.org/mailman/listinfo/devl

Reply via email to