diff --git a/lib/fog/aws/requests/storage/sync_clock.rb b/lib/fog/aws/requests/storage/sync_clock.rb new file mode 100644 index 000000000..986af7de4 --- /dev/null +++ b/lib/fog/aws/requests/storage/sync_clock.rb @@ -0,0 +1,28 @@ +module Fog + module AWS + class Storage + class Real + + # Sync clock against S3 to avoid skew errors + # + def sync_clock + response = begin + get_service + rescue => error + error.response + end + Fog::Time.now = Time.parse(response.headers['Date']) + end + + end # Real + + class Mock # :nodoc:all + + def sync_clock + true + end + + end # Mock + end # Storage + end # AWS +end # Fog \ No newline at end of file diff --git a/lib/fog/aws/storage.rb b/lib/fog/aws/storage.rb index c916c258b..e5c2af8c9 100644 --- a/lib/fog/aws/storage.rb +++ b/lib/fog/aws/storage.rb @@ -42,6 +42,7 @@ module Fog request :put_object_acl request :put_object_url request :put_request_payment + request :sync_clock request :upload_part module Utils diff --git a/lib/fog/core.rb b/lib/fog/core.rb index 2031a5840..d1698ea59 100644 --- a/lib/fog/core.rb +++ b/lib/fog/core.rb @@ -29,4 +29,5 @@ require 'fog/core/provider' require 'fog/core/service' require 'fog/core/ssh' require 'fog/core/storage' +require 'fog/core/time' require 'fog/core/wait_for' diff --git a/lib/fog/core/time.rb b/lib/fog/core/time.rb new file mode 100644 index 000000000..23c81a097 --- /dev/null +++ b/lib/fog/core/time.rb @@ -0,0 +1,21 @@ +module Fog + class Time < ::Time + class << self + + def now + ::Time.now - offset + end + + def now=(new_now) + old_now = ::Time.now + @offset = old_now - new_now + new_now + end + + def offset + @offset ||= 0 + end + + end + end +end \ No newline at end of file