about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-12-06 20:54:06 +0000
committerEric Wong <normalperson@yhbt.net>2011-12-06 13:09:01 -0800
commit2c4dc76c6a4840865c83177ceeb217b859e20df8 (patch)
tree39c92ce6fdae8c90b998cf1997b74d7b937a2363
parentdb55f4b60ccb312881d84eea8c15daf115a7f1bd (diff)
downloadmogilefs-client-2c4dc76c6a4840865c83177ceeb217b859e20df8.tar.gz
-rw-r--r--lib/mogilefs/backend.rb1
-rw-r--r--lib/mogilefs/mogilefs.rb3
-rw-r--r--test/test_mogilefs_integration.rb17
3 files changed, 20 insertions, 1 deletions
diff --git a/lib/mogilefs/backend.rb b/lib/mogilefs/backend.rb
index 7818f6e..0319525 100644
--- a/lib/mogilefs/backend.rb
+++ b/lib/mogilefs/backend.rb
@@ -152,6 +152,7 @@ class MogileFS::Backend
   add_error 'unknown_key'
   add_error 'unknown_state'
   add_error 'unreg_domain'
+  add_error 'unreg_class'
 
   def shutdown_unlocked(do_raise = false) # :nodoc:
     @pending = []
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index 6059f5f..22dd39c 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -129,7 +129,7 @@ class MogileFS::MogileFS < MogileFS::Client
   # Consider using store_file instead of this method for large files.
   # This requires a block passed to it and operates like File.open.
   # This atomically replaces existing data stored as +key+ when
-  def new_file(key, args = nil, bytes = 0) # :yields: file
+  def new_file(key, args = nil, bytes = nil) # :yields: file
     raise MogileFS::ReadOnlyError if readonly?
     opts = { :key => key, :multi_dest => 1 }
     case args
@@ -157,6 +157,7 @@ class MogileFS::MogileFS < MogileFS::Client
     opts.merge!(args) if Hash === args
     opts[:backend] = @backend
     opts[:fid] = res['fid']
+    opts[:content_length] ||= bytes if bytes
 
     case (dests[0][1] rescue nil)
     when %r{\Ahttp://}
diff --git a/test/test_mogilefs_integration.rb b/test/test_mogilefs_integration.rb
index 8b5e3c1..57ea675 100644
--- a/test/test_mogilefs_integration.rb
+++ b/test/test_mogilefs_integration.rb
@@ -210,6 +210,23 @@ class TestMogileFSIntegration < TestMogIntegration
       @client.new_file("a", :content_md5 => :trailer) { |f| f.big_io = r }
     end
     assert_equal "HIHI", @client.get_file_data("a")
+
+    # legacy, in case anybody used it
+    rv = @client.new_file("a",{:class => "default"}, 6)
+    assert_equal 2, rv.write("HI")
+    assert_raises(MogileFS::SizeMismatchError) { rv.close }
+    assert_equal "HIHI", @client.get_file_data("a")
+
+    rv = @client.new_file("a",{:class => "default"}, 2)
+    assert_equal 2, rv.write("HI")
+    assert_nil rv.close
+    assert_equal "HI", @client.get_file_data("a")
+    assert_raises(MogileFS::Backend::UnregClassError) {
+      @client.new_file("a", "non-existent", 2)
+    }
+    assert_raises(MogileFS::Backend::UnregClassError) {
+      @client.new_file("a", :class => "non-existent")
+    }
     ensure
       r.close if r
   end