container-sync should use HTTP pipelining
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Object Storage (swift) |
Invalid
|
Wishlist
|
Unassigned |
Bug Description
The container sync processes opens a new HTTP connection, syncs an object and then tears it down for *every object*. This is hugely inefficient and while it may work with small containers, it's impossible to work with for large containers, especially if the remote cluster is multiple ms RTT apart.
A way to solve this would be to use a custom protocol to do multiple operations in a single HTTP request, instead of naively behaving as a client to the remote proxy.
This is obviously a large architectural change, but in the meantime, a large portion of the ineffiency can be alleviated by using HTTP pipelining and keeping the same connection open slow-started and everything. Even better, you could have a pool of such connections and transfer multiple objects at the same time.
Changed in swift: | |
importance: | Undecided → Wishlist |
Changed in swift: | |
status: | New → Triaged |
Changed in swift: | |
assignee: | nobody → David Hadas (david-hadas) |
marking this as invalid because of age. It's true that container sync should be "better", but there's a lot that's happened in swift over the pas 2 years since this was filed that we can learn from (like the container reconciler).