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
