[Mondrian] NonEmptyTest.testConstrainedMeasureGetsOptimized

Julian Hyde jhyde at pentaho.com
Wed Jan 6 17:46:54 EST 2010


All SQL generation code must be deterministic. It's not practical to
regression test mondrian if the SQL changes for reasons as spurious as a
different JDK. As I said, look for code that depends on iterator order over
hashmaps and hashsets.



  _____  

From: Kurtis.Walker at thomsonreuters.com
[mailto:Kurtis.Walker at thomsonreuters.com] 
Sent: Wednesday, January 06, 2010 7:49 AM
To: jhyde at pentaho.com; mondrian at pentaho.org; mkambol at gmail.com
Subject: RE: [Mondrian] NonEmptyTest.testConstrainedMeasureGetsOptimized



I checked in changelist 13287 for Oracle on jdk 1.6.

 

For the failure on 1.5, the order of the "and" conditions are different from
1.6, the sql would still produce the correct results though.  Any hints on
how I can make the test work with both?

 

Kurt

 

From: Julian Hyde [mailto:jhyde at pentaho.com] 
Sent: Tuesday, January 05, 2010 1:35 PM
To: Walker, Kurtis (Healthcare USA); mondrian at pentaho.org; mkambol at gmail.com
Subject: RE: [Mondrian] NonEmptyTest.testConstrainedMeasureGetsOptimized

 

Hudson runs against MySQL, not Oracle.

 

Nothing special about the environment. It's JDK 1.6 linux, oracle-xe 10.2.
When I run it on JDK 1.5 I get 4 different failures in NonEmptyTest:

 

[java] There were 4 failures:

[java] 1)
testNativeCrossjoinWillConstrainUsingArgsFromAllAxes(mondrian.rolap.NonEmpty
Test)junit.framework.AssertionFailedError: expected query [select
"time_by_day"."the_year" as "c0", "promotion"."promotion_name" as "c1" from
"time_by_day" "time_by_day", "sales_fact_1997" "sales_fact_1997",
"promotion" "promotion", "customer" "customer" where
"sales_fact_1997"."time_id" = "time_by_day"."time_id" and
"sales_fact_1997"."promotion_id" = "promotion"."promotion_id" and
("promotion"."promotion_name" in ('Bag Stuffers', 'Best Savings')) and
"sales_fact_1997"."customer_id" = "customer"."customer_id" and
("customer"."gender" = 'F') and ("time_by_day"."the_year" = 1997) group by
"time_by_day"."the_year", "promotion"."promotion_name" order by 1 ASC, 2
ASC] did not occur

[java] at
mondrian.rolap.BatchTestCase.assertQuerySqlOrNot(BatchTestCase.java:427)

[java] at
mondrian.rolap.BatchTestCase.assertQuerySql(BatchTestCase.java:294)

[java] at
mondrian.rolap.NonEmptyTest.testNativeCrossjoinWillConstrainUsingArgsFromAll
Axes(NonEmptyTest.java:3678)

[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[java] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)

[java] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)

[java] at
mondrian.test.MondrianTestRunner$2.run(MondrianTestRunner.java:139)

[java] at java.lang.Thread.run(Thread.java:595)

[java] 2)
testNativeCrossjoinWillExpandFirstLastChild(mondrian.rolap.NonEmptyTest)juni
t.framework.AssertionFailedError: expected query [select
"time_by_day"."the_year" as "c0", "promotion"."promotion_name" as "c1" from
"time_by_day" "time_by_day", "sales_fact_1997" "sales_fact_1997",
"promotion" "promotion", "customer" "customer" where
"sales_fact_1997"."time_id" = "time_by_day"."time_id" and
"sales_fact_1997"."promotion_id" = "promotion"."promotion_id" and
"sales_fact_1997"."customer_id" = "customer"."customer_id" and
("customer"."gender" in ('F', 'M')) and ("promotion"."promotion_name" in
('Bag Stuffers', 'Best Savings')) and ("time_by_day"."the_year" = 1997)
group by "time_by_day"."the_year", "promotion"."promotion_name" order by 1
ASC, 2 ASC] did not occur

[java] at
mondrian.rolap.BatchTestCase.assertQuerySqlOrNot(BatchTestCase.java:427)

[java] at
mondrian.rolap.BatchTestCase.assertQuerySql(BatchTestCase.java:294)

[java] at
mondrian.rolap.NonEmptyTest.testNativeCrossjoinWillExpandFirstLastChild(NonE
mptyTest.java:3732)

[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[java] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)

[java] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)

[java] at
mondrian.test.MondrianTestRunner$2.run(MondrianTestRunner.java:139)

[java] at java.lang.Thread.run(Thread.java:595)

[java] 3)
testNativeCrossjoinWillExpandLagInNamedSet(mondrian.rolap.NonEmptyTest)junit
.framework.AssertionFailedError: expected query [select
"time_by_day"."the_year" as "c0", "promotion"."promotion_name" as "c1" from
"time_by_day" "time_by_day", "sales_fact_1997" "sales_fact_1997",
"promotion" "promotion", "customer" "customer" where
"sales_fact_1997"."time_id" = "time_by_day"."time_id" and
"sales_fact_1997"."promotion_id" = "promotion"."promotion_id" and
"sales_fact_1997"."customer_id" = "customer"."customer_id" and
("customer"."gender" in ('F', 'M')) and ("promotion"."promotion_name" in
('Bag Stuffers', 'Best Savings')) and ("time_by_day"."the_year" = 1997)
group by "time_by_day"."the_year", "promotion"."promotion_name" order by 1
ASC, 2 ASC] did not occur

