From 9b1339dfe76e04e4a21d39301d2236859dc03bfd Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 30 Oct 2012 23:12:10 +0000 Subject: [PATCH] new_file: support create_open_args and create_close_args This lets us send unsupported/new arguments to plugins and matches the functionality of the Perl client library. --- lib/mogilefs/mogilefs.rb | 3 ++- lib/mogilefs/new_file/common.rb | 4 +++- test/test_fresh.rb | 26 ++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb index 76325cb..7503bba 100644 --- a/lib/mogilefs/mogilefs.rb +++ b/lib/mogilefs/mogilefs.rb @@ -257,12 +257,13 @@ class MogileFS::MogileFS < MogileFS::Client case args when Hash opts[:domain] = args[:domain] + open_args = args[:create_open_args] klass = args[:class] and "default" != klass and opts[:class] = klass when String opts[:class] = args if "default" != args end opts[:domain] ||= @domain - res = @backend.create_open(opts) + res = @backend.create_open(open_args ? open_args.merge(opts) : opts) dests = if dev_count = res['dev_count'] # multi_dest succeeded (1..dev_count.to_i).map { |i| [res["devid_#{i}"], res["path_#{i}"]] } diff --git a/lib/mogilefs/new_file/common.rb b/lib/mogilefs/new_file/common.rb index 1d2b1a0..b901f67 100644 --- a/lib/mogilefs/new_file/common.rb +++ b/lib/mogilefs/new_file/common.rb @@ -35,6 +35,8 @@ module MogileFS::NewFile::Common end def create_close(devid, uri, bytes_uploaded) + close_args = @opts[:create_close_args] + dest_info = @opts[:info] ||= {} dest_info["fid"] = @opts[:fid].to_i dest_info["key"] = @opts[:key] @@ -62,7 +64,7 @@ module MogileFS::NewFile::Common # twice will hurt us... backend.noop - backend.create_close(dest_info) + backend.create_close(close_args ? close_args.merge(dest_info) : dest_info) # make this look like file_info + get_uris dest_info.delete(:checksumverify) diff --git a/test/test_fresh.rb b/test/test_fresh.rb index 369e363..a87ebd5 100644 --- a/test/test_fresh.rb +++ b/test/test_fresh.rb @@ -90,4 +90,30 @@ class TestMogFresh < Test::Unit::TestCase ensure @admin.delete_class @domain, "check" end + + def test_create_open_close_opts + add_host_device_domain + client = MogileFS::MogileFS.new :hosts => @hosts, :domain => @domain + socket = client.backend.socket + args = { + :create_open_args => { :hello => "world" }, + :create_close_args => { :farewell => "goodnight" }, + } + io = client.new_file("foo", args) + socket.write "!recent\n" + buf = "" + buf << socket.readpartial(666) until buf =~ /\.\r?\n\z/ + line = buf.split(/\r?\n/).grep(/\screate_open\s/)[0] + assert_equal 0, buf.split(/\r?\n/).grep(/\screate_close\s/).size + assert_equal 0, buf.split(/\r?\n/).grep(/\sfarewell\s/).size + assert_match /\bhello=world\b/, line + assert_equal 1, io.write('.') + assert_nil io.close + + socket.write "!recent\n" + buf = "" + buf << socket.readpartial(666) until buf =~ /\.\r?\n\z/ + line = buf.split(/\r?\n/).grep(/\screate_close\s/)[0] + assert_match /\bfarewell=goodnight\b/, line + end end -- 2.11.4.GIT