about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-11-07 05:32:51 +0000
committerEric Wong <normalperson@yhbt.net>2011-11-07 05:32:51 +0000
commitc4e2b81f2493f0a0013ba03c11b74a61f3ca56f6 (patch)
treea3263b68457f9a06e097b2c0a51b26b02b77454a
parente3cbb44e8ef085421e2e001ba1382259242ce793 (diff)
downloadmogilefs-client-c4e2b81f2493f0a0013ba03c11b74a61f3ca56f6.tar.gz
This retains backwards compatibility and users of MogileFS 2.x
to change replpolicy along with mindevcount.
-rw-r--r--lib/mogilefs/admin.rb41
1 files changed, 25 insertions, 16 deletions
diff --git a/lib/mogilefs/admin.rb b/lib/mogilefs/admin.rb
index 5dc01d8..6608fe1 100644
--- a/lib/mogilefs/admin.rb
+++ b/lib/mogilefs/admin.rb
@@ -194,24 +194,24 @@ class MogileFS::Admin < MogileFS::Client
   end
 
   ##
-  # Creates a new class in +domain+ named +klass+ with files replicated to
-  # +mindevcount+ devices.  Returns nil on failure.
+  # Creates a new class in +domain+ named +klass+ with +policy+ for
+  # replication.  Raises on failure.
 
-  def create_class(domain, klass, mindevcount)
-    modify_class(domain, klass, mindevcount, :create)
+  def create_class(domain, klass, policy)
+    modify_class(domain, klass, policy, :create)
   end
 
   ##
-  # Updates class +klass+ in +domain+ to be replicated to +mindevcount+
-  # devices.  Returns nil on failure.
+  # Updates class +klass+ in +domain+ with +policy+ for replication.
+  # Raises on failure.
 
-  def update_class(domain, klass, mindevcount)
-    modify_class(domain, klass, mindevcount, :update)
+  def update_class(domain, klass, policy)
+    modify_class(domain, klass, policy, :update)
   end
 
   ##
-  # Removes class +klass+ from +domain+.  Returns true if successful, false if
-  # not.
+  # Removes class +klass+ from +domain+.  Returns true if successful.
+  # Raises on failure
 
   def delete_class(domain, klass)
     ! @backend.delete_class(:domain => domain, :class => klass).nil?
@@ -256,14 +256,23 @@ class MogileFS::Admin < MogileFS::Client
 
   ##
   # Modifies +klass+ on +domain+ to store files on +mindevcount+ devices via
-  # +action+.  Returns the class name if successful, nil if not.
+  # +action+.  Returns the class name if successful, raises if not
 
-  def modify_class(domain, klass, mindevcount, action)
+  def modify_class(domain, klass, policy, action)
     raise MogileFS::ReadOnlyError if readonly?
-    res = @backend.send("#{action}_class", :domain => domain, :class => klass,
-                                          :mindevcount => mindevcount)
-
-    res ? res['class'] : nil
+    args = { :domain => domain, :class => klass }
+    case policy
+    when Integer
+      args[:mindevcount] = policy
+    when String
+      args[:replpolicy] = policy
+    when Hash
+      args.merge!(policy)
+    else
+      raise ArgumentError,
+           "policy=#{policy.inspect} not understood for #{action}_class"
+    end
+    @backend.__send__("#{action}_class", args)["class"]
   end
 
   ##