andygrove commented on issue #2370:
URL: 
https://github.com/apache/datafusion-ballista/issues/2370#issuecomment-5415218873

   Two notes for whoever picks this up.
   
   **We now have a concrete case.** #2367 turned out to be a `ballista-core` 
52.0.0 Python extension talking to a current cluster. 52.0.0 predates `file_id` 
and `is_sort_shuffle` on `FetchPartition` (added in 8c6c864f8, #1527), so the 
client sent a fetch ticket with no `file_id`, the executor took the `(None, 
false)` branch of `create_shuffle_path` and looked for `data.arrow` while the 
writer had produced `data-{task_id}.arrow`. The job completed successfully and 
then the result fetch failed with `NotFound`. Four releases of skew, no error 
until the very last step, and the symptom pointed at the shuffle machinery 
rather than at the client. That is the failure mode this issue is about.
   
   **There is a policy question to settle first, and it conflicts with #2374.** 
The Python client cannot track the workspace DataFusion version. `pyballista` 
re-exports datafusion-python types (`python/src/lib.rs`), so 
`datafusion-python`, `datafusion` and `ballista-core` all have to link the same 
`datafusion`, and crates.io `datafusion-python` is still at 54.0.0 while the 
workspace is on the `55.0.0-rc3` tag. The practical consequence is that the 
Python client normally lags the cluster by a DataFusion release cycle, so a 
*supported* Python user is routinely running a client that is a release or two 
behind.
   
   That means a strict equality check on `BALLISTA_PROTOCOL_VERSION`, like the 
one executors get today, would reject the normal Python setup. #2374 adds a CI 
job that runs the pinned 54.0.0 client against a cluster built from the branch, 
precisely because that is what users run, and a strict check would turn that 
job red by design.
   
   So this probably wants something more nuanced than the executor check, for 
example:
   
   * a minimum supported client version rather than exact equality, with the 
version bumped only when something client-visible actually breaks, or
   * a capability or feature negotiation at connect time, so the scheduler can 
tell whether the client understands `file_id` rather than inferring it from a 
version number.
   
   Either way the win is the same and worth having: fail at connect with a 
message naming both versions, instead of at the last fetch with a missing file.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to