This is an automated email from the ASF dual-hosted git repository.

voonhous pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/master by this push:
     new b3dfb2a125f6 test(spark): reference disjoint blob ranges in Lance 
out-of-line test (#19916)
b3dfb2a125f6 is described below

commit b3dfb2a125f6c4665500cfb4331a24c1260782f1
Author: voonhous <[email protected]>
AuthorDate: Sat Sep 12 10:27:02 2026 +0800

    test(spark): reference disjoint blob ranges in Lance out-of-line test 
(#19916)
    
    TestLanceDataSource#testBlobOutOfLine pointed two rows at [0, 1024) and
    [0, 512) of one external file. A blob is a distinct entity and two blobs
    never share bytes, so BatchedBlobReader rejects the pair whenever both
    rows land in the same Spark task. At the harness's four shuffle
    partitions they never did; at two (#19906) every case failed.
    
    Grow blob_file_2.bin to 1536 bytes and point row 4 at [1024, 1536).
    
    Context: #19911
---
 .../scala/org/apache/hudi/functional/TestLanceDataSource.scala   | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git 
a/hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/hudi/functional/TestLanceDataSource.scala
 
b/hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/hudi/functional/TestLanceDataSource.scala
index 532968ec1fc9..ed54f0fc3c8b 100644
--- 
a/hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/hudi/functional/TestLanceDataSource.scala
+++ 
b/hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/hudi/functional/TestLanceDataSource.scala
@@ -1806,15 +1806,18 @@ class TestLanceDataSource extends 
HoodieSparkClientTestBase {
     val externalDir = Files.createDirectories(
       
Paths.get(s"$basePath/_blob_ext${modeSuffix}_${tableType.name().toLowerCase}"))
     val filePath1 = BlobTestHelpers.createTestFile(externalDir, 
"blob_file_1.bin", 1024)
-    val filePath2 = BlobTestHelpers.createTestFile(externalDir, 
"blob_file_2.bin", 1024)
+    val filePath2 = BlobTestHelpers.createTestFile(externalDir, 
"blob_file_2.bin", 1536)
 
     val sparkSess = spark
     import sparkSess.implicits._
+    // Every row references a disjoint range. A blob is a distinct entity 
(#18098), so
+    // BatchedBlobReader rejects overlapping ranges within a task, and which 
rows share a
+    // task depends only on partitioning.
     val baseDf = Seq(
       (1, filePath1, 0L, 256L),
       (2, filePath1, 256L, 256L),
       (3, filePath2, 0L, 1024L),
-      (4, filePath2, 0L, 512L)
+      (4, filePath2, 1024L, 512L)
     ).toDF("id", "path", "offset", "length")
     val rawDf = baseDf.select($"id",
       BlobTestHelpers.blobStructCol("payload", $"path", $"offset", $"length"))
@@ -1860,7 +1863,7 @@ class TestLanceDataSource extends 
HoodieSparkClientTestBase {
       s"SELECT id, read_blob(payload) AS bytes FROM $viewName ORDER BY 
id").collect()
     assertEquals(4, materialized.length)
 
-    val expectedRanges = Map(1 -> 0L, 2 -> 256L, 3 -> 0L, 4 -> 0L)
+    val expectedRanges = Map(1 -> 0L, 2 -> 256L, 3 -> 0L, 4 -> 1024L)
     val expectedLengths = Map(1 -> 256, 2 -> 256, 3 -> 1024, 4 -> 512)
     materialized.foreach { row =>
       val id = row.getInt(row.fieldIndex("id"))

Reply via email to