TCP leak between proxy and object-server on client disconnection
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Object Storage (swift) |
New
|
Undecided
|
Unassigned |
Bug Description
Policy storage: Erasure coding
Action : PUT
The proxy is leaking some socket when the client disconnects during the upload.
How to reproduce (easier on dlo/slo upload) :
$ timeout 5 swift --os-auth-token $TOKEN --os-storage-url $STORAGE_URL upload container ./slo --segment-size 100000000
$ netstat -tn | grep -P ":60\d\d\s" | grep -v TIME_WAIT | awk '{print $6}'
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
after the 'client_timeout' on the object-server side (object-
$ netstat -tn | grep -P ":60\d\d\s" | grep -v TIME_WAIT | awk '{print $6}'
CLOSE_WAIT
CLOSE_WAIT
CLOSE_WAIT
CLOSE_WAIT
CLOSE_WAIT
CLOSE_WAIT
These CLOSE_WAIT sockets will be freed only on service reload
proxy-server.log :
Feb 6 13:25:23 localhost proxy-server: Client disconnected without sending enough data (txn: txe9f04338c4714
Potential threat: no more socket can be instantiated for a single processus, generating a denial of service.
Changed in swift: | |
assignee: | nobody → Jean Caron (jean.caron) |
assignee: | Jean Caron (jean.caron) → nobody |
Hello Jean. I have tried to reproduce this against the latest code from master (I made sure to use an EC policy), and I have not yet. I used the same commands you did. I see the " Client disconnected without sending enough data" in my proxy.error log. But after the timeout, there were no 'CLOSE_WAIT' connections. How large was your ./slo file?