Commit 647d5b24 authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-20079 When setting back the system time while mysqld is running, NOW()...

MDEV-20079 When setting back the system time while mysqld is running, NOW() and UNIX_TIMESTAMP() results get stuck

typo. system_time.start wasn't updated when system_time.sec
and system_time.sec_part were.
parent 08b01ace
set @old_dbug=@@debug_dbug;
select timestampdiff(minute,now(),sysdate()) as 'must be 0', (unix_timestamp(sysdate()) - unix_timestamp()) div 60 as 'must be 0';
must be 0 must be 0
0 0
set @@debug_dbug='+d,system_time_plus_one_hour';
select timestampdiff(minute,now(),sysdate()) as 'must be 0', (unix_timestamp(sysdate()) - unix_timestamp()) div 60 as 'must be 0';
must be 0 must be 0
0 0
set @@debug_dbug='+d,system_time_minus_one_hour:-d,system_time_plus_one_hour';
select timestampdiff(minute,now(),sysdate()) as 'must be 0', (unix_timestamp(sysdate()) - unix_timestamp()) div 60 as 'must be 0';
must be 0 must be 0
0 0
set @@debug_dbug=@old_dbug;
select timestampdiff(minute,now(),sysdate()) as 'must be 0', (unix_timestamp(sysdate()) - unix_timestamp()) div 60 as 'must be 0';
must be 0 must be 0
0 0
source include/have_debug.inc;
#
# MDEV-20079 When setting back the system time while mysqld is running, NOW() and UNIX_TIMESTAMP() results get stuck
#
set @old_dbug=@@debug_dbug;
# because NOW() is taken at the beginning of the query and sysdate() is the actual
# time when sysdate() was evaluated, they don't necessarily have to be equal.
# but hopefully they're less than within a minute from each other.
select timestampdiff(minute,now(),sysdate()) as 'must be 0', (unix_timestamp(sysdate()) - unix_timestamp()) div 60 as 'must be 0';
set @@debug_dbug='+d,system_time_plus_one_hour';
select timestampdiff(minute,now(),sysdate()) as 'must be 0', (unix_timestamp(sysdate()) - unix_timestamp()) div 60 as 'must be 0';
set @@debug_dbug='+d,system_time_minus_one_hour:-d,system_time_plus_one_hour';
select timestampdiff(minute,now(),sysdate()) as 'must be 0', (unix_timestamp(sysdate()) - unix_timestamp()) div 60 as 'must be 0';
set @@debug_dbug=@old_dbug;
select timestampdiff(minute,now(),sysdate()) as 'must be 0', (unix_timestamp(sysdate()) - unix_timestamp()) div 60 as 'must be 0';
......@@ -99,6 +99,8 @@ my_hrtime_t my_hrtime()
while (gettimeofday(&t, NULL) != 0) {}
hrtime.val= t.tv_sec*1000000ULL + t.tv_usec;
#endif
DBUG_EXECUTE_IF("system_time_plus_one_hour", hrtime.val += 3600*1000000ULL;);
DBUG_EXECUTE_IF("system_time_minus_one_hour", hrtime.val -= 3600*1000000ULL;);
return hrtime;
}
......
......@@ -3443,6 +3443,7 @@ class THD :public Statement,
{
system_time.sec= sec;
system_time.sec_part= sec_part;
system_time.start= hrtime;
}
else
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment