On Thu, Apr 05, 2018 at 02:12:28AM -0000, john.calc...@gmail.com wrote:
> What is jclouds's general policy with regard to putting a blob to a cloud 
> service where the blob already exists and the cloud provider doesn't allow 
> overwrites?
> Seems like it would be nice to be able to treat the operation like it's an 
> idempotent http PUT, but if the service disallows overwrites, jclouds would 
> receive an exception in this case. Jclouds could then verify that the 
> existing object has the same content and silently return "ok" as if the put 
> worked. 
> However, what happens if the cloud service has an object with the same name 
> and different content? The only way to maintain the idempotent quality would 
> be to silently delete the existing object and try the put again under the 
> covers - this seems imprudent to me and unlikely to be the current 
> functionality.

The closet analog is AtmosUtils.putBlob which retries on
KeyAlreadyExistsException after removing.  Generally the jclouds
portable abstraction tries to make all blobstores act the same and uses
the native behavior for the providers.  Which blobstore has similar
behavior?  I am not sure how we should handle this for almost
S3-compatible implementations like Hitachi.

> P.S. I'd look this stuff up myself if I could only trace my way to the bottom 
> levels of the jclouds code. There's so much interface wrapping going on in 
> there, along with dependency injection, it's nearly impossible to tell where 
> the rubber hits the road. If anyone can provide a hint about how to read the 
> code from user-level to wire-level, I'd really appreciate it.

jclouds uses metaprogramming which allows compact notation but obscures
the intent.  Most of the magic lies in RestAnnotationProcessor if you
want to see how it works.

Andrew Gaul

Reply via email to