From be7ae2f20a36f4c2f3403c9915494d269c4183bb Mon Sep 17 00:00:00 2001 From: Xin Huang Date: Wed, 24 Jun 2026 03:04:36 +0000 Subject: [PATCH] [Spark] Provide default implementations for SnapshotDescriptor.dataPath, numDeltaFiles, and totalDeltaFilesByteSize SnapshotDescriptor previously declared dataPath as an abstract member, requiring every implementor to define it. Make dataPath a default implementation that throws UnsupportedOperationException, and add numDeltaFiles and totalDeltaFilesByteSize as members with the same default. Implementors that can supply these values override them; those that cannot no longer need stub overrides. The two inline descriptors that define dataPath now mark it as an override since the trait member is no longer abstract. --- .../scala/io/delta/sharing/spark/DeltaSharingUtils.scala | 2 +- .../main/scala/org/apache/spark/sql/delta/Snapshot.scala | 8 +++++++- .../org/apache/spark/sql/delta/sources/DeltaSource.scala | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/sharing/src/main/scala/io/delta/sharing/spark/DeltaSharingUtils.scala b/sharing/src/main/scala/io/delta/sharing/spark/DeltaSharingUtils.scala index 59771d4b302..0f20e13db5c 100644 --- a/sharing/src/main/scala/io/delta/sharing/spark/DeltaSharingUtils.scala +++ b/sharing/src/main/scala/io/delta/sharing/spark/DeltaSharingUtils.scala @@ -304,7 +304,7 @@ object DeltaSharingUtils extends Logging { localDeltaLog, new SnapshotDescriptor { val deltaLog: DeltaLog = localDeltaLog - val dataPath: Path = localDeltaLog.dataPath + override val dataPath: Path = localDeltaLog.dataPath val logPath: Path = localDeltaLog.logPath val metadata: Metadata = deltaSharingTableMetadata.metadata.deltaMetadata val protocol: Protocol = deltaSharingTableMetadata.protocol.deltaProtocol diff --git a/spark/src/main/scala/org/apache/spark/sql/delta/Snapshot.scala b/spark/src/main/scala/org/apache/spark/sql/delta/Snapshot.scala index 6dc96c17e96..8a9f86c8140 100644 --- a/spark/src/main/scala/org/apache/spark/sql/delta/Snapshot.scala +++ b/spark/src/main/scala/org/apache/spark/sql/delta/Snapshot.scala @@ -67,8 +67,14 @@ trait SnapshotDescriptor extends DeltaLoggingProvider { def schema: StructType = metadata.schema - def dataPath: Path + def dataPath: Path = + throw new UnsupportedOperationException("dataPath is not implemented for this descriptor") def logPath: Path + def numDeltaFiles: Long = + throw new UnsupportedOperationException("numDeltaFiles is not implemented for this descriptor") + def totalDeltaFilesByteSize: Long = + throw new UnsupportedOperationException( + "totalDeltaFilesByteSize is not implemented for this descriptor") protected[delta] def numOfFilesIfKnown: Option[Long] protected[delta] def sizeInBytesIfKnown: Option[Long] diff --git a/spark/src/main/scala/org/apache/spark/sql/delta/sources/DeltaSource.scala b/spark/src/main/scala/org/apache/spark/sql/delta/sources/DeltaSource.scala index 4c55a9af4ec..2a0eb147d5e 100644 --- a/spark/src/main/scala/org/apache/spark/sql/delta/sources/DeltaSource.scala +++ b/spark/src/main/scala/org/apache/spark/sql/delta/sources/DeltaSource.scala @@ -153,7 +153,7 @@ trait DeltaSourceBase extends Source // Construct a snapshot descriptor with custom schema inline new SnapshotDescriptor { val deltaLog: DeltaLog = snapshotAtSourceInit.deltaLog - val dataPath: Path = snapshotAtSourceInit.dataPath + override val dataPath: Path = snapshotAtSourceInit.dataPath val logPath: Path = snapshotAtSourceInit.logPath val metadata: Metadata = snapshotAtSourceInit.metadata.copy(