You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by "jean-claude (JIRA)" <ji...@apache.org> on 2018/10/15 22:55:00 UTC
[jira] [Created] (DRILL-6796) Record reader with batch size larger
than 0x4000 fail with an assertion error
jean-claude created DRILL-6796:
----------------------------------
Summary: Record reader with batch size larger than 0x4000 fail with an assertion error
Key: DRILL-6796
URL: https://issues.apache.org/jira/browse/DRILL-6796
Project: Apache Drill
Issue Type: Bug
Reporter: jean-claude
@Test
public void testArrayOfArrayJson() throws Exception {
try (OutputStreamWriter w = new OutputStreamWriter(new FileOutputStream(new File(testDir, "test.json")))) {
w.write("\{\"arrayOfArray\":[[1],[1,2]]}\n");
for (int i = 0; i < JSONRecordReader.DEFAULT_ROWS_PER_BATCH; i++) {
w.write("\{\"anInt\":1}\n");
}
}
LogFixtureBuilder logBuilder = LogFixture.builder()
// Log to the console for debugging convenience
.toConsole().logger("org.apache.drill.exec", Level.TRACE);
try (LogFixture logs = logBuilder.build()) {
String sql = "select root.arrayOfArray[0][0] as w from `dfs.data`.`test.json` as root";
rowSetIterator = client.queryBuilder().sql(sql).rowSetIterator();
schemaBuilder = new SchemaBuilder();
schemaBuilder.add("w", TypeProtos.MinorType.BIGINT, DataMode.OPTIONAL);
expectedSchema = schemaBuilder.buildSchema();
DirectRowSet batch1 = nextRowSet();
rowSetBuilder = newRowSetBuilder();
rowSetBuilder.addRow(1L);
for (int i = 0; i < JSONRecordReader.DEFAULT_ROWS_PER_BATCH - 1; i++) {
rowSetBuilder.addRow(new Object[] \{ null });
}
verify(rowSetBuilder.build(), batch1);
DirectRowSet batch2 = nextRowSet();
rowSetBuilder = newRowSetBuilder();
rowSetBuilder.addRow(new Object[] \{ null });
verify(rowSetBuilder.build(), batch2);
}
}
The test passes. Then I change the JsonRecordReader batch size
public static final long DEFAULT_ROWS_PER_BATCH = BaseValueVector.INITIAL_VALUE_ALLOCATION ;
to be
public static final long DEFAULT_ROWS_PER_BATCH = BaseValueVector.INITIAL_VALUE_ALLOCATION + 1;
and the test case fails.
This problem was noticed when writing a msgpack reader. If I use a size larger than 0x4000 I would get the same error as with the JSON reader.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)