about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2012-06-29 20:06:31 +0000
committerEric Wong <normalperson@yhbt.net>2012-06-29 20:19:35 +0000
commitdadf046dd86a18329140bb0c206c4a0b989825f1 (patch)
tree01df0be2ddd6b4ab74c5f7208081383e5935838e
parent920408e2c94fbe84331aab5ab4b0c402024817aa (diff)
downloadmogilefs-client-dadf046dd86a18329140bb0c206c4a0b989825f1.tar.gz
The ability to create devices from the Ruby API might be
useful to somebody, especially when writing test cases.
-rw-r--r--lib/mogilefs/admin.rb20
-rw-r--r--lib/mogilefs/backend.rb1
-rw-r--r--test/fresh.rb8
3 files changed, 26 insertions, 3 deletions
diff --git a/lib/mogilefs/admin.rb b/lib/mogilefs/admin.rb
index 0927e47..19f6858 100644
--- a/lib/mogilefs/admin.rb
+++ b/lib/mogilefs/admin.rb
@@ -255,6 +255,26 @@ class MogileFS::Admin < MogileFS::Client
   end
 
   ##
+  # Creates device with Integer +devid+ on +host+
+  # +host+ may be an integer for hostid or String for hostname
+  def create_device(host, devid, opts = {})
+    raise MogileFS::ReadOnlyError if readonly?
+    opts = opts.dup
+
+    case host
+    when Integer
+      opts[:hostid] = host
+    when String
+      opts[:hostname] = host
+    else
+      raise ArgumentError, "host=#{host.inspect} is not a String or Integer"
+    end
+
+    opts[:devid] = devid
+    ! @backend.create_device(opts).nil?
+  end
+
+  ##
   # Changes the device status of +device+ on +host+ to +state+ which can be
   # 'alive', 'down', or 'dead'.
 
diff --git a/lib/mogilefs/backend.rb b/lib/mogilefs/backend.rb
index f611cbd..f578257 100644
--- a/lib/mogilefs/backend.rb
+++ b/lib/mogilefs/backend.rb
@@ -114,6 +114,7 @@ class MogileFS::Backend
   add_idempotent_command :list_fids
   add_idempotent_command :stats
   add_idempotent_command :get_domains
+  add_command :create_device
   add_command :create_domain
   add_command :delete_domain
   add_command :create_class
diff --git a/test/fresh.rb b/test/fresh.rb
index 2fddaaf..7ccf3cf 100644
--- a/test/fresh.rb
+++ b/test/fresh.rb
@@ -124,11 +124,13 @@ EOF
     assert File.directory?("#@docroot/dev2")
     yield_for_monitor_update { @admin.get_hosts.empty? or break }
 
-    # TODO: allow adding devices via our MogileFS::Admin class
-    mogadm!("device", "add", "me", "dev1")
+    me = @admin.get_hosts.find { |x| x["hostname"] == "me" }
+    assert_instance_of Hash, me, me.inspect
+    assert_kind_of Integer, me["hostid"], me
+    assert_equal true, @admin.create_device(me["hostid"], 1)
     yield_for_monitor_update { @admin.get_devices.empty? or break }
     wait_for_usage_file "dev1"
-    mogadm!("device", "add", "me", "dev2")
+    assert_equal true, @admin.create_device("me", 2)
     wait_for_usage_file "dev2"
     out = err = nil
     tries = 0