#2110 new defect

uploader confuses self-write-dedup with "server is full"

Reported by: zooko Owned by: markberger
Priority: normal Milestone: undecided
Component: unknown Version: 1.10.0
Keywords: upload error Cc:
Launchpad Bug:

Description

I just got this on my LeastAuthority.com S4 server, and then I verified by code inspection that it is also present in trunk. I haven't yet verified if it is also present in 1382-rewrite-2. If you write to a server and ask to allocate a bucket, and it writes back saying that it won't allocate that bucket for you, and by the way that it doesn't already have that bucket available to you, the client reasonably-enough concludes that the server is full. It reports that server as having been full if the upload fails. This gave me a bit of a start, since I couldn't figure out how Amazon S3 could be "full" so I thought there was a bug in my S4 service. ☺ But the truth appears to be that I was already uploading the same (immutable) file and the upload was in-progress, so the server was unwilling to start a new upload and also unwilling/unable to let me do a download.

I suspect the only real solution to this is going to be to extend the "get_bucket"/"allocate_buckets" protocol for immutable files so the server can mention to the client "... and by the way the reason that I won't take it and also won't give it to you is that there is a *partial* upload of that same file sitting here. So you might want to report to your human that they could try again in a few minutes and see if that one has finished".

Change History (5)

comment:1 follow-up: Changed at 2013-11-23T01:54:11Z by daira

We should certainly do better error reporting, but ideally both uploads should succeed. That seems a bit complicated to implement with the current protocol though.

comment:2 in reply to: ↑ 1 ; follow-up: Changed at 2013-11-24T16:32:02Z by zooko

Replying to daira:

We should certainly do better error reporting, but ideally both uploads should succeed. That seems a bit complicated to implement with the current protocol though.

That does sound desirable but complicated to me. I guess it would require the second uploader — the one who is not actually transferring the ciphertext — to check back later and see if the first uploader finished transferring the correct ciphertext or not. There might also need to be some kind of timeout/conflict/retry/2PC protocol in case the second uploader decide that the first alleged uploader is unacceptably slow/stalled/DoS'ing. How about if we add this issue to #1851?

comment:3 Changed at 2013-11-24T16:33:28Z by zooko

So this ticket is just about error-reporting. Separately report "your upload didn't happen due to the server saying there is another already-initiated, but not-yet-completed upload of the same file" from "the server was full and refused to start your upload".

comment:4 in reply to: ↑ 2 ; follow-up: Changed at 2013-11-24T18:29:06Z by daira

Replying to zooko:

Replying to daira:

We should certainly do better error reporting, but ideally both uploads should succeed. That seems a bit complicated to implement with the current protocol though.

That does sound desirable but complicated to me. [...] How about if we add this issue to #1851?

+1

comment:5 in reply to: ↑ 4 Changed at 2013-11-27T19:57:26Z by zooko

That does sound desirable but complicated to me. [...] How about if we add this issue to #1851?

+1

Done: comment:3:ticket:1851

Note: See TracTickets for help on using tickets.