[jira] [Commented] (CASSANDRA-10471) fix flapping empty_in_test dtest

2015-10-16 Thread Sylvain Lebresne (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-10471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14960618#comment-14960618
 ] 

Sylvain Lebresne commented on CASSANDRA-10471:
--

bq. I can't tell if the dtests were harmed. There are 20 failures on the 
branch. The 3.0 branch hasn't had 20 failures in the past few builds.

I noticed that some dtest build are bad with a lot of tests timeouting (tests 
that usually pass). For instance this morning we had a build with [37 
failures|http://cassci.datastax.com/job/cassandra-3.0_dtest/261/] (and this 
wasn't committed). Anyway, I'm relatively confident the patch doesn't break 
anything unrelated as the only code path added are clearly ones that weren't 
allowed before, so committed. We can always revert if it surprisingly turns out 
that it breaks dtests consistently.

> fix flapping empty_in_test dtest
> 
>
> Key: CASSANDRA-10471
> URL: https://issues.apache.org/jira/browse/CASSANDRA-10471
> Project: Cassandra
>  Issue Type: Sub-task
>Reporter: Jim Witschey
>Assignee: Sylvain Lebresne
> Fix For: 3.0.0 rc2
>
>
> {{upgrade_tests/cql_tests.py:TestCQL.empty_in_test}} fails about half the 
> time on the upgrade path from 2.2 to 3.0:
> http://cassci.datastax.com/view/Upgrades/job/storage_engine_upgrade_dtest-22_tarball-30_HEAD/42/testReport/upgrade_tests.cql_tests/TestCQL/empty_in_test/history/
> Once [this dtest PR|https://github.com/riptano/cassandra-dtest/pull/586] is 
> merged, these tests should also run with this upgrade path on normal 3.0 
> jobs. Until then, you can run it with the following command:
> {code}
> SKIP=false CASSANDRA_VERSION=binary:2.2.0 UPGRADE_TO=git:cassandra-3.0 
> nosetests 2>&1 upgrade_tests/cql_tests.py:TestCQL.empty_in_test
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-10471) fix flapping empty_in_test dtest

2015-10-15 Thread Ariel Weisberg (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-10471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14959541#comment-14959541
 ] 

Ariel Weisberg commented on CASSANDRA-10471:


OK thanks for the explanation. The comments are good it's just me not having 
enough context.

I can't tell if the dtests were harmed. There are 20 failures on the branch. 
The 3.0 branch hasn't had 20 failures in the past few builds. I compared the 
contents and it just looks sort of random and overlapping.

+1

> fix flapping empty_in_test dtest
> 
>
> Key: CASSANDRA-10471
> URL: https://issues.apache.org/jira/browse/CASSANDRA-10471
> Project: Cassandra
>  Issue Type: Sub-task
>Reporter: Jim Witschey
>Assignee: Sylvain Lebresne
> Fix For: 3.0.0 rc2
>
>
> {{upgrade_tests/cql_tests.py:TestCQL.empty_in_test}} fails about half the 
> time on the upgrade path from 2.2 to 3.0:
> http://cassci.datastax.com/view/Upgrades/job/storage_engine_upgrade_dtest-22_tarball-30_HEAD/42/testReport/upgrade_tests.cql_tests/TestCQL/empty_in_test/history/
> Once [this dtest PR|https://github.com/riptano/cassandra-dtest/pull/586] is 
> merged, these tests should also run with this upgrade path on normal 3.0 
> jobs. Until then, you can run it with the following command:
> {code}
> SKIP=false CASSANDRA_VERSION=binary:2.2.0 UPGRADE_TO=git:cassandra-3.0 
> nosetests 2>&1 upgrade_tests/cql_tests.py:TestCQL.empty_in_test
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-10471) fix flapping empty_in_test dtest

2015-10-15 Thread Sylvain Lebresne (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-10471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14958561#comment-14958561
 ] 

Sylvain Lebresne commented on CASSANDRA-10471:
--

bq. As a reviewer I didn't figure out how to verify that this statement is true 
or why. I mucked about with StatementRestrictions and family and found where IN 
restrictions are expressed, but it's all pretty big in scope. Do you have any 
pointers?

The query that triggers the problem is
{noformat}
SELECT v FROM test_compact WHERE k1 = 0 AND k2 IN ()
{noformat}
That query explicitly requests no row (it's a query by name with an empty list 
of names). One would expect such valid but somewhat uninteresting query to be 
dealt with at the CQL layer (by returning nothing), yielding no internal query, 
and that is what happens on 3.0 (see 
{{SelectStatement.makeClusteringIndexFilter}}, in the case of a query by names, 
the code checks if {{getRequestedRows}} returns an empty list and return 
{{null}} if so which is code for "we know the query return nothing"). That's 
the reason why I initially made {{ColumnFilter.Builder}} reject the case where 
nothing was selected, but that was misguided especially since the code is 
perfectly fine dealing with an empty {{ColumnFilter}}.

And it happens that this optimization isn't done in 2.2. Or rather, it used to 
be done but was "broken" by CASSANDRA-7981. If you look at the equivalent code 
on 2.2, in {{SelectStatement.makeFilter()}}, it assumes a {{IN ()}} would 
result in {{getRequestedColumns}} returning {{null}}, but it's easy to see it's 
not the case anymore (and it's equally easy to see that CASSANDRA-7981 is the 
culprit for that). So on the 2.2 node, the query simply generates an empty list 
in {{SelectStatement.getRequestedColumns()}} (because 
{{SingleColumnRestriction.InWithValues.getValues()}} does nothing special if 
its list of terms is empty, is just returns an empty list) and queries with 
that. That's where, during an upgrade, the 3.0 node receives a query by name 
with an empty list of names, and that triggers my misguided assertion.

I'll note that I'm fine "fixing" that broken optimization in 2.2 and I've 
pushed a very trivial fix to do so 
[here|https://github.com/pcmanus/cassandra/commits/10471-2.2], but I don't 
really care whether we do it or not since 1) it's pretty inconsequential for 
2.2 users and 2) even if we do commit that 2.2 patch, we still need to fix 3.0 
for users who might upgrade from a 2.2 version that don't have that fix.

