[
https://issues.apache.org/jira/browse/CASSANDRA-14242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16417254#comment-16417254
]
Andrés de la Peña commented on CASSANDRA-14242:
-----------------------------------------------
This patch should solve the problem:
||[3.0|https://github.com/apache/cassandra/compare/cassandra-3.0...adelapena:14242-3.0]||[3.11|https://github.com/apache/cassandra/compare/cassandra-3.11...adelapena:14242-3.11]||[trunk|https://github.com/apache/cassandra/compare/trunk...adelapena:14242-trunk]||
It also fixes this infinite loop problem when querying 2i with a page size of
one:
{code}
CREATE TABLE t(k int PRIMARY KEY, v int);
CREATE INDEX on t(v);
INSERT INTO t (k, v) VALUES (1, 10);
PAGING 1
SELECT * FROM t WHERE v = 10 AND k = 1; -- Infinite loop!
{code}
For 3.11 and trunk, where it's possible to create 2i on static columns since
CASSANDRA-8103, the patch allows selecting only static columns, for example:
{code}
CREATE TABLE t(k int, c int, s int STATIC, PRIMARY KEY(k, c));
CREATE INDEX on t(s);
INSERT INTO t (k, s) VALUES (1, 100);
INSERT INTO t (k, c) VALUES (1, 10);
INSERT INTO t (k, c) VALUES (1, 20);
SELECT DISTINCT s FROM t WHERE s = 100 AND k = 1; -- Previously it would have
thrown a "Queries using 2ndary indexes don't support selecting only static
columns" error
{code}
[~blerer]/[~ifesdjeen] could you please review?
> Indexed static column returns inconsistent results
> --------------------------------------------------
>
> Key: CASSANDRA-14242
> URL: https://issues.apache.org/jira/browse/CASSANDRA-14242
> Project: Cassandra
> Issue Type: Bug
> Environment: Cassandra 3.11.2
> Java driver 3.4.0
> Ubuntu - 4.4.0-112-generic
> Reporter: Ross Black
> Assignee: Andrés de la Peña
> Priority: Major
>
> I am using Cassandra 3.11.2, and the Java driver 3.4.0
> I have a table that has a static column, where the static column has a
> secondary index.
> When querying the table I get incomplete or duplicated results, depending on
> the fetch size.
> e.g.
> {code:java}
> CREATE KEYSPACE hack WITH replication = {'class': 'SimpleStrategy',
> 'replication_factor': 1};
> CREATE TABLE hack.stuff (id int, kind text, chunk int static, val1 int,
> PRIMARY KEY (id, kind));
> CREATE INDEX stuff_chunk_index ON hack.stuff (chunk);{code}
> -- repeat with thousands of values for id =>
> {code:java}
> INSERT INTO hack.stuff (id, chunk, kind, val1 ) VALUES (${id}, 777, 'A',
> 123);{code}
> Querying from Java:
> {code:java}
> final SimpleStatement statement = new SimpleStatement("SELECT id, kind,
> val1 FROM hack.stuff WHERE chunk = " + chunk);
> statement.setFetchSize(fetchSize);
> statement.setConsistencyLevel(ConsistencyLevel.ALL);
> final ResultSet resultSet = connection.getSession().execute(statement);
> for (Row row : resultSet) {
> final int id = row.getInt("id");
> }{code}
> *The number of results returned depends on the fetch-size.*
> e.g. For 30k values inserted, I get the following:
> ||fetch-size||result-size||
> |40000|30000|
> |20000|30001|
> |5000|30006|
> |100|30303|
> In production, I have a much larger table where the correct result size for a
> specific chunk is 20019, but some fetch sizes will return _significantly
> fewer_ results.
> ||fetch-size||result-size|| ||
> |25000|20019| |
> |5000|9999|*<== this one is has far fewer results*|
> |5001|20026| |
> (so far been unable to reproduce this with the simpler test table)
> Thanks,
> Ross
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]