about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2012-10-09 00:24:43 +0000
committerEric Wong <normalperson@yhbt.net>2012-10-09 00:33:14 +0000
commitf552185695b2fd80502ca27b81d09aaa3988a0fc (patch)
tree4dc9559b971b1050fdc8bbc9df0c231d48563bdd
parent436f57af99152d62c8c56fda394cbb2159747fe9 (diff)
downloadmogilefs-client-f552185695b2fd80502ca27b81d09aaa3988a0fc.tar.gz
Array#pop is faster than Array#shift in most Ruby versions
as the latter may require memmove() of all elements.
Additionally, ensure ordering is correct if a backend
chokes up (for each_file_info, too).
-rw-r--r--lib/mogilefs/mogilefs.rb10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index 426217e..f5cb096 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -131,7 +131,7 @@ class MogileFS::MogileFS < MogileFS::Client
            MogileFS::InvalidResponseError, # truncated response
            MogileFS::Timeout
       @backend.shutdown
-      keys = ordered - ready.keys
+      keys = (ordered - ready.keys).reverse!
       retry
     end while limit == nil || limit > 0
   rescue
@@ -390,7 +390,7 @@ class MogileFS::MogileFS < MogileFS::Client
 
   def list_keys_verbose(keys, block) # :nodoc:
     # emulate the MogileFS::Mysql interface, slowly...
-    ordered = keys.dup
+    ordered = keys.reverse
     ready = {}
     on_file_info = lambda do |info|
       Hash === info or raise info
@@ -398,8 +398,8 @@ class MogileFS::MogileFS < MogileFS::Client
 
       # deal with trackers with multiple queryworkers responding out-of-order
       ready[info["key"]] = info
-      while info = ready.delete(ordered[0])
-        block.call(ordered.shift, info["length"], info["devcount"])
+      while info = ready.delete(ordered[-1])
+        block.call(ordered.pop, info["length"], info["devcount"])
       end
     end
     opts = { :domain => @domain }
@@ -422,7 +422,7 @@ class MogileFS::MogileFS < MogileFS::Client
            MogileFS::InvalidResponseError, # truncated response
            MogileFS::Timeout
       @backend.shutdown
-      keys = ordered - ready.keys
+      keys = (ordered - ready.keys).reverse!
       retry
     rescue
       @backend.shutdown