You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Oscar Zhang (Jira)" <ji...@apache.org> on 2021/09/01 21:24:00 UTC
[jira] [Created] (AVRO-3194) [C++] Parsing avro file using
`GenericDatum` results in segmentation fault
Oscar Zhang created AVRO-3194:
---------------------------------
Summary: [C++] Parsing avro file using `GenericDatum` results in segmentation fault
Key: AVRO-3194
URL: https://issues.apache.org/jira/browse/AVRO-3194
Project: Apache Avro
Issue Type: Bug
Components: c++
Environment: Ubuntu on AWS EC2
Reporter: Oscar Zhang
Hello,
I wonder what's the correct example of parsing an avro input stream into a vector of `GenericRecord`?
I am trying to parse .avro file using `GenericDatum` to store them in a vector of `GenericRecord`, but I got a segmentation fault (signal 11) when I am trying to call `datum.value()`. Here is the sample code that I am writing:
{code:java}
std::unique_ptr<avro::InputStream> avroInputStream = avro::istreamInputStream(retrievedFile); // `retrievedFile` is a basic_iostream from AWS S3
// get the schema file
std::stringstream schemaInput(schemaName);
avro::ValidSchema validSchema;
avro::compileJsonSchema(schemaInput, validSchema);
// read the data input stream with the given valid schema
avro::DataFileReader<avro::GenericDatum> fileReader(move(avroInputStream));
avro::GenericDatum datum(fileReader.dataSchema());
std::vector<avro::GenericRecord> recordArray;
while (fileReader.read(datum)) {
if (datum.type() == avro::AVRO_RECORD) {
std::cout << "[Check 1]" << std::endl;
const avro::GenericRecord record = datum.value<avro::GenericRecord>(); // result in segmentation fault
std::cout << "[Check 2]" << std::endl;
recordArray.push_back(record);
}
}
// processing the recordArray further
...{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)