From f552185695b2fd80502ca27b81d09aaa3988a0fc Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 9 Oct 2012 00:24:43 +0000 Subject: [PATCH] client: small speedup for list_keys_verbose 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). --- lib/mogilefs/mogilefs.rb | 10 +++++----- 1 file 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 -- 2.11.4.GIT