You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Varun Barala (JIRA)" <ji...@apache.org> on 2017/08/06 13:05:00 UTC
[jira] [Commented] (CASSANDRA-13670) NullPointerException while
closing CQLSSTableWriter
[ https://issues.apache.org/jira/browse/CASSANDRA-13670?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16115800#comment-16115800 ]
Varun Barala commented on CASSANDRA-13670:
------------------------------------------
[~arpanps] Can you please help me to reproduce this?
{code:java}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import org.apache.cassandra.dht.Murmur3Partitioner;
import org.apache.cassandra.io.sstable.CQLSSTableWriter;
import org.supercsv.io.CsvListReader;
import org.supercsv.prefs.CsvPreference;
/**
*
* @author ooo
*
*/
public class CqlWriterTest {
private static final String createDDL = "CREATE TABLE testing.table2 (pk1 text,pk2 text,ck1 text,ck2 text,nk1 text,nk2 text,PRIMARY KEY (( pk1, pk2 ), ck1, ck2));";
private static final String csvFilePath = "/home/ooo/cassandra3.0.14/apache-cassandra-3.0.14/var.csv";
private static final String insertDDL = "insert into testing.table2 (pk1,pk2,ck1,ck2,nk1,nk2) VALUES (?,?,?,?,?,?);";
private static final String inputDir = "/home/ooo/cassandra3.0.14/apache-cassandra-3.0.14/sstables/tmp";
public static void main(String[] args) throws IOException {
CQLSSTableWriter.Builder builder = CQLSSTableWriter.builder();
builder.inDirectory(inputDir).forTable(createDDL).using(insertDDL).withPartitioner(new Murmur3Partitioner());
CQLSSTableWriter writer = builder.build();
try (BufferedReader reader = new BufferedReader(new FileReader(csvFilePath));
CsvListReader csvReader = new CsvListReader(reader, CsvPreference.STANDARD_PREFERENCE);) {
List<String> line;
while ((line = csvReader.read()) != null) {
List<ByteBuffer> bbl = new ArrayList<>();
for (String l : line) {
bbl.add(ByteBuffer.wrap(l.getBytes()));
}
writer.rawAddRow(bbl);
// If I use writer.addRow(); it works fine.
}
} finally {
writer.close();
}
}
}
{code}
It's working fine in my case.
{{writer.addRow()}} accepts object values not bin values.
java doc says:-
{code:java}
**
* Adds a new row to the writer.
* <p>
* Each provided value type should correspond to the types of the CQL column
* the value is for. The correspondance between java type and CQL type is the
* same one than the one documented at
* www.datastax.com/drivers/java/2.0/apidocs/com/datastax/driver/core/DataType.Name.html#asJavaClass().
* <p>
* If you prefer providing the values directly as binary, use
* {@link #rawAddRow} instead.
*
* @param values the row values (corresponding to the bind variables of the
* insertion statement used when creating by this writer).
* @return this writer.
*/
public CQLSSTableWriter addRow(List<Object> values)
{code}
> NullPointerException while closing CQLSSTableWriter
> ---------------------------------------------------
>
> Key: CASSANDRA-13670
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13670
> Project: Cassandra
> Issue Type: Bug
> Components: Tools
> Environment: Linux
> Reporter: Arpan Khandelwal
> Fix For: 3.0.14
>
>
> Reading data from csv file and writing using CQLSSTableWriter.
> {code:java}
> CQLSSTableWriter.Builder builder = CQLSSTableWriter.builder();
> builder.inDirectory(outputDir).forTable(createDDL).using(insertDML).withPartitioner(new Murmur3Partitioner());
> CQLSSTableWriter writer = builder.build();
> {code}
> {code:java}
> try (BufferedReader reader = new BufferedReader(new FileReader(csvFilePath));
> CsvListReader csvReader = new CsvListReader(reader, CsvPreference.STANDARD_PREFERENCE);) {
> List<String> line;
> while ((line = csvReader.read()) != null) {
> List<ByteBuffer> bbl = new ArrayList<>();
> for (String l : line) {
> bbl.add(ByteBuffer.wrap(l.getBytes()));
> }
> writer.rawAddRow(bbl);
> // If I use writer.addRow(); it works fine.
> }
> } finally {
> writer.close();
> }
> {code}
> Getting below exception
> {code:java}
> java.lang.RuntimeException: java.lang.NullPointerException
> at org.apache.cassandra.io.sstable.SSTableSimpleUnsortedWriter.close(SSTableSimpleUnsortedWriter.java:136)
> at org.apache.cassandra.io.sstable.CQLSSTableWriter.close(CQLSSTableWriter.java:280)
> at com.cfx.cassandra.SSTableCreator.execute(SSTableCreator.java:155)
> at com.cfx.cassandra.SSTableCreator.main(SSTableCreator.java:84)
> Caused by: java.lang.NullPointerException
> at org.apache.cassandra.io.sstable.format.SSTableReader.saveSummary(SSTableReader.java:910)
> at org.apache.cassandra.io.sstable.format.big.BigTableWriter$IndexWriter.doPrepare(BigTableWriter.java:472)
> at org.apache.cassandra.utils.concurrent.Transactional$AbstractTransactional.prepareToCommit(Transactional.java:173)
> at org.apache.cassandra.io.sstable.format.big.BigTableWriter$TransactionalProxy.doPrepare(BigTableWriter.java:303)
> at org.apache.cassandra.utils.concurrent.Transactional$AbstractTransactional.prepareToCommit(Transactional.java:173)
> at org.apache.cassandra.io.sstable.format.SSTableWriter.prepareToCommit(SSTableWriter.java:229)
> at org.apache.cassandra.io.sstable.SimpleSSTableMultiWriter.prepareToCommit(SimpleSSTableMultiWriter.java:97)
> at org.apache.cassandra.io.sstable.SSTableTxnWriter.doPrepare(SSTableTxnWriter.java:77)
> at org.apache.cassandra.utils.concurrent.Transactional$AbstractTransactional.prepareToCommit(Transactional.java:173)
> at org.apache.cassandra.utils.concurrent.Transactional$AbstractTransactional.finish(Transactional.java:184)
> at org.apache.cassandra.io.sstable.SSTableTxnWriter.finish(SSTableTxnWriter.java:92)
> at org.apache.cassandra.io.sstable.SSTableSimpleUnsortedWriter$DiskWriter.run(SSTableSimpleUnsortedWriter.java:210)
> {code}
> If I use writer.addRow(); instead of using writer.rawAddRow() it works fine.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org