Riak Client Resources, Deleting a Key Doesn't Remove it from bucket.keys

Sean Cribbs sean at basho.com
Thu May 26 10:35:22 EDT 2011


Keith,

There was a pull-request issue out for this on the Github project (https://github.com/seancribbs/ripple/pull/168). For various reasons, the list of keys is memoized in the Riak::Bucket instance.  Passing :reload => true to the #keys method will cause it to refresh.  I like to discourage list-keys, but with the memoized list you don't shoot yourself in the foot as often.

Sean Cribbs <sean at basho.com>
Developer Advocate
Basho Technologies, Inc.
http://basho.com/

On May 26, 2011, at 10:29 AM, Keith Bennett wrote:

> All -
> 
> I just started working with Riak, and am using the riak-client Ruby gem.
> 
> When I delete a key from a bucket, and try to fetch the value associated with that key, I get a 404 error (which is reasonable).  However, it remains in the bucket's list of keys (i.e. the value returned by bucket.keys().  Why is the key still reported to exist in the bucket? Is bucket.keys cached, and therefore unaware of the deletion? Here's a riak-client Ruby script and its output in irb that illustrates this:
> 
> ree-1.8.7-2010.02 :001 > require 'riak'
> => true 
> ree-1.8.7-2010.02 :002 > 
> ree-1.8.7-2010.02 :003 >   client = Riak::Client.new
> => #<Riak::Client http://127.0.0.1:8098> 
> ree-1.8.7-2010.02 :004 > bucket = client['links']
> => #<Riak::Bucket {links}> 
> ree-1.8.7-2010.02 :005 > key = bucket.keys.first
> => "4000-17.xml" 
> ree-1.8.7-2010.02 :006 > object = bucket[key]
> => #<Riak::RObject {links,4000-17.xml} [text/xml]:(6430 bytes)> 
> ree-1.8.7-2010.02 :007 > object.delete
> => #<Riak::RObject {links,4000-17.xml} [text/xml]:(6430 bytes)> 
> ree-1.8.7-2010.02 :008 > bucket.keys.first
> => "4000-17.xml" 
> ree-1.8.7-2010.02 :009 > object = bucket[key]
> Riak::HTTPFailedRequest: Expected [200, 300] from Riak but received 404. not found
> 
> 	from /Users/kbennett/.rvm/gems/ree-1.8.7-2010.02/gems/riak-client-0.9.4/lib/riak/client/net_http_backend.rb:55:in `perform'
> 	from /Users/kbennett/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:1054:in `request'
> 	from /Users/kbennett/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:2142:in `reading_body'
> 	from /Users/kbennett/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:1053:in `request'
> 	from /Users/kbennett/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:1037:in `request'
> 	from /Users/kbennett/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:543:in `start'
> 	from /Users/kbennett/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:1035:in `request'
> 	from /Users/kbennett/.rvm/gems/ree-1.8.7-2010.02/gems/riak-client-0.9.4/lib/riak/client/net_http_backend.rb:47:in `perform'
> 	from /Users/kbennett/.rvm/gems/ree-1.8.7-2010.02/gems/riak-client-0.9.4/lib/riak/client/net_http_backend.rb:46:in `tap'
> 	from /Users/kbennett/.rvm/gems/ree-1.8.7-2010.02/gems/riak-client-0.9.4/lib/riak/client/net_http_backend.rb:46:in `perform'
> 	from /Users/kbennett/.rvm/gems/ree-1.8.7-2010.02/gems/riak-client-0.9.4/lib/riak/client/http_backend/transport_methods.rb:59:in `get'
> 	from /Users/kbennett/.rvm/gems/ree-1.8.7-2010.02/gems/riak-client-0.9.4/lib/riak/client/http_backend.rb:72:in `fetch_object'
> 	from /Users/kbennett/.rvm/gems/ree-1.8.7-2010.02/gems/riak-client-0.9.4/lib/riak/bucket.rb:101:in `[]'
> 	from riak-delete-failure.rb:9
> 
> Thanks,
> Keith
> 
> 
> 
> _______________________________________________
> riak-users mailing list
> riak-users at lists.basho.com
> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com





More information about the riak-users mailing list