about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2017-01-26 21:42:54 +0000
committerEric Wong <e@80x24.org>2017-01-26 21:42:54 +0000
commitd080b456e129e2ebffdcdbfb601895b4c93dc1e4 (patch)
tree2fb09091fbb60717cb97f13940bc261501d0d218
parentd32775bded58382bcfb9196829eb356eed267e08 (diff)
downloadmogilefs-client-d080b456e129e2ebffdcdbfb601895b4c93dc1e4.tar.gz
The optional net-http-persistent RubyGem we use has a major
incompatible change from the 2.x versions.  Support them both.
-rw-r--r--examples/stale_fid_checker.rb4
-rw-r--r--lib/mogilefs/mogilefs.rb11
-rw-r--r--test/test_nhp_compat.rb25
3 files changed, 37 insertions, 3 deletions
diff --git a/examples/stale_fid_checker.rb b/examples/stale_fid_checker.rb
index 2dab866..769ffda 100644
--- a/examples/stale_fid_checker.rb
+++ b/examples/stale_fid_checker.rb
@@ -34,7 +34,9 @@ ARGV.options do |x|
 end
 
 adm = MogileFS::Admin.new(:hosts => trackers)
-NHP = Net::HTTP::Persistent.new(File.basename($0))
+name = File.basename($0)
+Net::HTTP::Persistent::VERSION >= 3.0 and name = { :name => name }
+NHP = Net::HTTP::Persistent.new(name)
 client = MogileFS::MogileFS.new(:hosts => trackers, :domain => "none")
 
 def start_perdev_thread(pfx)
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index d17f0b8..724dfb6 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -73,9 +73,9 @@ class MogileFS::MogileFS < MogileFS::Client
 
     @get_file_data_timeout = args[:get_file_data_timeout] || 5
     @new_file_max_time = args[:new_file_max_time] || 3600.0
-    @nhp_get = MogileFS::NHP.new('get')
+    @nhp_get = nhp_new('get')
     @nhp_get.open_timeout = @nhp_get.read_timeout = @get_file_data_timeout
-    @nhp_put = MogileFS::NHP.new('put')
+    @nhp_put = nhp_new('put')
     @nhp_put.open_timeout = @nhp_put.read_timeout = @new_file_max_time
 
     raise ArgumentError, "you must specify a domain" unless @domain
@@ -548,4 +548,11 @@ class MogileFS::MogileFS < MogileFS::Client
       end
     end
   end
+
+  def nhp_new(name) # :nodoc:
+    Net::HTTP::Persistent::VERSION.to_f >= 3.0 and name = { :name => name }
+    MogileFS::NHP.new(name)
+  rescue NameError
+    MogileFS::NHP.new(name)
+  end
 end
diff --git a/test/test_nhp_compat.rb b/test/test_nhp_compat.rb
new file mode 100644
index 0000000..282dcf5
--- /dev/null
+++ b/test/test_nhp_compat.rb
@@ -0,0 +1,25 @@
+require 'test/unit'
+
+class TestNhpCompat < Test::Unit::TestCase
+
+  def test_nhp_compat
+    ver_test_nhp('~> 2.9')
+    ver_test_nhp('~> 3.0')
+  end
+
+  def ver_test_nhp(verspec)
+    pid = fork do
+      begin
+        gem 'net-http-persistent', verspec
+      rescue LoadError => e
+        warn "SKIPPING net-http-persistent #{verspec}\n" \
+             "#{e.message} (#{e.class})\n"
+      end
+      require 'mogilefs'
+      mg = MogileFS::MogileFS.new :hosts => %w(127.0.0.1:7500), :domain => 'x'
+      exit!(Net::HTTP::Persistent === mg.nhp_new('foo'))
+    end
+    _, status = Process.waitpid2(pid)
+    assert status.success?, status.inspect
+  end
+end