Repository navigation
Decide how the Delta Lake contrib jar is built, versioned, and published in releases #5882
Copy link
Copy link
Open
Labels
area:ciCI/CD, GitHub Actions, build toolingCI/CD, GitHub Actions, build toolingdocumentationImprovements or additions to documentationImprovements or additions to documentationenhancementNew feature or requestNew feature or requestquestionFurther information is requestedFurther information is requested
Description
Context
#5365 adds the Delta Lake scan contrib as a separate Maven module (contrib/delta-spark) that only enters the reactor under the delta profile and produces its own jar, comet-contrib-delta-spark<version>_<scala>. The user guide and the module README tell users to put that jar on the classpath alongside delta-spark. This issue is for deciding how that jar reaches users, and more generally how table-format integrations are packaged and released, since Delta and Iceberg currently take different shapes.
How the release tooling behaves today
dev/release/build-release-comet.shruns./mvnw installinto a temporary local repository for six profile combinations (Spark 3.4 and 3.5 with Scala 2.12 and 2.13, then Spark 4.0 and 4.1). None of those invocations pass-Pdelta, so the contrib module is never built during a release.dev/release/publish-to-maven.shdoes not runmvn deploy. It signs and uploads every.jarand.pomfound underorg/apache/datafusionin that local repository. Two things follow:maven.deploy.skiphas no effect on what gets published. Whether the contrib jar ships depends only on whether-Pdeltais on theinstalllines.- Anything
installproduces is published. feat: add native Delta Lake scan contrib module (page/row-group pruning) #5365 adds an unconditionaltest-jarexecution tospark/pom.xml(about 6.7 MB per profile) so that the contrib suites can reuseCometTestBase. As written it would ship six-tests.jarartifacts per release.
- The native library needs no release change. The release containers build with default Cargo features, and the
deltafeature (deletion-vector decoding plus the planner arm) is in the default set, so the releasedlibcometalready carries everything the contrib jar needs.
Questions to settle
- Should the contrib jar be published at all? If yes,
-Pdeltagoes on the Spark 3.5, 4.0 and 4.1installlines (the 3.4 pairing isdelta-core2.4 and does not compile). If no, the docs should say build-from-source is the only route and themaven.deploy.skip=falseoverride in the contrib pom should go. An experimental feature that only exists if users build from source is unlikely to get real-workload testing. - What Delta versions does each published jar support? Each jar compiles against one Delta release per Spark line (3.3.2, 4.0.1, 4.3.1). Nothing verifies binary compatibility across Delta minors, and
pom.xmlalready records that Delta 4.1.0 and 4.2.0 are incompatible with Spark 4.1.3. Publishing implies a support statement in the user guide. - Should the spark test-jar be published? Options: bind the
test-jarexecution inside thedeltaprofile so it only exists when the contrib is built, or accept publishing it (there is partial precedent in the-test-sources.jar). - Why is Delta packaged differently from Iceberg, and should it stay that way? Iceberg support lives inside
comet-spark:iceberg-spark-runtimeis a test-scope dependency only andIcebergReflectionaddresses every Iceberg class by name, so there is no profile, no separate jar, and no dependency on a specific Iceberg release. The Delta contrib compiles againstdelta-sparkinternals (DeltaParquetFileFormat,DeletionVectorDescriptor,DeltaColumnMapping), which forces aprovideddependency, one artifact per Spark-and-Delta pairing, and rules out Spark 3.4. That structural difference explains the module, the profile, the separate CI workflow and the opt-in config. The two consistent end states are (a) fold Delta intocomet-sparkbehind reflection like Iceberg, or (b) keep the contrib shape and finish it (publish the jar, document the Delta pairing, gate the test-jar). Deciding this on purpose also settles part of the core-versus-contrib boundary question raised in the feat: add native Delta Lake scan contrib module (page/row-group pruning) #5365 review and in Converge the two Delta read paths into one plugin (clean architecture + performance) #5411.
Related
- feat: add native Delta Lake scan contrib module (page/row-group pruning) #5365 (the contrib PR)
- Explore integration with Delta Lake #174 (Delta Lake support)
- Converge the two Delta read paths into one plugin (clean architecture + performance) #5411 (convergence of the two Delta read paths)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:ciCI/CD, GitHub Actions, build toolingCI/CD, GitHub Actions, build toolingdocumentationImprovements or additions to documentationImprovements or additions to documentationenhancementNew feature or requestNew feature or requestquestionFurther information is requestedFurther information is requested
Activity