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