[
https://issues.apache.org/jira/browse/CASSANDRA-16372?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aleksandr Sorokoumov updated CASSANDRA-16372:
---------------------------------------------
Test and Documentation Plan: [dtests
patch|https://github.com/apache/cassandra-dtest/pull/111] adds test cases with
empty strings inside collections. Already existing
[test_reading_collections_with_empty_values|https://github.com/apache/cassandra-dtest/blob/trunk/cqlsh_tests/test_cqlsh_copy.py#L559-L586]
covers the case where empty values for other data types still throw during
parsing rather than on the server-side.
Status: Patch Available (was: In Progress)
{{ParseError}} happens because the check for {{null}} fields inside a
collection mistakes empty strings for null fields, which are not allowed inside
collections. In addition to allowing empty strings, the patch subtracts failed
rows from the total number of processed rows.
|Branch||Source||
|trunk|[branch|https://github.com/apache/cassandra/pull/863]|
|3.11|[branch|https://github.com/apache/cassandra/pull/862]|
|3.0|[branch|https://github.com/apache/cassandra/pull/864]|
|dtests|[branch|https://github.com/apache/cassandra-dtest/pull/111]|
> Import from csv of empty strings in list fails with a ParseError: Empty
> values are not allowed, given up without retries
> -------------------------------------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-16372
> URL: https://issues.apache.org/jira/browse/CASSANDRA-16372
> Project: Cassandra
> Issue Type: Bug
> Components: Tool/cqlsh
> Reporter: Ostico
> Assignee: Aleksandr Sorokoumov
> Priority: Normal
> Fix For: 3.11.10, 4.0-rc
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
>
> Cqlsh fail to import an empty string which is present in a list data type.
> {color:#ff0000}_In those conditions, simple csv backups can discard rows and
> data can be corrupted._{color}
>
> *Conditions*
>
> {code:java}
> # cqlsh
> Connected to Test Cluster at 127.0.0.1:9042.
> [cqlsh 5.0.1 | Cassandra 3.11.6 | CQL spec 3.4.4 | Native protocol v4]
> Use HELP for help.
> CREATE TABLE test.test_1 (
> uid uuid PRIMARY KEY,
> texts list<text>
> );
> insert into test.test_1 ( uid, texts ) VALUES(
> 833fee3f-d4f9-418b-9387-84ac2cda5cb7, ['But if you now try to wash your
> hands,', ''] );
> {code}
>
> Now exporting and and re-importing data fails:
>
> {code:java}
> cqlsh> select * from test.test_1;
> uid | texts
> --------------------------------------+------------------------------------------------
> 833fee3f-d4f9-418b-9387-84ac2cda5cb7 | ['But if you now try to wash your
> hands,', '']
> cqlsh> COPY test.test_1 (uid, texts) TO 'ctm.csv';
> Using 7 child processesStarting copy of test.test_1 with columns [uid, texts].
> Processed: 1 rows; Rate: 9 rows/s; Avg. rate: 9 rows/s 1 rows exported to 1
> files in 0.148 seconds.
> cqlsh> truncate table test.test_1;
> cqlsh> COPY test.test_1 (uid, texts) FROM 'ctm.csv';
> Using 7 child processes
> Starting copy of test.test_1 with columns [uid, texts].
> Failed to import 1 rows: ParseError - Failed to parse ['But if you now try to
> wash your hands,', ''] : Empty values are not allowed, given up without
> retries
> Failed to process 1 rows; failed rows written to import_test_test_1.err
> Processed: 1 rows; Rate: 2 rows/s; Avg. rate: 2 rows/s
> 1 rows imported from 1 files in 0.415 seconds (0 skipped).
> cqlsh> select * from test.test_1;
> uid | pid
> -----+-----
> {code}
>
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]