Skip to content

v6: Phase 1 — Arrow format negotiation + graceful JSON fallback (server-gated) #60

Description

@Pandys

Gated on server Arrow support shipping (see #49, planning/arrow-read-path-decision.md).

Handle the staggered 6-cluster rollout: the same client version will talk to Arrow-capable and JSON-only clusters at the same time.

Scope

  • fetch(format=...) control — give the caller a way to request Arrow explicitly, and a sensible default.
    • Suggested default: if pyarrow is installed ([arrow] extra), fetch() negotiates Arrow transparently and JSON is the fallback; if not, stays JSON. Users get the speedup by installing clappform[arrow] and changing nothing else.
    • Confirm with the team: transparent-when-installed vs. explicit opt-in fetch(format="arrow").
  • Check what you actually received, don't assume. The enum is additive and unset ⇒ JSON, so a client that requests Arrow against a server that ignores the field gets JSON back. If you asked for Arrow and got JSON, decode as JSON (the Phase 0 path handles this) — don't crash, don't byte-sniff.
  • Have the server echo the chosen format (response field or trailing metadata) so the check is a lookup, not a guess.

Why this matters

This staggered-rollout reality is exactly why the Phase 0 format-aware _codec (#58) exists.

Depends on: #49, #58.

Source: planning/pypi-arrow-handoff.md §4.3.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestpriority: mediumNeeded for release, not blocking corev6v6 rewrite (Major/6)

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions