is there a way to delete an object from storage with less than 3 requests to the storage provider?

35 views
Skip to first unread message

Gavriel Fleischer

unread,
Oct 19, 2015, 3:06:40 AM10/19/15
to ruby-fog
Hi,

I started using fog storage for a project. I do the most simple actions: upload an object, get the object, delete the object. My code looks something like this:

storage = get_storage(...) // S3 / OpenStack / ...
dir = storage.directories.get(bucket)
if !dir.nil?
  dir.files.create(key: key, body: body)

  # or:
  dir.files.get(key)

  #or
  file = dir.files.get(key)
  if !file.nil?
    file.destroy
  end
end

In all cases there's a 1st step to get the directory, which does a request to the storage engine.
Then there's another step to do whatever I'd like to do (in case of delete there's even a 3rd step).

However if I look at let's say the Amazon S3 api, it's clear that deleting an object doesn't need 3 requests to amazon.

Is there a way to use fog but make it do less requests to the storage provider?

Benjamin Manns

unread,
Oct 19, 2015, 7:44:19 AM10/19/15
to ruby...@googlegroups.com
Hi Gavriel,

Generally Fog::Foo::Bar#get will issue a GET request to your storage provider that will verify that the file or directory exists and fetch metadata about it. If you want to skip that step, you can usually use new(key: key) instead of get(key).

In your example:

dir = storage.directories.new(key: bucket)
file = dir.files.new(key: key)
file.destroy

would issue a single DELETE request against bucket/key. The request may raise an exception if the file or bucket does not exist.

Ben

--
You received this message because you are subscribed to the Google Groups "ruby-fog" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ruby-fog+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Reply all
Reply to author
Forward
0 new messages