about summary refs log tree commit homepage
path: root/lib/mogilefs
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2017-01-27 02:53:41 +0000
committerEric Wong <e@80x24.org>2017-01-27 03:41:52 +0000
commit42402dbe14f54220ffd208e935b33c997feacd24 (patch)
tree20846bb60d20051c3f64a7a131b9cfd8524a75b8 /lib/mogilefs
parentdd53d097384154b9d2d100a9079f4dbf681a0925 (diff)
downloadmogilefs-client-42402dbe14f54220ffd208e935b33c997feacd24.tar.gz
This is a workaround for <https://bugs.ruby-lang.org/issues/13085>
since we use non-blocking sockets anyways.
Diffstat (limited to 'lib/mogilefs')
-rw-r--r--lib/mogilefs/socket_common.rb13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/mogilefs/socket_common.rb b/lib/mogilefs/socket_common.rb
index 5ba8c10..9383731 100644
--- a/lib/mogilefs/socket_common.rb
+++ b/lib/mogilefs/socket_common.rb
@@ -56,4 +56,17 @@ module MogileFS::SocketCommon
   def readpartial(size, buf = "", timeout = 5)
     timed_read(size, buf, timeout) or raise EOFError, "end of file reached"
   end
+
+  # workaround for https://bugs.ruby-lang.org/issues/13085
+  # (excessive garbage from IO#write)
+  # XXX maybe this can be fixed for Ruby 2.5 final, but maybe not:
+  # Update this when Ruby 2.5 is released on 2017-12-25
+  if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'ruby' &&
+     RUBY_VERSION.to_f >= 2.2 && RUBY_VERSION.to_f <= 2.5
+    def write(buf)
+      # Blocking TCP writes would error out long before one day,
+      # and MogileFS won't allow file creations which take over a day.
+      timed_write(buf, 86400)
+    end
+  end
 end