On 20/05/2009, at 12:50 AM, Damien Katz wrote:

Also, if performance generally turns out to be all around slower, we'll have to discuss if the pure tail append change is actually worth it. Maybe we can tail append headers with the old design too, but they are only ever used when the front header is bad. The only problem is, without implementing the current design, I don't know of a workable way to find an valid header vs something that happens to look like a couchdb file header, such as a couchdb file attached inside a document in a live db, or an intentional attack.

Maybe you could do this by ensuring that:

a) headers are only on a certain boundary, even a small boundary such as 128 bytes, but other writes ignore alignment; and b) headers include a private (unexposed) UUID of the database (stored in an immutable file prefix); and
c) headers include the write offset; and
d) headers include magic (although maybe the private UUID is enough).

e.g <magic><private UUID><write offset>

Point a reduces the search space - maybe that's not necessary given it's a serious failure if you have to use it; and
Points b and c make an intentional attack virtually impossible.
Points a and c makes the recursive embedding issue incredible unlikely.

It's certainly a probabilistic approach, but at some point the probability of collision because much less than the probability of disk corruption.

Antony Blakey
--------------------------
CTO, Linkuistics Pty Ltd
Ph: 0438 840 787

The truth does not change according to our ability to stomach it.
  -- Flannery O'Connor


Reply via email to