From 7cd3f1a2ff9a1ffdc44f7128c88267d76fae6429 Mon Sep 17 00:00:00 2001 From: Wesley Beary Date: Tue, 23 Jun 2009 00:04:29 -0700 Subject: [PATCH] setting groundwork for benchs/optimization --- bench.rb => benchs/fog_vs.rb | 10 +++++----- benchs/headers_split_vs_match.rb | 19 +++++++++++++++++++ lib/fog/aws.rb | 13 +++++-------- 3 files changed, 29 insertions(+), 13 deletions(-) rename bench.rb => benchs/fog_vs.rb (85%) create mode 100644 benchs/headers_split_vs_match.rb diff --git a/bench.rb b/benchs/fog_vs.rb similarity index 85% rename from bench.rb rename to benchs/fog_vs.rb index 83ad9d71b..a20614fa2 100644 --- a/bench.rb +++ b/benchs/fog_vs.rb @@ -2,7 +2,7 @@ require 'rubygems' require 'benchwarmer' require 'right_aws' -$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib')) +$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) require 'fog/aws' data = File.open(File.expand_path('~/.s3conf/s3config.yml')).read @@ -17,7 +17,7 @@ raws = RightAws::S3Interface.new( ) raws.logger.level = 3 # ERROR -TIMES = 10 +TIMES = 100 Benchmark.bm(25) do |bench| bench.report('fog.put_bucket') do @@ -31,13 +31,13 @@ Benchmark.bm(25) do |bench| bench.report('fog.put_object') do TIMES.times do |x| - file = File.open(File.dirname(__FILE__) + '/spec/lorem.txt', 'r') + file = File.open(File.dirname(__FILE__) + '/../spec/lorem.txt', 'r') fog.put_object('fogbench', "lorem_#{x}", file) end end bench.report('raws.put') do TIMES.times do |x| - file = File.open(File.dirname(__FILE__) + '/spec/lorem.txt', 'r') + file = File.open(File.dirname(__FILE__) + '/../spec/lorem.txt', 'r') raws.put('rawsbench', "lorem_#{x}", file) end end @@ -63,4 +63,4 @@ Benchmark.bm(25) do |bench| bench.report('raws.delete_bucket') do raws.delete_bucket('rawsbench') end -end \ No newline at end of file +end diff --git a/benchs/headers_split_vs_match.rb b/benchs/headers_split_vs_match.rb new file mode 100644 index 000000000..fb79450ba --- /dev/null +++ b/benchs/headers_split_vs_match.rb @@ -0,0 +1,19 @@ +require 'rubygems' +require 'benchwarmer' + +COUNT = 1000 +data = "Content-Length: 100" +Benchmark.bmbm(25) do |bench| + bench.report('regex') do + COUNT.times do + header = data.match(/(.*):\s(.*)/) + "#{header[1]}: #{header[2]}" + end + end + bench.report('split') do + COUNT.times do + header = data.split(': ') + "#{header[0]}: #{header[1]}" + end + end +end \ No newline at end of file diff --git a/lib/fog/aws.rb b/lib/fog/aws.rb index 0db0a9fc7..86f501363 100644 --- a/lib/fog/aws.rb +++ b/lib/fog/aws.rb @@ -23,9 +23,6 @@ module Fog end def request(params) - params = { - :headers => {} - }.merge(params) uri = URI.parse(params[:url]) path = "#{uri.path}" if uri.query @@ -38,6 +35,7 @@ module Fog end request = "#{params[:method]} #{path} HTTP/1.1\r\n" + params[:headers] ||= {} params[:headers]['Host'] = uri.host if params[:body] params[:headers]['Content-Length'] = params[:body].length @@ -51,13 +49,12 @@ module Fog response = AWS::Response.new response.status = @connection.readline[9..11].to_i while true - data = @connection.readline - if data == "\r\n" + data = @connection.readline[0..-3] + if data == "" break end - if header = data.match(/(.*):\s(.*)\r\n/) - response.headers[header[1]] = header[2] - end + header = data.split(': ') + response.headers[header[0]] = header[1] end if response.headers['Content-Length'] content_length = response.headers['Content-Length'].to_i