Hi, team. In looking through changes of late, our BlobStore is now quite tangled with guava. For example, we now primarily use complex types like MediaType and Hash to represent values that often pass directly through jclouds. This conversion not only makes jclouds needlessly at the whim of guava compatibility, but is also unnecessarily expensive.
For example, the Content-MD5 header is used as a part of conditional ops. converting that to and from a guava object doesn't help unless in the case users are storing a serialized form of the guava object. Since Content-MD5 is a serialized form, this is just thrashing when applied to the common context of http. Another example: Payload starting to weld itself to ByteSource. This direction makes me very uneasy for reasons mentioned earlier, including that no http transport actually consumes that type! Moreover, pre-buffered types like strings, arrays, and files are already special-cased in most IO transports. While undoing the above is possible, I'm getting tired of the constant work in this vein. Rather than chase around, continuing to undo the last year's questionable guava proliferation, it would be more pleasant to just start over. In summary, I would like to fork BlobStore so that it can progress in a way that does not require using guava for everything, or unwrapping standard http headers in a very expensive way, just so we can re-wrap them again. The only times we should consider unwrapping values is when there's code that needs to act on them as such (think cache-control). Otherwise, leave them alone. please. and don't make users give us expensive things! As a part of this, I can also divorce BlobStore from the mutable hierarchy, set bias, and kooky expensive ops like countBlobs. The new BlobStore will have a good chance at running on android, for reasons including ditching guava. I will like it again, and that will help me want to continue to maintain it. If anyone is interested in helping on this, let me know. I'll open a jira in a bit. -A