Zoltan Borok-Nagy has uploaded this change for review. ( http://gerrit.cloudera.org:8080/24949
Change subject: IMPALA-15423: Fix non-ASCII strings in Iceberg metadata tables ...................................................................... IMPALA-15423: Fix non-ASCII strings in Iceberg metadata tables IcebergRowReader copied strings from the JVM with JniUtfCharGuard, whose size was the number of UTF-16 code units of the string, while its buffer held the modified UTF-8 encoding. Non-ASCII characters take more bytes than code units, so the strings were truncated, e.g. 'Zürich' was returned as 'Züric'. Modified UTF-8 also differs from standard UTF-8 for supplementary characters and NUL. The metadata scanner also leaked JNI local references: the byte arrays of string and binary values, and the keys and values of map entries were never deleted. The fragment thread is attached to the JVM, so these references kept the objects alive until the thread detached, i.e. for the whole scan. This patch: - converts strings to UTF-8 byte arrays on the Java side and copies them with JniByteArrayGuard, - deletes these local references after use, and pushes a local frame for each row, so the remaining references of a row are freed too, - makes JniUtfCharGuard::get_size() return the size of its buffer. None of its remaining callers use it. Testing: - Added EE tests that read non-ASCII partition values, including a supplementary character, from the files and partitions metadata tables. They failed without the fix. - Checked with a class histogram of the coordinator JVM that a scan of the files table of a table with 1824 data files no longer keeps the map values alive until the end of the scan. - Ran test_iceberg.py. Change-Id: I862e327e4b7b93dfabb660d88a21e04ee7b03cd5 Assisted-by: Claude Opus 5.5 (1M context) <[email protected]> --- M be/src/exec/iceberg-metadata/iceberg-metadata-scan-node.cc M be/src/exec/iceberg-metadata/iceberg-metadata-scanner.cc M be/src/exec/iceberg-metadata/iceberg-metadata-scanner.h M be/src/exec/iceberg-metadata/iceberg-row-reader.cc M be/src/exec/iceberg-metadata/iceberg-row-reader.h M be/src/util/jni-util.cc M be/src/util/jni-util.h M fe/src/main/java/org/apache/impala/util/IcebergMetadataScanner.java M testdata/workloads/functional-query/queries/QueryTest/iceberg-metadata-tables.test 9 files changed, 96 insertions(+), 34 deletions(-) git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/49/24949/1 -- To view, visit http://gerrit.cloudera.org:8080/24949 To unsubscribe, visit http://gerrit.cloudera.org:8080/settings Gerrit-Project: Impala-ASF Gerrit-Branch: master Gerrit-MessageType: newchange Gerrit-Change-Id: I862e327e4b7b93dfabb660d88a21e04ee7b03cd5 Gerrit-Change-Number: 24949 Gerrit-PatchSet: 1 Gerrit-Owner: Zoltan Borok-Nagy <[email protected]>
