From 04e3809b09008c4009a9bc74120952d753244884 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Mon, 27 Apr 2020 16:57:55 -0400 Subject: [PATCH] 16349: Skip converting DB timestamps to & from localtime. The previous code already returned the correct time. This change merely avoids converting the time to the local time zone in PostgreSQL, and back to UTC again in Rails. This might also avoid rare problems in unusual edge cases where Rails and PostgreSQL session use different time zones, like a configuration mishap or a race during a daylight savings time transition. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- services/api/lib/db_current_time.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/api/lib/db_current_time.rb b/services/api/lib/db_current_time.rb index fdb6641521..5e1634ecb9 100644 --- a/services/api/lib/db_current_time.rb +++ b/services/api/lib/db_current_time.rb @@ -3,9 +3,13 @@ # SPDX-License-Identifier: AGPL-3.0 module DbCurrentTime - CURRENT_TIME_SQL = "SELECT clock_timestamp()" + CURRENT_TIME_SQL = "SELECT clock_timestamp() AT TIME ZONE 'UTC'" def db_current_time - Time.parse(ActiveRecord::Base.connection.select_value(CURRENT_TIME_SQL)).to_time + Time.parse(ActiveRecord::Base.connection.select_value(CURRENT_TIME_SQL) + " +0000") + end + + def db_transaction_time + Time.parse(ActiveRecord::Base.connection.select_value("SELECT current_timestamp AT TIME ZONE 'UTC'") + " +0000") end end -- 2.30.2