Socket leak on proxy->obj when HTTPRequestedRangeNotSatisfiable with erasure code
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Object Storage (swift) |
Fix Released
|
High
|
Samuel Merritt |
Bug Description
Issue:
proxy-server does not close connections with object-servers when the client requested a range that is not satisfiable for an object on an erasure code policy (no issue with replica policy)
How to reproduce on a SAIO:
eval $(swift -A http://
curl -H "X-Auth-Token: $OS_AUTH_TOKEN" $OS_STORAGE_
curl -H "X-Auth-Token: $OS_AUTH_TOKEN" $OS_STORAGE_
for i in $(seq 1 10); do curl -H "X-Auth-Token: $OS_AUTH_TOKEN" $OS_STORAGE_
netstat -tpn | grep -E "127.0.0.1:[0-9]+ +127.0.
# => many CLOSE_WAIT that will never be closed
Changed in swift: | |
assignee: | nobody → Samuel Merritt (torgomatic) |
After few more tests, it seems the range value is important.
If the range begin is lower than 1M (1024*1024), it leaks: URL/range_ leak_ec/ obj -H "Range: bytes=1048575- 1048580" ; echo; done
for i in $(seq 1 10); do curl -H "X-Auth-Token: $OS_AUTH_TOKEN" $OS_STORAGE_
If the range begin is greater or equal than 1M, it does not leak: URL/range_ leak_ec/ obj -H "Range: bytes=1048576- 1048580" ; echo; done
for i in $(seq 1 10); do curl -H "X-Auth-Token: $OS_AUTH_TOKEN" $OS_STORAGE_