-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Problem with swift3 and swift 1.7.6 with boto and HEAD, then PUT requests #27
Comments
Hi, If there's anyone out there who can help me track down this issue, I'm actively trying to debug it. Please get in touch with me ASAP. |
I should have included the HEAD response in both cases. Here they are, they're very similar. Again, it's the additional "NoSuchKey" error from the middleware that is getting read in from the file descriptor after the PUT (when it should, if anything, come after the HEAD request response, since it's associated with it. Broken: recvfrom(6, "H", 1, 0, NULL, NULL) = 1 WORKING: recvfrom(6, "H", 1, 0, NULL, NULL) = 1 |
This was tracked down and fixed within swob @ https://review.openstack.org/#/c/19422/ |
I'm having a very strange issue when using Django+Django-storages via S3Storage backend, which uses boto when connecting to swift 1.7.6+latest pull of your swift3 module. It works fine with swift 1.4.8. Here are the two cases. Can you comment on what is broken with either how swift is processing the responses from middleware?
Problem: In the broken case, boto does a HEAD /object to see if the key exists and gets a HTTP 404, which is correct. It then PUTS the object. Here's where the fun starts. In the working case (swift 1.4.8) it gets a HTTP 200 after the PUT has succeeded and that's all. In the broken case, it receives the error response body for NoSuchKey in the swift3 code and then gets the HTTP 200. This seems to confuse it and it just hangs.
--Straces--
WORKING CASE:
Using swift 1.4.8 (CentOS 6 RPM) which comes with the old swift3 module
recvfrom(6, "H", 1, 0, NULL, NULL) = 1
recvfrom(6, "T", 1, 0, NULL, NULL) = 1
recvfrom(6, "T", 1, 0, NULL, NULL) = 1
recvfrom(6, "P", 1, 0, NULL, NULL) = 1
recvfrom(6, "/", 1, 0, NULL, NULL) = 1
recvfrom(6, "1", 1, 0, NULL, NULL) = 1
recvfrom(6, ".", 1, 0, NULL, NULL) = 1
recvfrom(6, "1", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "2", 1, 0, NULL, NULL) = 1
recvfrom(6, "0", 1, 0, NULL, NULL) = 1
recvfrom(6, "0", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "O", 1, 0, NULL, NULL) = 1
recvfrom(6, "K", 1, 0, NULL, NULL) = 1
recvfrom(6, "\r", 1, 0, NULL, NULL) = 1
recvfrom(6, "\n", 1, 0, NULL, NULL) = 1
recvfrom(6, "C", 1, 0, NULL, NULL) = 1
recvfrom(6, "o", 1, 0, NULL, NULL) = 1
recvfrom(6, "n", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "n", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "-", 1, 0, NULL, NULL) = 1
recvfrom(6, "T", 1, 0, NULL, NULL) = 1
recvfrom(6, "y", 1, 0, NULL, NULL) = 1
recvfrom(6, "p", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, ":", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "x", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "/", 1, 0, NULL, NULL) = 1
recvfrom(6, "h", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "m", 1, 0, NULL, NULL) = 1
recvfrom(6, "l", 1, 0, NULL, NULL) = 1
recvfrom(6, ";", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "c", 1, 0, NULL, NULL) = 1
recvfrom(6, "h", 1, 0, NULL, NULL) = 1
recvfrom(6, "a", 1, 0, NULL, NULL) = 1
recvfrom(6, "r", 1, 0, NULL, NULL) = 1
recvfrom(6, "s", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "=", 1, 0, NULL, NULL) = 1
recvfrom(6, "U", 1, 0, NULL, NULL) = 1
recvfrom(6, "T", 1, 0, NULL, NULL) = 1
recvfrom(6, "F", 1, 0, NULL, NULL) = 1
recvfrom(6, "-", 1, 0, NULL, NULL) = 1
recvfrom(6, "8", 1, 0, NULL, NULL) = 1
recvfrom(6, "\r", 1, 0, NULL, NULL) = 1
recvfrom(6, "\n", 1, 0, NULL, NULL) = 1
recvfrom(6, "C", 1, 0, NULL, NULL) = 1
recvfrom(6, "o", 1, 0, NULL, NULL) = 1
recvfrom(6, "n", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "n", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "-", 1, 0, NULL, NULL) = 1
recvfrom(6, "L", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "n", 1, 0, NULL, NULL) = 1
recvfrom(6, "g", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "h", 1, 0, NULL, NULL) = 1
recvfrom(6, ":", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "0", 1, 0, NULL, NULL) = 1
recvfrom(6, "\r", 1, 0, NULL, NULL) = 1
recvfrom(6, "\n", 1, 0, NULL, NULL) = 1
recvfrom(6, "E", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "a", 1, 0, NULL, NULL) = 1
recvfrom(6, "g", 1, 0, NULL, NULL) = 1
recvfrom(6, ":", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, """, 1, 0, NULL, NULL) = 1
recvfrom(6, "f", 1, 0, NULL, NULL) = 1
recvfrom(6, "7", 1, 0, NULL, NULL) = 1
recvfrom(6, "9", 1, 0, NULL, NULL) = 1
recvfrom(6, "9", 1, 0, NULL, NULL) = 1
recvfrom(6, "7", 1, 0, NULL, NULL) = 1
recvfrom(6, "9", 1, 0, NULL, NULL) = 1
recvfrom(6, "0", 1, 0, NULL, NULL) = 1
recvfrom(6, "4", 1, 0, NULL, NULL) = 1
recvfrom(6, "0", 1, 0, NULL, NULL) = 1
recvfrom(6, "6", 1, 0, NULL, NULL) = 1
recvfrom(6, "c", 1, 0, NULL, NULL) = 1
recvfrom(6, "2", 1, 0, NULL, NULL) = 1
recvfrom(6, "a", 1, 0, NULL, NULL) = 1
recvfrom(6, "3", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "2", 1, 0, NULL, NULL) = 1
recvfrom(6, "9", 1, 0, NULL, NULL) = 1
recvfrom(6, "c", 1, 0, NULL, NULL) = 1
recvfrom(6, "6", 1, 0, NULL, NULL) = 1
recvfrom(6, "4", 1, 0, NULL, NULL) = 1
recvfrom(6, "9", 1, 0, NULL, NULL) = 1
recvfrom(6, "f", 1, 0, NULL, NULL) = 1
recvfrom(6, "7", 1, 0, NULL, NULL) = 1
recvfrom(6, "0", 1, 0, NULL, NULL) = 1
recvfrom(6, "f", 1, 0, NULL, NULL) = 1
recvfrom(6, "d", 1, 0, NULL, NULL) = 1
recvfrom(6, "1", 1, 0, NULL, NULL) = 1
recvfrom(6, "8", 1, 0, NULL, NULL) = 1
recvfrom(6, "3", 1, 0, NULL, NULL) = 1
recvfrom(6, "4", 1, 0, NULL, NULL) = 1
recvfrom(6, "9", 1, 0, NULL, NULL) = 1
recvfrom(6, """, 1, 0, NULL, NULL) = 1
recvfrom(6, "\r", 1, 0, NULL, NULL) = 1
recvfrom(6, "\n", 1, 0, NULL, NULL) = 1
recvfrom(6, "X", 1, 0, NULL, NULL) = 1
recvfrom(6, "-", 1, 0, NULL, NULL) = 1
recvfrom(6, "T", 1, 0, NULL, NULL) = 1
recvfrom(6, "r", 1, 0, NULL, NULL) = 1
recvfrom(6, "a", 1, 0, NULL, NULL) = 1
recvfrom(6, "n", 1, 0, NULL, NULL) = 1
recvfrom(6, "s", 1, 0, NULL, NULL) = 1
recvfrom(6, "-", 1, 0, NULL, NULL) = 1
recvfrom(6, "I", 1, 0, NULL, NULL) = 1
recvfrom(6, "d", 1, 0, NULL, NULL) = 1
recvfrom(6, ":", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "x", 1, 0, NULL, NULL) = 1
recvfrom(6, "a", 1, 0, NULL, NULL) = 1
recvfrom(6, "9", 1, 0, NULL, NULL) = 1
recvfrom(6, "8", 1, 0, NULL, NULL) = 1
recvfrom(6, "1", 1, 0, NULL, NULL) = 1
recvfrom(6, "a", 1, 0, NULL, NULL) = 1
recvfrom(6, "6", 1, 0, NULL, NULL) = 1
recvfrom(6, "b", 1, 0, NULL, NULL) = 1
recvfrom(6, "c", 1, 0, NULL, NULL) = 1
recvfrom(6, "6", 1, 0, NULL, NULL) = 1
recvfrom(6, "1", 1, 0, NULL, NULL) = 1
recvfrom(6, "1", 1, 0, NULL, NULL) = 1
recvfrom(6, "d", 1, 0, NULL, NULL) = 1
recvfrom(6, "4", 1, 0, NULL, NULL) = 1
recvfrom(6, "6", 1, 0, NULL, NULL) = 1
recvfrom(6, "c", 1, 0, NULL, NULL) = 1
recvfrom(6, "4", 1, 0, NULL, NULL) = 1
recvfrom(6, "b", 1, 0, NULL, NULL) = 1
recvfrom(6, "4", 1, 0, NULL, NULL) = 1
recvfrom(6, "b", 1, 0, NULL, NULL) = 1
recvfrom(6, "3", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "b", 1, 0, NULL, NULL) = 1
recvfrom(6, "4", 1, 0, NULL, NULL) = 1
recvfrom(6, "8", 1, 0, NULL, NULL) = 1
recvfrom(6, "8", 1, 0, NULL, NULL) = 1
recvfrom(6, "b", 1, 0, NULL, NULL) = 1
recvfrom(6, "6", 1, 0, NULL, NULL) = 1
recvfrom(6, "8", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "b", 1, 0, NULL, NULL) = 1
recvfrom(6, "f", 1, 0, NULL, NULL) = 1
recvfrom(6, "6", 1, 0, NULL, NULL) = 1
recvfrom(6, "\r", 1, 0, NULL, NULL) = 1
recvfrom(6, "\n", 1, 0, NULL, NULL) = 1
recvfrom(6, "D", 1, 0, NULL, NULL) = 1
recvfrom(6, "a", 1, 0, NULL, NULL) = 1
recvfrom(6, "t", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, ":", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "F", 1, 0, NULL, NULL) = 1
recvfrom(6, "r", 1, 0, NULL, NULL) = 1
recvfrom(6, "i", 1, 0, NULL, NULL) = 1
recvfrom(6, ",", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "0", 1, 0, NULL, NULL) = 1
recvfrom(6, "9", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "N", 1, 0, NULL, NULL) = 1
recvfrom(6, "o", 1, 0, NULL, NULL) = 1
recvfrom(6, "v", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "2", 1, 0, NULL, NULL) = 1
recvfrom(6, "0", 1, 0, NULL, NULL) = 1
recvfrom(6, "1", 1, 0, NULL, NULL) = 1
recvfrom(6, "2", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "2", 1, 0, NULL, NULL) = 1
recvfrom(6, "1", 1, 0, NULL, NULL) = 1
recvfrom(6, ":", 1, 0, NULL, NULL) = 1
recvfrom(6, "0", 1, 0, NULL, NULL) = 1
recvfrom(6, "1", 1, 0, NULL, NULL) = 1
recvfrom(6, ":", 1, 0, NULL, NULL) = 1
recvfrom(6, "4", 1, 0, NULL, NULL) = 1
recvfrom(6, "5", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "G", 1, 0, NULL, NULL) = 1
recvfrom(6, "M", 1, 0, NULL, NULL) = 1
recvfrom(6, "T", 1, 0, NULL, NULL) = 1
recvfrom(6, "\r", 1, 0, NULL, NULL) = 1
recvfrom(6, "\n", 1, 0, NULL, NULL) = 1
recvfrom(6, "\r", 1, 0, NULL, NULL) = 1
recvfrom(6, "\n", 1, 0, NULL, NULL) = 1
BROKEN CASE:
Using swift 1.7.6 (latest git pull) + swift3 (latest git pull)
Strace:
recvfrom(6, "<", 1, 0, NULL, NULL) = 1
recvfrom(6, "?", 1, 0, NULL, NULL) = 1
recvfrom(6, "x", 1, 0, NULL, NULL) = 1
recvfrom(6, "m", 1, 0, NULL, NULL) = 1
recvfrom(6, "l", 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "v", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "r", 1, 0, NULL, NULL) = 1
recvfrom(6, "s", 1, 0, NULL, NULL) = 1
recvfrom(6, "i", 1, 0, NULL, NULL) = 1
recvfrom(6, "o", 1, 0, NULL, NULL) = 1
recvfrom(6, "n", 1, 0, NULL, NULL) = 1
recvfrom(6, "=", 1, 0, NULL, NULL) = 1
recvfrom(6, """, 1, 0, NULL, NULL) = 1
recvfrom(6, "1", 1, 0, NULL, NULL) = 1
recvfrom(6, ".", 1, 0, NULL, NULL) = 1
recvfrom(6, "0", 1, 0, NULL, NULL) = 1
recvfrom(6, """, 1, 0, NULL, NULL) = 1
recvfrom(6, " ", 1, 0, NULL, NULL) = 1
recvfrom(6, "e", 1, 0, NULL, NULL) = 1
recvfrom(6, "n", 1, 0, NULL, NULL) = 1
recvfrom(6, "c", 1, 0, NULL, NULL) = 1
recvfrom(6, "o", 1, 0, NULL, NULL) = 1
recvfrom(6, "d", 1, 0, NULL, NULL) = 1
recvfrom(6, "i", 1, 0, NULL, NULL) = 1
recvfrom(6, "n", 1, 0, NULL, NULL) = 1
recvfrom(6, "g", 1, 0, NULL, NULL) = 1
recvfrom(6, "=", 1, 0, NULL, NULL) = 1
recvfrom(6, """, 1, 0, NULL, NULL) = 1
recvfrom(6, "U", 1, 0, NULL, NULL) = 1
recvfrom(6, "T", 1, 0, NULL, NULL) = 1
recvfrom(6, "F", 1, 0, NULL, NULL) = 1
recvfrom(6, "-", 1, 0, NULL, NULL) = 1
recvfrom(6, "8", 1, 0, NULL, NULL) = 1
recvfrom(6, """, 1, 0, NULL, NULL) = 1
recvfrom(6, "?", 1, 0, NULL, NULL) = 1
recvfrom(6, ">", 1, 0, NULL, NULL) = 1
recvfrom(6, "\r", 1, 0, NULL, NULL) = 1
recvfrom(6, "\n", 1, 0, NULL, NULL) = 1
recvfrom(6, "\r\n
NoSuchKey
\r\n The resource you requested does not exist\r\n\r\n", 8192, 0, NULL, NULL) = 109recvfrom(6, "HTTP/1.1 200 OK\r\nEtag: "a5737b361dab736fcc8f1c0bb66abe17"\r\nContent-Type: text/html; charset=UTF-8\r\nX-Trans-Id: tx58e5d25c2ab94a32bb701e97073d1c75\r\nContent-Length: 0\r\nDate: Fri, 09 Nov 2012 20:38:23 GMT\r\n\r\n", 8192, 0, NULL, NULL) = 205
recvfrom(6,
Thanks for any help!
The text was updated successfully, but these errors were encountered: