[
https://issues.apache.org/jira/browse/DERBY-5964?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13486836#comment-13486836
]
Knut Anders Hatlen commented on DERBY-5964:
-------------------------------------------
The test checks the value of the CREATIONTIMESTAMP column in SYS.SYSSTATISTICS
to find out if the statistics have been updated. The timestamp in that column
is stored in the local timezone. However, since Derby doesn't store the
timezone offset, timestamps in the hour before the switch from DST to standard
time and in the hour after the switch are ambiguous. So when the test fetches a
timestamp, say, 2012-10-28 02:30:00 from SYSSTATISTICS, it doesn't know whether
that represents 2012-10-28 02:30:00 CEST or 2012-10-28 02:30:00 CET, which both
are valid times. The current logic in the Derby engine seems to consistently
pick the latter value. This means that if the test runs during the hour before
the switch to standard time, it looks as if the statistics are updated one hour
into the future, and the test fails.
> Timestamp comparison failure in
> AutomaticIndexStatisticsTest.testStatisticsCorrectness
> --------------------------------------------------------------------------------------
>
> Key: DERBY-5964
> URL: https://issues.apache.org/jira/browse/DERBY-5964
> Project: Derby
> Issue Type: Bug
> Components: Test
> Affects Versions: 10.10.0.0
> Reporter: Knut Anders Hatlen
> Priority: Minor
>
> http://dbtg.foundry.sun.com/derby/test/Daily/jvm1.5/testing/testlog/lin/1402814-suitesAll_diff.txt
> 1)
> testStatisticsCorrectness(org.apache.derbyTesting.functionTests.tests.store.AutomaticIndexStatisticsTest)junit.framework.AssertionFailedError
> at
> org.apache.derbyTesting.functionTests.tests.store.AutomaticIndexStatisticsTest.testStatisticsCorrectness(AutomaticIndexStatisticsTest.java:324)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at
> org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:117)
> at
> org.apache.derbyTesting.junit.BaseJDBCTestCase.runBareOverridable(BaseJDBCTestCase.java:424)
> at
> org.apache.derbyTesting.junit.BaseJDBCTestCase.runBare(BaseJDBCTestCase.java:441)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> at
> org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> The failure is caused by this assert:
> assertTrue(s.created.before(now));
> It might be a coincidence, but it happened the same night as Europe was
> switching from DST.
> It may also be related to DERBY-5046, where a similar assert failed because
> poor clock resolution made the two timestamps equal.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira