You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2011/04/04 10:01:00 UTC
svn commit: r1088495 - in /db/derby/code/trunk/java:
engine/org/apache/derby/iapi/sql/dictionary/TableDescriptor.java
testing/org/apache/derbyTesting/functionTests/tests/lang/UpdateStatisticsTest.java
Author: kahatlen
Date: Mon Apr 4 08:00:59 2011
New Revision: 1088495
URL: http://svn.apache.org/viewvc?rev=1088495&view=rev
Log:
DERBY-5153: Intermittent ASSERT FAILED Internal Error-- statistics not found in selectivityForConglomerate when running InterruptResilienceTest
Removed the failing asserts and enabled the test case that exercises the code.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TableDescriptor.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/UpdateStatisticsTest.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TableDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TableDescriptor.java?rev=1088495&r1=1088494&r2=1088495&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TableDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TableDescriptor.java Mon Apr 4 08:00:59 2011
@@ -1396,6 +1396,9 @@ public class TableDescriptor extends Tup
* numKeys. This basically returns the reciprocal of the number of unique
* values in the leading numKey columns of the index. It is assumed that
* statistics exist for the conglomerate if this function is called.
+ * However, no locks are held to prevent the statistics from being dropped,
+ * so the method also handles the case of missing statistics by using a
+ * heuristic to estimate the selectivity.
*
* @param cd ConglomerateDescriptor (Index) whose
* cardinality we are interested in.
@@ -1407,22 +1410,6 @@ public class TableDescriptor extends Tup
int numKeys)
throws StandardException
{
- if (!statisticsExist(cd))
- {
- if (SanityManager.DEBUG)
- {
- SanityManager.THROWASSERT("no statistics exist for conglomerate"
- + cd);
- }
- else
- {
- double selectivity = 0.1;
- for (int i = 0; i < numKeys; i++)
- selectivity *= 0.1;
- return selectivity;
- }
- }
-
UUID referenceUUID = cd.getUUID();
List sdl = getStatistics();
@@ -1438,10 +1425,10 @@ public class TableDescriptor extends Tup
return statDesc.getStatistic().selectivity((Object[])null);
}
-
- if (SanityManager.DEBUG)
- SanityManager.THROWASSERT("Internal Error-- statistics not found in selectivityForConglomerate.\n cd = " + cd + "\nnumKeys = " + numKeys);
- return 0.1; // shouldn't come here.
+
+ // Didn't find statistics for these columns. Assume uniform 10%
+ // selectivity for each column in the key.
+ return Math.pow(0.1, numKeys);
}
/** @see TupleDescriptor#getDescriptorName */
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/UpdateStatisticsTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/UpdateStatisticsTest.java?rev=1088495&r1=1088494&r2=1088495&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/UpdateStatisticsTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/UpdateStatisticsTest.java Mon Apr 4 08:00:59 2011
@@ -214,10 +214,8 @@ public class UpdateStatisticsTest extend
/**
* Regression test case for DERBY-5153. Compilation in parallel with
* update of statistics sometimes failed on debug builds.
- *
- * The test case should be disabled until the bug is fixed.
*/
- public void disabled_testParallelCompilationAndUpdate() throws Exception {
+ public void testParallelCompilationAndUpdate() throws Exception {
setAutoCommit(false);
// Create and populate a test table with a multi-column index.