-
Notifications
You must be signed in to change notification settings - Fork 17
Labels
Type: bugSomething isn't workingSomething isn't working
Description
On a PR I got what seemed to be an occasional unrelated error in the integration tests between Javascript and C++:
https://github.com/apache/arrow/actions/runs/15113644177/job/42478772147#step:11:20082
If you expand the failure, you get the following logs:
################# FAILURES #################
FAILED TEST: interval_mdn C++ producing, JS consuming
<class 'RuntimeError'>: Command failed: /build/js/bin/integration.ts -a /tmp/tmp9z_g9id9/4b71e8dd_generated_interval_mdn.json_as_file -j /tmp/arrow-integration-da8j13w3/generated_interval_mdn.json --mode VALIDATE
With output:
--------------
json: /tmp/arrow-integration-da8j13w3/generated_interval_mdn.json
arrow: /tmp/tmp9z_g9id9/4b71e8dd_generated_interval_mdn.json_as_file
Error: json and arrow record batches report the same values: fail
Error: 4: -1109815901,1503025502,1803493504,261723424 !== -1109815901,1503025502,1803493496,261723424
at file:///build/js/bin/integration.ts:216:23
at compareVectors (file:///build/js/bin/integration.ts:219:7)
at file:///build/js/bin/integration.ts:191:13
at compareTableIsh (file:///build/js/bin/integration.ts:193:7)
at validateReaderIntegration (file:///build/js/bin/integration.ts:147:13)
at validate (file:///build/js/bin/integration.ts:134:5)
at async file:///build/js/bin/integration.ts:59:21
at validateReaderIntegration (file:///build/js/bin/integration.ts:150:15)
at validate (file:///build/js/bin/integration.ts:134:5)
at async file:///build/js/bin/integration.ts:59:21
--------------
FAILED TEST: interval_mdn JS producing, C++ consuming
<class 'RuntimeError'>: Command failed: /build/cpp/debug/arrow-json-integration-test --integration --arrow=/tmp/tmp9z_g9id9/847e76a4_generated_interval_mdn.json_as_file --json=/tmp/arrow-integration-da8j13w3/generated_interval_mdn.json --mode=VALIDATE
With output:
--------------
Error message: Invalid: Record batch 1 did not match
JSON:
f1: [
null,
null,
-1233922984M1832700302d3945364585489654316ns,
-865764767M-1868167704d5995137276854357748ns,
-1109815901M1503025502d1124093548480635000ns,
null,
-1853878757M-470410382d-3482109426864569063ns,
-274343993M150680692d1713410614578950687ns,
null,
1204985559M1793434370d37200152077710886ns
]
Arrow:
f1: [
null,
null,
-1233922984M1832700302d3945364585489654316ns,
-865764767M-1868167704d5995137276854357748ns,
-1109815901M1503025502d1124093548480635008ns,
null,
-1853878757M-470410382d-3482109426864569063ns,
-274343993M150680692d1713410614578950687ns,
null,
1204985559M1793434370d37200152077710886ns
]
And the explanation seems to be limited floating-point precision when the value -1109815901M1503025502d1124093548480635000ns is read from the JSON file. The nanoseconds components is 1124093548480635000 in the JSON, but Javascript only knows floating-point numbers and they don't have enough precision for this large integer. The nanoseconds component is therefore rounded to 1124093548480635008, and that fails comparing to the data received over Arrow IPC.
Metadata
Metadata
Assignees
Labels
Type: bugSomething isn't workingSomething isn't working