Stefan Sperling wrote:
> On Mon, Mar 01, 2010 at 06:14:33PM +0000, Julian Foad wrote:
> > On Thu, 2010-02-18, Neels J Hofmeyr wrote:
> > > The one thing left now is:
> > > > Can someone explain a motivation for even creating a database row before
> > > > the pristine file is moved into place in the pristine store? I currently
> > > > don't see why it can't be way simpler.
> > [...]
> 
> > "Simultaneous or multi-threaded clients" would be my first reaction to
> > that particular question.
> 
> If two threads write to the same pristine, the content written
> will be the same (except in case of a SHA1 checksum collision
> which we choose to ignore). So, thread 1 writes to a tempfile, and
> when it's done, it moves the tempfile into place. The new filename
> of the tempfile being based on the SHA1 sum of the written content.
> If thread 2 does the same concurrently, the end result will be the
> same -- the file will only exist once at its SHA1 sum name.

Yup, the file will be OK.

I didn't have any specific failure mode in mind, and I can't think of
one now.  If there is some reason, then we can tackle it when we find
the reason.

+1 on KISS.

> Of course, writing the same pristine more than once is redundant.
> So we could try to optmize this redundancy away. But I don't think
> it is worth it. [...]

Agreed.

- Julian



Reply via email to