oVirt imageio, replacing pure python client, used to implement nbd-http proxy
In this email I'm trying to assemble some requirements for such a
library, and I've also attempted to categorize them according to how
difficult they might be to implement. I guess everyone will have
their own opinions on which features are most "required" and which are
optional, but I've added mine below too.
Did I miss out anything?
1 = easy to implement ... 5 = hard to implement
|
| R* = required, library could not be used without it
| R = required
| O+ = optional, but very useful for many users
| O = optional
| O- = optional, not likely to be useful for many users
| |
v v
1 R* Library which runs in userspace, callable from C programs
3 O+ Callable from other programming languages, eg Python etc.
1 R* Connect to Unix domain socket
1 R* Connect to TCP port
1 R Connect to TCP port over IPv6
1 O- Connect to arbitrary file descriptor [eg. for nbdkit -s]
2 R Synchronous support for easy initial use
5 O+ Non-blocking/asynch support, use with select/poll
4 O+ Integrates with external main loops, glib2, APR pollset, etc.
4 O TLS support using X.509 certs
4 O TLS-PSK support
5 O NBD MULTI_CONN
5 O NBD out of order requests on single socket
2 O- Old-style protocol
3 R NBD_OPT_INFO mode [required for qemu]
5 O NBD structured replies
Should be O+, this gives huge performance improvment when reading mostly empty range, even without block status.
This is also not so hard to implement, maybe 3?
3 O+ NBD block status querying
Should be able to query qemu meta context
Nir