From afcb345014d98914cd4f5d6b14ca2e30feac194c Mon Sep 17 00:00:00 2001 From: Matt Amos Date: Sun, 29 Mar 2009 01:31:04 +0000 Subject: [PATCH 1/1] Moved a bunch of time functions into UTC. Fixes bugs which we only see for 4 hours a year. --- app/controllers/amf_controller.rb | 2 +- app/controllers/api_controller.rb | 2 +- app/controllers/changeset_controller.rb | 4 ++-- app/controllers/message_controller.rb | 2 +- app/controllers/trace_controller.rb | 4 ++-- app/models/changeset.rb | 12 ++++++------ app/models/node.rb | 2 +- app/models/relation.rb | 4 ++-- app/models/user.rb | 2 +- app/models/way.rb | 4 ++-- test/functional/api_controller_test.rb | 4 ++-- test/functional/changeset_controller_test.rb | 2 +- 12 files changed, 22 insertions(+), 22 deletions(-) diff --git a/app/controllers/amf_controller.rb b/app/controllers/amf_controller.rb index b4cbaeaf0..e701f2170 100644 --- a/app/controllers/amf_controller.rb +++ b/app/controllers/amf_controller.rb @@ -157,7 +157,7 @@ class AmfController < ApplicationController cs.tags = cstags cs.user_id = user.id # smsm1 doesn't like the next two lines and thinks they need to be abstracted to the model more/better - cs.created_at = Time.now + cs.created_at = Time.now.getutc cs.closed_at = cs.created_at + Changeset::IDLE_TIMEOUT cs.save_with_tags! return [0,cs.id] diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index cae510284..f0ba32568 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -225,7 +225,7 @@ class ApiController < ApplicationController endtime = Time.parse(params[:end]) else hours = (params[:hours] || '1').to_i.hours - endtime = Time.now + endtime = Time.now.getutc starttime = endtime - hours end diff --git a/app/controllers/changeset_controller.rb b/app/controllers/changeset_controller.rb index d69e7f4c1..e88387a76 100644 --- a/app/controllers/changeset_controller.rb +++ b/app/controllers/changeset_controller.rb @@ -461,7 +461,7 @@ private # if parameter 'open' is nill then open and closed changsets are returned def conditions_open(open) return open.nil? ? nil : ['closed_at >= ? and num_changes <= ?', - DateTime.now, Changeset::MAX_ELEMENTS] + Time.now.getutc, Changeset::MAX_ELEMENTS] end ## @@ -469,7 +469,7 @@ private # ('closed at' time has passed or changes limit is hit) def conditions_closed(closed) return closed.nil? ? nil : ['closed_at < ? and num_changes > ?', - DateTime.now, Changeset::MAX_ELEMENTS] + Time.now.getutc, Changeset::MAX_ELEMENTS] end ## diff --git a/app/controllers/message_controller.rb b/app/controllers/message_controller.rb index c039fe636..a04aa82c0 100644 --- a/app/controllers/message_controller.rb +++ b/app/controllers/message_controller.rb @@ -15,7 +15,7 @@ class MessageController < ApplicationController @message = Message.new(params[:message]) @message.to_user_id = @to_user.id @message.from_user_id = @user.id - @message.sent_on = Time.now + @message.sent_on = Time.now.getutc if @message.save flash[:notice] = 'Message sent' diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index 6528dffde..c0a0b36b5 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -117,7 +117,7 @@ class TraceController < ApplicationController :description => params[:trace][:description], :public => params[:trace][:public], :inserted => false, :user => @user, - :timestamp => Time.now}) + :timestamp => Time.now.getutc}) @trace.valid? @trace.errors.add(:gpx_file, "can't be blank") end @@ -313,7 +313,7 @@ private :description => description, :public => public}) @trace.inserted = false @trace.user = @user - @trace.timestamp = Time.now + @trace.timestamp = Time.now.getutc if @trace.save FileUtils.mv(filename, @trace.trace_name) diff --git a/app/models/changeset.rb b/app/models/changeset.rb index d420f537a..d41a82989 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -42,12 +42,12 @@ class Changeset < ActiveRecord::Base # note that this may not be a hard limit - due to timing changes and # concurrency it is possible that some changesets may be slightly # longer than strictly allowed or have slightly more changes in them. - return ((closed_at > Time.now) and (num_changes <= MAX_ELEMENTS)) + return ((closed_at > Time.now.getutc) and (num_changes <= MAX_ELEMENTS)) end def set_closed_time_now if is_open? - self.closed_at = Time.now + self.closed_at = Time.now.getutc end end @@ -60,10 +60,10 @@ class Changeset < ActiveRecord::Base doc.find('//osm/changeset').each do |pt| if create - cs.created_at = Time.now + cs.created_at = Time.now.getutc # initial close time is 1h ahead, but will be increased on each # modification. - cs.closed_at = Time.now + IDLE_TIMEOUT + cs.closed_at = cs.created_at + IDLE_TIMEOUT # initially we have no changes in a changeset cs.num_changes = 0 end @@ -140,7 +140,7 @@ class Changeset < ActiveRecord::Base end def save_with_tags! - t = Time.now + t = Time.now.getutc # do the changeset update and the changeset tags update in the # same transaction to ensure consistency. @@ -151,7 +151,7 @@ class Changeset < ActiveRecord::Base if (closed_at - created_at) > (MAX_TIME_OPEN - IDLE_TIMEOUT) self.closed_at = created_at + MAX_TIME_OPEN else - self.closed_at = Time.now + IDLE_TIMEOUT + self.closed_at = Time.now.getutc + IDLE_TIMEOUT end self.save! diff --git a/app/models/node.rb b/app/models/node.rb index 05aae0896..679048b4e 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -267,7 +267,7 @@ class Node < ActiveRecord::Base private def save_with_history! - t = Time.now + t = Time.now.getutc Node.transaction do self.version += 1 self.timestamp = t diff --git a/app/models/relation.rb b/app/models/relation.rb index 4b5d9e32b..a8789bc78 100644 --- a/app/models/relation.rb +++ b/app/models/relation.rb @@ -51,7 +51,7 @@ class Relation < ActiveRecord::Base # The follow block does not need to be executed because they are dealt with # in create_with_history, update_from and delete_with_history if create - relation.timestamp = Time.now + relation.timestamp = Time.now.getutc relation.visible = true relation.version = 0 else @@ -334,7 +334,7 @@ class Relation < ActiveRecord::Base # changed then we have to monitor their before and after state. tags_changed = false - t = Time.now + t = Time.now.getutc self.version += 1 self.timestamp = t self.save! diff --git a/app/models/user.rb b/app/models/user.rb index ce244fe02..4113662aa 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -30,7 +30,7 @@ class User < ActiveRecord::Base file_column :image, :magick => { :geometry => "100x100>" } def after_initialize - self.creation_time = Time.now if self.creation_time.nil? + self.creation_time = Time.now.getutc if self.creation_time.nil? end def encrypt_password diff --git a/app/models/way.rb b/app/models/way.rb index 94a6fa754..6e4f30d81 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -51,7 +51,7 @@ class Way < ActiveRecord::Base # This next section isn't required for the create, update, or delete of ways if create - way.timestamp = Time.now + way.timestamp = Time.now.getutc way.visible = true else if pt['timestamp'] @@ -296,7 +296,7 @@ class Way < ActiveRecord::Base private def save_with_history! - t = Time.now + t = Time.now.getutc # update the bounding box, note that this has to be done both before # and after the save, so that nodes from both versions are included in the diff --git a/test/functional/api_controller_test.rb b/test/functional/api_controller_test.rb index a8e808716..32f19265a 100644 --- a/test/functional/api_controller_test.rb +++ b/test/functional/api_controller_test.rb @@ -160,7 +160,7 @@ class ApiControllerTest < ActionController::TestCase #print @response.body # As we have loaded the fixtures, we can assume that there are no # changes recently - now = Time.now + now = Time.now.getutc hourago = now - 1.hour # Note that this may fail on a very slow machine, so isn't a great test assert_select "osm[version='#{API_VERSION}'][generator='#{GENERATOR}']:root", :count => 1 do @@ -181,7 +181,7 @@ class ApiControllerTest < ActionController::TestCase 1.upto(16) do |zoom| get :changes, :zoom => zoom assert_response :success - now = Time.now + now = Time.now.getutc hourago = now - 1.hour # Note that this may fail on a very slow machine, so isn't a great test assert_select "osm[version='#{API_VERSION}'][generator='#{GENERATOR}']:root", :count => 1 do diff --git a/test/functional/changeset_controller_test.rb b/test/functional/changeset_controller_test.rb index 7faa56028..6465c894d 100644 --- a/test/functional/changeset_controller_test.rb +++ b/test/functional/changeset_controller_test.rb @@ -37,7 +37,7 @@ class ChangesetControllerTest < ActionController::TestCase assert_equal Rational(1,24), duration , "initial idle timeout should be an hour (#{cs.created_at} -> #{cs.closed_at})" else # must be number of seconds... - assert_equal 3600.0, duration , "initial idle timeout should be an hour (#{cs.created_at} -> #{cs.closed_at})" + assert_equal 3600, duration.round, "initial idle timeout should be an hour (#{cs.created_at} -> #{cs.closed_at})" end end -- 2.39.5