[java] at
mondrian.rolap.BatchTestCase.assertQuerySqlOrNot(BatchTestCase.java:427)

[java] at
mondrian.rolap.BatchTestCase.assertQuerySql(BatchTestCase.java:294)

[java] at
mondrian.rolap.NonEmptyTest.testNativeCrossjoinWillExpandLagInNamedSet(NonEm
ptyTest.java:3756)

[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[java] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)

[java] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)

[java] at
mondrian.test.MondrianTestRunner$2.run(MondrianTestRunner.java:139)

[java] at java.lang.Thread.run(Thread.java:595)

[java] 4)
testConstrainedMeasureGetsOptimized(mondrian.rolap.NonEmptyTest)junit.framew
ork.AssertionFailedError: expected query [select "customer"."country" as
"c0", "customer"."state_province" as "c1", "customer"."city" as "c2",
"customer"."customer_id" as "c3", "fname" || ' ' || "lname" as "c4", "fname"
|| ' ' || "lname" as "c5", "customer"."gender" as "c6",
"customer"."marital_status" as "c7", "customer"."education" as "c8",
"customer"."yearly_income" as "c9" from "customer" "customer",
"sales_fact_1997" "sales_fact_1997" where "sales_fact_1997"."customer_id" =
"customer"."customer_id" and ("customer"."gender" in ('M', 'F')) group by
"customer"."country", "customer"."state_province", "customer"."city",
"customer"."customer_id", "fname" || ' ' || "lname", "customer"."gender",
"customer"."marital_status", "customer"."education",
"customer"."yearly_income" order by "customer"."country" ASC,
"customer"."state_province" ASC, "customer"."city" ASC, "fname" || ' ' ||
"lname" ASC] did not occur

[java] at
mondrian.rolap.BatchTestCase.assertQuerySqlOrNot(BatchTestCase.java:427)

[java] at
mondrian.rolap.BatchTestCase.assertQuerySql(BatchTestCase.java:294)

[java] at
mondrian.rolap.NonEmptyTest.testConstrainedMeasureGetsOptimized(NonEmptyTest
.java:3795)

[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[java] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)

[java] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)

[java] at
mondrian.test.MondrianTestRunner$2.run(MondrianTestRunner.java:139)

[java] at java.lang.Thread.run(Thread.java:595)

 

Can you look into those failures also.

I notice that ('F', 'M') occurs in some queries, ('M', 'F') in others. This
is a hint that there is non-determinism in your code. Make sure you are not
relying on iterator order of hashmaps or hashsets.

 

Julian


 

  _____  

From: Kurtis.Walker at thomsonreuters.com
[mailto:Kurtis.Walker at thomsonreuters.com] 
Sent: Tuesday, January 05, 2010 9:59 AM
To: jhyde at pentaho.com; mondrian at pentaho.org; mkambol at gmail.com
Subject: RE: [Mondrian] NonEmptyTest.testConstrainedMeasureGetsOptimized

Julian,

 

Our environment is Oracle and the test is passing.  Is there anything else
different about the environment where it fails?  Also, we thought that the
Hudson build ran against Oracle.  The Hudson build is green right now, so
are we incorrect that it runs against Oracle?

 

Kurt

 

From: mondrian-bounces at pentaho.org [mailto:mondrian-bounces at pentaho.org] On
Behalf Of Julian Hyde
Sent: Tuesday, January 05, 2010 12:41 PM
To: 'Matt Campbell'
Cc: 'Mondrian developer mailing list'
Subject: [Mondrian] NonEmptyTest.testConstrainedMeasureGetsOptimized

 

Matt,

 

NonEmptyTest.testConstrainedMeasureGetsOptimized is failing on Oracle:

[java] There was 1 failure:

[java] 1)
testConstrainedMeasureGetsOptimized(mondrian.rolap.NonEmptyTest)junit.framew
ork.AssertionFailedError: expected query [select "customer"."country" as
"c0", "customer"."state_province" as "c1", "customer"."city" as "c2",
"customer"."customer_id" as "c3", "fname" || ' ' || "lname" as "c4", "fname"
|| ' ' || "lname" as "c5", "customer"."gender" as "c6",
"customer"."marital_status" as "c7", "customer"."education" as "c8",
"customer"."yearly_income" as "c9" from "customer" "customer",
"sales_fact_1997" "sales_fact_1997" where "sales_fact_1997"."customer_id" =
"customer"."customer_id" and ("customer"."gender" in ('M', 'F')) group by
"customer"."country", "customer"."state_province", "customer"."city",
"customer"."customer_id", "fname" || ' ' || "lname", "customer"."gender",
"customer"."marital_status", "customer"."education",
"customer"."yearly_income" order by "customer"."country" ASC,
"customer"."state_province" ASC, "customer"."city" ASC, "fname" || ' ' ||
"lname" ASC] did not occur

[java] at
mondrian.rolap.BatchTestCase.assertQuerySqlOrNot(BatchTestCase.java:427)

[java] at
mondrian.rolap.BatchTestCase.assertQuerySql(BatchTestCase.java:294)

[java] at
mondrian.rolap.NonEmptyTest.testConstrainedMeasureGetsOptimized(NonEmptyTest
.java:3795)

[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[java] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)

[java] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)

[java] at
mondrian.test.MondrianTestRunner$2.run(MondrianTestRunner.java:139)

[java] at java.lang.Thread.run(Thread.java:619)

 

Julian

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.pentaho.org/pipermail/mondrian/attachments/20100106/52f79fa1/attachment.html 


More information about the Mondrian mailing list