bq. As far as I can tell null isn't used as a signal anywhere

Well it does. It signals we don't want to skip any value when {{isFetchAll}} is 
set (paraphrasing the comment on the declaration of {{selection}} here). If 
{{isFetchAll == true}}, {{selection}} is the subset of columns for which we 
want to include the values (the ones whose values are not skipped). As the case 
where we don't skip any value is common, we use {{null}} to signal it. The 
equivalent if we were to not use {{null}} would be to have {{selection}} be all 
the columns, but that would mean a slightly less efficient {{canSkipValue}} in 
that common case.
I'll note that I feel all this is reasonably well explained in the class 
javadoc and the comments around the class field declarations, but I'm open to 
improvement suggestions.

bq. canSkipValue might have depended on it before this change

Why only before this change? {{selection == null}} only matter in 
{{canSkipValue}} if {{isFetchAll == true}}, and 
{{ColumnFilter.Builder.build()}} explicitly only force 
{{PartitionColumns.NONE}} if {{!isFetchAll}}.

bq. There is no unit test for ColumnFilter

There isn't and I've created CASSANDRA-10531 to change that.



> fix flapping empty_in_test dtest
> 
>
> Key: CASSANDRA-10471
> URL: https://issues.apache.org/jira/browse/CASSANDRA-10471
> Project: Cassandra
>  Issue Type: Sub-task
>Reporter: Jim Witschey
>Assignee: Sylvain Lebresne
> Fix For: 3.0.0 rc2
>
>
> {{upgrade_tests/cql_tests.py:TestCQL.empty_in_test}} fails about half the 
> time on the upgrade path from 2.2 to 3.0:
> http://cassci.datastax.com/view/Upgrades/job/storage_engine_upgrade_dtest-22_tarball-30_HEAD/42/testReport/upgrade_tests.cql_tests/TestCQL/empty_in_test/history/
> Once [this dtest PR|https://github.com/riptano/cassandra-dtest/pull/586] is 
> merged, these tests should also run with this upgrade path on normal 3.0 
> jobs. Until then, you can run it with the following command:
> {code}
> SKIP=false CASSANDRA_VERSION=binary:2.2.0 UPGRADE_TO=git:cassandra-3.0 
> nosetests 2>&1 upgrade_tests/cql_tests.py:TestCQL.empty_in_test
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-10471) fix flapping empty_in_test dtest

2015-10-14 Thread Ariel Weisberg (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-10471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14958024#comment-14958024
 ] 

Ariel Weisberg commented on CASSANDRA-10471:


bq. But that's not true at least for empty IN queries on older nodes,
As a reviewer I didn't figure out how to verify that this statement is true or 
why. I mucked about with StatementRestrictions and family and found where IN 
restrictions are expressed, but it's all pretty big in scope. Do you have any 
pointers?

I don't get the difference between null vs PartitionColumns.NONE

I verified the dtest is fixed, and that your fix matches your description and 
makes the assertion that was removed always true.

There is no unit test for ColumnFilter expressing these expected behaviors and 
configurations of ColumnFilter and ColumnFilter.Builder.

> fix flapping empty_in_test dtest
> 
>
> Key: CASSANDRA-10471
> URL: https://issues.apache.org/jira/browse/CASSANDRA-10471
> Project: Cassandra
>  Issue Type: Sub-task
>Reporter: Jim Witschey
>Assignee: Sylvain Lebresne
> Fix For: 3.0.0 rc2
>
>
> {{upgrade_tests/cql_tests.py:TestCQL.empty_in_test}} fails about half the 
> time on the upgrade path from 2.2 to 3.0:
> http://cassci.datastax.com/view/Upgrades/job/storage_engine_upgrade_dtest-22_tarball-30_HEAD/42/testReport/upgrade_tests.cql_tests/TestCQL/empty_in_test/history/
> Once [this dtest PR|https://github.com/riptano/cassandra-dtest/pull/586] is 
> merged, these tests should also run with this upgrade path on normal 3.0 
> jobs. Until then, you can run it with the following command:
> {code}
> SKIP=false CASSANDRA_VERSION=binary:2.2.0 UPGRADE_TO=git:cassandra-3.0 
> nosetests 2>&1 upgrade_tests/cql_tests.py:TestCQL.empty_in_test
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)