feat(storage): support Jindo for OSS scan planning - #696
XiaoHongbo-Hope wants to merge 3 commits into
Conversation
|
Have you compared Jindo and OpenDAL? What are the differences? (benchmark) |
yes, I did a test, Jindo performance is a little better, but there is a lot of qps issue during my testing, so may need another testing. And, I think this PR is best to have, not very urgent now. Because qps issue is addressed in other way. |
258cf5f to
74ead67
Compare
I updated the performance result in PR descrption. |
|
Requirement fit: SUPPORTED. Implementation: FINDINGS, reviewed at The opt-in planning backend has a concrete consumer in the merged apache/paimon#9124, and the supplied measurements demonstrate an end-to-end planning benefit for the two tested snapshots. Keeping the claim scoped to planning is appropriate: the reported data reads are slightly slower and request/QPS effects remain unmeasured. [P2] Preserve explicit SDK environment selection before Python auto-discovery. In I traced configuration, lazy initialization, paginated listing, ranged reads, read-only operations, and the FileIO callers. |
| user: DEFAULT_JINDO_USER.to_string(), | ||
| properties: HashMap::new(), | ||
| }; | ||
| let operator = jindo_config_build(&config, "bucket").unwrap(); |
There was a problem hiding this comment.
Could we add a test that actually loads the SDK and covers stat, paginated listing, and ranged reads? The current tests stop before exercising those paths, so regressions there would not be caught.
JingsongLi
left a comment
There was a problem hiding this comment.
Requirement fit: SUPPORTED. The opt-in backend has a native planning consumer and the reported same-snapshot measurements show a planning benefit. The claim should remain scoped to planning; the reported data reads are slower and OSS request/QPS effects were not measured.
Implementation: CLEAN at 1975653c9129f18582738d907c53e7197df1f2a9 for the code paths I could verify. The latest commit fixes my earlier SDK path precedence finding: explicit catalog and JINDOSDK_* settings now take precedence over Python package discovery. I traced selection, lazy initialization, stat/list/range handling, read-only behavior, and cleanup again. I found no new actionable code defect.
Verification: cargo test -p paimon --features storage-jindo --lib storage_jindo passed (6 tests); cargo test -p pypaimon_rust --lib test_pyjindo_discovery_precedence passed; the current head's CI succeeded. Production validation remains pending: there is no Jindo SDK installed in this review environment, and the committed tests still do not load one. The SDK-backed stat, paginated listing, ranged read, and failure cases raised in QuakeWang's current review should be exercised before treating this backend as production-ready. The PR description's local probes are useful evidence, but they are not a repeatable regression gate.
7a19ae7 to
48bd543
Compare
f5b5a92 to
c5c89b2
Compare
c5c89b2 to
f0b1d6f
Compare
|
Added a bounded Jindo read gate in
Motivation from a fixed single-node 8-rank/8-worker read workload with official pyjindosdk 6.10.401:
The observed throughput cost was about 1.1%, while connection warnings dropped substantially and the reproduced warm-up tail did not recur in the bounded runs. This gate limits request fan-out; it does not replace an independent JindoSDK DNS/connection-pool fix. Local validation: |
Purpose
Add an opt-in, read-only JindoSDK backend for OSS scans. OpenDAL remains the default. PyPaimon can select it for native planning through apache/paimon#9124.
Changes
storage-jindofeature, selected withfs.oss.impl=jindofs.jindo.max.concurrent.reads(default8per OSS operator)Benchmark
Release-mode, partition-filtered scan planning on two fixed OSS-backed snapshots. This reads Paimon metadata and builds splits; it does not read data-file contents. Both backends ran on the same host with identical predicates, in reversed order and two independent processes per backend.
The file counts are references in the resulting scan plan, not individual data files opened or read. Both backends produced matching snapshot, split, file-count, and planned-byte results. Request count and peak OSS QPS were not measured.
Data read benchmark
Release-mode reads on two fixed OSS-backed snapshots. Planning completed before the timer started. Each backend ran in three independent processes on the same host, in alternating order.
Both backends produced matching row counts, Arrow sizes, and content checksums. Planning time is excluded. Network bytes and request count were not measured, so these results show end-to-end reader latency for these workloads, not raw OSS throughput.
These isolated serial reads were 16–20% slower with Jindo. A separate same-host 8×8 random-read A/B found lower normal-path read latency with Jindo, so the result is workload-dependent; the gate improves stability, not single-read overhead.
Read concurrency trade-off
A separate fixed single-node random-read workload used official
pyjindosdk==6.10.401, 8 ranks × 8 workers, 16 samples per batch, 64 warm-up batches, and 4,096 measured samples per round.The observed steady-throughput cost of limit 8 was about 1.1%. It substantially reduced connection warnings, and the reproduced 100-second warm-up tail did not recur in these two bounded rounds. Two rounds are not a long-term stability proof. In a separate limit-8 diagnostic soak, one Jindo C SDK
getObjectstill blocked for about 60 seconds; therefore the gate limits request fan-out but does not fix JindoSDK DNS, connection-pool, or request-timeout defects.A limit-4 tuning run produced 255.766 / 261.487 samples/s with zero connection warnings. It is more conservative but is marginal for a 260 samples/s target. The limit is per OSS operator, not process-global or host-global, so multiple processes/operators still multiply aggregate concurrency.
OpenDAL remains the default. Select Jindo only when its planning benefit or workload-level throughput has been validated together with tail latency and storage-request pressure for the deployment.
Validation
pyjindosdk==6.10.4and exercises stat, paginated listing, ranged reads, 404/503 mapping, and C++ list exceptions against a local OSS-protocol serverstorage-jindobuildsNotes
No JindoSDK binary is packaged. Selecting Jindo without the feature or a loadable SDK returns a configuration error. A FileIO configured with Jindo rejects writes, deletes, renames, and copies.