remove most uri.parse calls, explicitly pass host/path
This commit is contained in:
parent
fec6fccae0
commit
b7a7f07e6c
|
@ -27,8 +27,6 @@ Benchmark.bmbm(25) do |bench|
|
||||||
raws.create_bucket('rawsbench')
|
raws.create_bucket('rawsbench')
|
||||||
end
|
end
|
||||||
|
|
||||||
print '-' * 64 << "\n"
|
|
||||||
|
|
||||||
bench.report('fog.put_object') do
|
bench.report('fog.put_object') do
|
||||||
TIMES.times do |x|
|
TIMES.times do |x|
|
||||||
file = File.open(File.dirname(__FILE__) + '/../spec/lorem.txt', 'r')
|
file = File.open(File.dirname(__FILE__) + '/../spec/lorem.txt', 'r')
|
||||||
|
@ -42,8 +40,6 @@ Benchmark.bmbm(25) do |bench|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
print '-' * 64 << "\n"
|
|
||||||
|
|
||||||
bench.report('fog.delete_object') do
|
bench.report('fog.delete_object') do
|
||||||
TIMES.times do |x|
|
TIMES.times do |x|
|
||||||
fog.delete_object('fogbench', "lorem_#{x}")
|
fog.delete_object('fogbench', "lorem_#{x}")
|
||||||
|
@ -55,8 +51,6 @@ Benchmark.bmbm(25) do |bench|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
print '-' * 64 << "\n"
|
|
||||||
|
|
||||||
bench.report('fog.delete_bucket') do
|
bench.report('fog.delete_bucket') do
|
||||||
fog.delete_bucket('fogbench')
|
fog.delete_bucket('fogbench')
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,20 +23,12 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
def request(params)
|
def request(params)
|
||||||
uri = URI.parse(params[:url])
|
unless params[:path] && params[:path][0] == '/'
|
||||||
path = "#{uri.path}"
|
params[:path] = '/' << params[:path].to_s
|
||||||
if uri.query
|
|
||||||
path << "?#{uri.query}"
|
|
||||||
end
|
end
|
||||||
host = "#{uri.host}"
|
request = "#{params[:method]} #{params[:path]} HTTP/1.1\r\n"
|
||||||
if (uri.scheme == "http" && uri.port != 80) ||
|
|
||||||
(uri.scheme == 'https' && uri.port != 443)
|
|
||||||
host << ":#{uri.port}"
|
|
||||||
end
|
|
||||||
|
|
||||||
request = "#{params[:method]} #{path} HTTP/1.1\r\n"
|
|
||||||
params[:headers] ||= {}
|
params[:headers] ||= {}
|
||||||
params[:headers]['Host'] = uri.host
|
params[:headers]['Host'] = params[:host]
|
||||||
if params[:body]
|
if params[:body]
|
||||||
params[:headers]['Content-Length'] = params[:body].length
|
params[:headers]['Content-Length'] = params[:body].length
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,6 @@ require 'cgi'
|
||||||
require 'digest/md5'
|
require 'digest/md5'
|
||||||
require 'hmac-sha1'
|
require 'hmac-sha1'
|
||||||
require 'mime/types'
|
require 'mime/types'
|
||||||
require 'uri'
|
|
||||||
|
|
||||||
require File.dirname(__FILE__) + '/s3/parsers'
|
require File.dirname(__FILE__) + '/s3/parsers'
|
||||||
|
|
||||||
|
@ -45,7 +44,7 @@ module Fog
|
||||||
:headers => {},
|
:headers => {},
|
||||||
:method => 'GET',
|
:method => 'GET',
|
||||||
:parser => Fog::Parsers::AWS::S3::GetServiceParser.new,
|
:parser => Fog::Parsers::AWS::S3::GetServiceParser.new,
|
||||||
:url => url
|
:url => @host
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -68,9 +67,9 @@ module Fog
|
||||||
request({
|
request({
|
||||||
:body => data,
|
:body => data,
|
||||||
:headers => {},
|
:headers => {},
|
||||||
|
:host => "#{bucket_name}.#{@host}",
|
||||||
:method => 'PUT',
|
:method => 'PUT',
|
||||||
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
:parser => Fog::Parsers::AWS::S3::BasicParser.new
|
||||||
:url => url(bucket_name)
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -88,9 +87,9 @@ module Fog
|
||||||
request({
|
request({
|
||||||
:body => data,
|
:body => data,
|
||||||
:headers => {},
|
:headers => {},
|
||||||
|
:host => "#{bucket_name}.#{@host}",
|
||||||
:method => 'PUT',
|
:method => 'PUT',
|
||||||
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
:parser => Fog::Parsers::AWS::S3::BasicParser.new
|
||||||
:url => url(bucket_name)
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -114,9 +113,10 @@ module Fog
|
||||||
query.chop!
|
query.chop!
|
||||||
request({
|
request({
|
||||||
:headers => {},
|
:headers => {},
|
||||||
|
:host => "#{bucket_name}.#{@host}",
|
||||||
:method => 'GET',
|
:method => 'GET',
|
||||||
:parser => Fog::Parsers::AWS::S3::GetBucketParser.new,
|
:parser => Fog::Parsers::AWS::S3::GetBucketParser.new,
|
||||||
:url => url(bucket_name, query)
|
:path => query
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -124,9 +124,10 @@ module Fog
|
||||||
def get_request_payment(bucket_name)
|
def get_request_payment(bucket_name)
|
||||||
request({
|
request({
|
||||||
:headers => {},
|
:headers => {},
|
||||||
|
:host => "#{bucket_name}.#{@host}",
|
||||||
:method => 'GET',
|
:method => 'GET',
|
||||||
:parser => Fog::Parsers::AWS::S3::GetRequestPayment.new,
|
:parser => Fog::Parsers::AWS::S3::GetRequestPayment.new,
|
||||||
:url => url(bucket_name, '?requestpayment')
|
:path => '?requestpayment'
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -134,9 +135,10 @@ module Fog
|
||||||
def get_location(bucket_name)
|
def get_location(bucket_name)
|
||||||
request({
|
request({
|
||||||
:headers => {},
|
:headers => {},
|
||||||
|
:host => "#{bucket_name}.#{@host}",
|
||||||
:method => 'GET',
|
:method => 'GET',
|
||||||
:parser => Fog::Parsers::AWS::S3::GetRequestPayment.new,
|
:parser => Fog::Parsers::AWS::S3::GetRequestPayment.new,
|
||||||
:url => url(bucket_name, '?location')
|
:path => '?location'
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -147,9 +149,9 @@ module Fog
|
||||||
def delete_bucket(bucket_name)
|
def delete_bucket(bucket_name)
|
||||||
request({
|
request({
|
||||||
:headers => {},
|
:headers => {},
|
||||||
|
:host => "#{bucket_name}.#{@host}",
|
||||||
:method => 'DELETE',
|
:method => 'DELETE',
|
||||||
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
:parser => Fog::Parsers::AWS::S3::BasicParser.new
|
||||||
:url => url(bucket_name)
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -159,9 +161,10 @@ module Fog
|
||||||
request({
|
request({
|
||||||
:body => file[:body],
|
:body => file[:body],
|
||||||
:headers => options.merge!(file[:headers]),
|
:headers => options.merge!(file[:headers]),
|
||||||
|
:host => "#{bucket_name}.#{@host}",
|
||||||
:method => 'PUT',
|
:method => 'PUT',
|
||||||
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
||||||
:url => url(bucket_name, object_name)
|
:path => object_name
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -169,9 +172,10 @@ module Fog
|
||||||
def copy_object(source_bucket_name, source_object_name, destination_bucket_name, destination_object_name)
|
def copy_object(source_bucket_name, source_object_name, destination_bucket_name, destination_object_name)
|
||||||
request({
|
request({
|
||||||
:headers => { 'x-amz-copy-source' => "/#{source_bucket_name}/#{source_object_name}" },
|
:headers => { 'x-amz-copy-source' => "/#{source_bucket_name}/#{source_object_name}" },
|
||||||
|
:host => "#{destination_bucket_name}.#{@host}",
|
||||||
:method => 'PUT',
|
:method => 'PUT',
|
||||||
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
||||||
:url => url(destination_bucket_name, destination_object_name)
|
:path => destination_object_name
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -179,8 +183,9 @@ module Fog
|
||||||
def get_object(bucket_name, object_name)
|
def get_object(bucket_name, object_name)
|
||||||
request({
|
request({
|
||||||
:headers => {},
|
:headers => {},
|
||||||
|
:host => "#{bucket_name}.#{@host}",
|
||||||
:method => 'GET',
|
:method => 'GET',
|
||||||
:url => url(bucket_name, object_name)
|
:path => object_name
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -188,9 +193,10 @@ module Fog
|
||||||
def head_object(bucket_name, object_name)
|
def head_object(bucket_name, object_name)
|
||||||
request({
|
request({
|
||||||
:headers => {},
|
:headers => {},
|
||||||
|
:host => "#{bucket_name}.#{@host}",
|
||||||
:method => 'HEAD',
|
:method => 'HEAD',
|
||||||
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
||||||
:url => url(bucket_name, object_name)
|
:path => object_name
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -198,9 +204,10 @@ module Fog
|
||||||
def delete_object(bucket_name, object_name)
|
def delete_object(bucket_name, object_name)
|
||||||
request({
|
request({
|
||||||
:headers => {},
|
:headers => {},
|
||||||
|
:host => "#{bucket_name}.#{@host}",
|
||||||
:method => 'DELETE',
|
:method => 'DELETE',
|
||||||
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
:parser => Fog::Parsers::AWS::S3::BasicParser.new,
|
||||||
:url => url(bucket_name, object_name)
|
:path => object_name
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -231,8 +238,8 @@ module Fog
|
||||||
end
|
end
|
||||||
|
|
||||||
def sign(params)
|
def sign(params)
|
||||||
uri = URI.parse(params[:url])
|
|
||||||
params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000")
|
params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000")
|
||||||
|
params[:path] ||= ''
|
||||||
|
|
||||||
string_to_sign =
|
string_to_sign =
|
||||||
<<-DATA
|
<<-DATA
|
||||||
|
@ -258,14 +265,14 @@ DATA
|
||||||
|
|
||||||
canonical_resource = "/"
|
canonical_resource = "/"
|
||||||
# [0..-18] is anything prior to .s3.amazonaws.com
|
# [0..-18] is anything prior to .s3.amazonaws.com
|
||||||
subdomain = uri.host[0..-18]
|
subdomain = params[:host][0..-18]
|
||||||
unless subdomain.empty?
|
unless subdomain.empty?
|
||||||
canonical_resource << "#{subdomain}/"
|
canonical_resource << "#{subdomain}/"
|
||||||
end
|
end
|
||||||
canonical_resource << "#{uri.path[1..-1]}"
|
canonical_resource << "#{params[:path]}"
|
||||||
# canonical_resource << "?acl" if uri.to_s.include?('?acl')
|
# canonical_resource << "?acl" if params[:path].include?('?acl')
|
||||||
# canonical_resource << "?location" if uri.to_s.include?('?location')
|
# canonical_resource << "?location" if params[:path].include?('?location')
|
||||||
# canonical_resource << "?torrent" if uri.to_s.include?('?torrent')
|
# canonical_resource << "?torrent" if params[:path].include?('?torrent')
|
||||||
string_to_sign << "#{canonical_resource}"
|
string_to_sign << "#{canonical_resource}"
|
||||||
|
|
||||||
hmac = @hmac.update(string_to_sign)
|
hmac = @hmac.update(string_to_sign)
|
||||||
|
@ -280,8 +287,9 @@ DATA
|
||||||
response = @connection.request({
|
response = @connection.request({
|
||||||
:body => params[:body],
|
:body => params[:body],
|
||||||
:headers => params[:headers],
|
:headers => params[:headers],
|
||||||
|
:host => params[:host],
|
||||||
:method => params[:method],
|
:method => params[:method],
|
||||||
:url => params[:url]
|
:path => params[:path]
|
||||||
})
|
})
|
||||||
|
|
||||||
if params[:parser] && !response.body.empty?
|
if params[:parser] && !response.body.empty?
|
||||||
|
|
|
@ -301,8 +301,9 @@ module Fog
|
||||||
query << "Signature=#{CGI.escape(Base64.encode64(hmac.digest).chomp!).gsub(/\+/, '%20')}"
|
query << "Signature=#{CGI.escape(Base64.encode64(hmac.digest).chomp!).gsub(/\+/, '%20')}"
|
||||||
|
|
||||||
response = @connection.request({
|
response = @connection.request({
|
||||||
|
:host => @host,
|
||||||
:method => method,
|
:method => method,
|
||||||
:url => "#{@scheme}://#{@host}:#{@port}/#{method == 'GET' ? "?#{query}" : ""}"
|
:path => method == 'GET' ? "?#{query}" : ""
|
||||||
})
|
})
|
||||||
|
|
||||||
if parser && !response.body.empty?
|
if parser && !response.body.empty?
|
||||||
|
|
Loading…
Reference in New Issue