From 594295a29cbc33fc04b7c0b87ecf664f036819a9 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 12 Dec 2011 07:48:36 +0000 Subject: simplify exist? implementation for avoiding exceptions This adds an internal :ruby_no_raise flag to the backend to avoid exceptions. --- lib/mogilefs/backend.rb | 6 ++++-- lib/mogilefs/mogilefs.rb | 7 ++----- test/test_mogilefs_integration.rb | 2 ++ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/mogilefs/backend.rb b/lib/mogilefs/backend.rb index d04247b..f33c42d 100644 --- a/lib/mogilefs/backend.rb +++ b/lib/mogilefs/backend.rb @@ -264,11 +264,13 @@ class MogileFS::Backend # Performs the +cmd+ request with +args+. def do_request(cmd, args, idempotent = false) - request = make_request cmd, args + no_raise = args.delete(:ruby_no_raise) + request = make_request(cmd, args) @mutex.synchronize do begin io = dispatch_unlocked(request) - line = io.timed_gets(@timeout) and return parse_response(line) + line = io.timed_gets(@timeout) and + return parse_response(line, no_raise ? request : nil) idempotent or raise EOFError, "end of file reached after: #{request.inspect}" diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb index 005bb19..1ec357d 100644 --- a/lib/mogilefs/mogilefs.rb +++ b/lib/mogilefs/mogilefs.rb @@ -117,11 +117,8 @@ class MogileFS::MogileFS < MogileFS::Client # Returns +true+ if +key+ exists, +false+ if not def exist?(key) - rv = nil - args = { :key => key, :domain => @domain } - @backend.pipeline_dispatch(:get_paths, args) { |x| rv = (Hash === x) } - @backend.pipeline_wait(1) - rv + args = { :key => key, :domain => @domain , :ruby_no_raise => true} + Hash === @backend.get_paths(args) end # Get the URIs for +key+ (paths) as URI::HTTP objects diff --git a/test/test_mogilefs_integration.rb b/test/test_mogilefs_integration.rb index 2ce8159..ba9ffbb 100644 --- a/test/test_mogilefs_integration.rb +++ b/test/test_mogilefs_integration.rb @@ -8,7 +8,9 @@ class TestMogileFSIntegration < TestMogIntegration end def test_CRUD + assert ! @client.exist?("CRUD") assert_equal 4, @client.store_content("CRUD", "default", "DATA") + assert @client.exist?("CRUD") assert_equal 4, @client.size("CRUD") assert_equal "DATA", @client.get_file_data("CRUD") assert_equal "DAT", @client.get_file_data("CRUD", nil, 3) -- cgit v1.2.3-24-ge0c7