From: Matt Amos <zerebubuth@gmail.com>
Date: Sun, 29 Mar 2009 01:31:04 +0000 (+0000)
Subject: Moved a bunch of time functions into UTC. Fixes bugs which we only see for 4 hours... 
X-Git-Tag: live~8882^2~42
X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/afcb345014d98914cd4f5d6b14ca2e30feac194c

Moved a bunch of time functions into UTC. Fixes bugs which we only see for 4 hours a year.
---

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