[ 
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-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to