Client(curl) gets partial content while proxy-server got ChunkRead timeout
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Object Storage (swift) |
Fix Released
|
High
|
Unassigned |
Bug Description
It looks like a potential bug while proxy-server encounter ChunkRead timeout from a replica. There's a chance it ended with the new byte range content-length. And client is keep waiting for more bytes.
https:/
Reproduce
* Upload a 325MB file to a 3replicas container
* Run a simple script to spawn 50 curl instances to download the file. Please change the domain name and file name.
```
#! /bin/bash
for i in {0..150}
do
curl -o ./tmp/file$i -v "http://
done
```
```
* My env is 2 nodes PACO with 8 disks in total. 2vCPU and 2GB vRAM.
* The latest Swift version 2.15.1.2 provided by us in controller 5.7.
* CentOS 7.2 OS.
I run the fetch script from my mac.
This looks like problem from either network latency under high concurrency or single disk IO bound causes the proxy-server timeout chunkRead then try another replica to keep pulling data from.
Changed in swift: | |
status: | New → Confirmed |
importance: | Undecided → High |
I also want to add that this issue is not limited to small cluster. We have originally noticed it in big production cluster (multiple Swift Proxies and Swift Object nodes) and can easily reproduce in a small cluster as well. Issue was seen during high concurrent reads (100+) of same object of around 300+MB.