You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hudi.apache.org by "yihua (via GitHub)" <gi...@apache.org> on 2026/08/25 22:36:27 UTC

[PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

yihua opened a new pull request, #19737:
URL: https://github.com/apache/hudi/pull/19737

   ### Describe the issue this Pull Request addresses
   
   closes #19736
   
   Stacked on #19735, review that one first. Until it merges this PR's diff shows its commit too.
   
   ### Summary and Changelog
   
   `HoodieStorageUtils.getStorage(StorageConfiguration)` forwarded to a `"file:///"` default URI, so it always returned storage bound to the local filesystem regardless of the configuration passed in, while its signature read as "build storage from this configuration".
   
   `BatchedBlobReader` used it to build executor-side storage and then read `blob.reference.external_path` through the result, so any out-of-line blob reference on `s3a` or `gs` failed with `Wrong FS ... expected: file:///`. It now holds the configuration and resolves storage per referenced filesystem, cached by scheme and authority and closed at task completion, since a partition's blob references only become known as its rows arrive and one partition may reference more than one filesystem.
   
   With that call site gone the overload has no production callers, so it and `DEFAULT_URI` move to `HoodieTestUtils`. Every remaining `HoodieStorageUtils` factory takes a path. The non-local-scheme filesystem harness added by #19735 moves from `TestRollbackHelperV1` to `hudi-hadoop-common` test utils so the blob reader tests can use it too.
   
   ### Impact
   
   Out-of-line blob reads on object storage work; they previously failed unconditionally. `BatchedBlobReader`'s constructor now takes `StorageConfiguration` instead of `HoodieStorage`; the `BatchedBlobReader` object's public `readBatched` and `processRDD` entry points are unchanged. `HoodieStorageUtils.getStorage(StorageConfiguration)` and `HoodieStorageUtils.DEFAULT_URI` are removed from `hudi-common` main; both were only reachable from test code after this change.
   
   ### Risk Level
   
   low
   
   Verified red-then-green: reverting `HoodieStorageUtils` and `BatchedBlobReader` while keeping the new tests fails all three non-local-scheme tests with `IllegalArgumentException: Wrong FS: s3a://..., expected: file:///`, the production symptom.
   
   215 tests green on JDK 11 across the affected suites, including `TestBatchedBlobReader` (19, four new), `TestBatchedBlobReaderMerge` (10), `TestRollbackHelperV1` (5), `TestRollbackHelper` (13), `TestFSUtils` (96), `TestEightToSevenDowngradeHandler` (10), `TestHoodieIncrSource` (21) and the remaining repointed suites. Checkstyle and scalastyle clean.
   
   `TestCommitsCommand` fails on this base with `Failed to construct HoodieInstant: The provided file name 102_<ts>.commit does not conform to the required format`. That reproduces identically at the base commit with these changes stashed, so it is pre-existing and unrelated.
   
   The new tests expose the local filesystem under `s3a` and `gs` rather than needing a remote object store, so they run anywhere. `RawLocalFileSystem.pathToFile` keeps only the path component of a URI, so the only thing the subclass changes is the identity the filesystem reports, which is what `FileSystem.checkPath` validates against. One test covers two filesystems in a single partition, which a resolve-once fix would fail, and one asserts the borrowed schemes really reach local files so the others cannot pass for the wrong reason.
   
   ### Documentation Update
   
   none
   
   ### Contributor's checklist
   
   - [x] Read through [contributor's guide](https://hudi.apache.org/contribute/how-to-contribute)
   - [x] Enough context is provided in the sections above
   - [x] Adequate tests were added if applicable
   


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5420090954

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     }, {
       "hash" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561",
       "triggerID" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * d348d056ac652807fccd679989b67f57434562cd Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   * 75159370be785aaee659c81355eb2a10da4fa5ec Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5419604369

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * d348d056ac652807fccd679989b67f57434562cd Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5421110305

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     }, {
       "hash" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561",
       "triggerID" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "triggerType" : "PUSH"
     }, {
       "hash" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564",
       "triggerID" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d938141e1dfbcbde489dbdb16752ab41742b6372",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16566",
       "triggerID" : "d938141e1dfbcbde489dbdb16752ab41742b6372",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 75159370be785aaee659c81355eb2a10da4fa5ec Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561) 
   * fe217b9ba08c637e50d2cbccae6bb04445dc4ad0 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564) 
   * d938141e1dfbcbde489dbdb16752ab41742b6372 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16566) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5418535572

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 181d0af120e0701d1691e8e70f379bc172f0f893 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547) 
   * 71194c7855f81fe799ad464c32016b38e1607fc3 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548) 
   * dc10637b32cc67fedcb090c7023d3d18bb335281 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550) 
   * cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-agent (via GitHub)" <gi...@apache.org>.
hudi-agent commented on code in PR #19737:
URL: https://github.com/apache/hudi/pull/19737#discussion_r3859746320


##########
hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/hudi/blob/BlobTestHelpers.scala:
##########
@@ -71,6 +75,37 @@ object BlobTestHelpers {
     ).as(name, blobMetadata)
   }
 
+  /**
+   * Exposes the local filesystem under the given non-local schemes, so a test can tell apart storage
+   * resolved from a path and storage resolved from a default file:/// URI without a remote object
+   * store.
+   *
+   * Hadoop caches filesystems statically, keyed by scheme and authority rather than by
+   * configuration, so a borrowed impl would outlive the test for the whole fork and the next test to
+   * use that scheme would silently read local files. Both the configuration and the cache are put
+   * back afterwards.
+   */
+  def withBorrowedSchemes[T](hadoopConf: Configuration, authorities: Seq[String], schemes: String*)(body: => T): T = {

Review Comment:
   πŸ€– nit: `authorities` is `Seq[String]` while `schemes` is `String*` β€” a caller has to wrap one but not the other, which is an inconsistency that only shows up when you try to call it. Could you make both consistent, e.g. `schemes: Seq[String]` (and move `body` to a separate parameter list), or flip `authorities` to varargs if the single-authority case is the common one?
   
   <sub><i>⚠️ AI-generated; verify before applying. React πŸ‘/πŸ‘Ž to flag quality.</i></sub>



##########
hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/hudi/blob/TestBatchedBlobReader.scala:
##########
@@ -454,4 +461,147 @@ class TestBatchedBlobReader extends HoodieClientTestBase {
     assertTrue(thrown.getCause.isInstanceOf[IllegalArgumentException])
     assertTrue(thrown.getCause.getMessage.contains("Overlapping blob ranges detected"))
   }
+
+  /**
+   * Blob references are absolute paths carried in row data, so the filesystem a partition must read
+   * is not known until the rows arrive. These tests put the referenced files behind an object-store
+   * scheme, which is where storage resolved from a default {@code file:///} URI fails with
+   * {@code IllegalArgumentException: Wrong FS: s3a://..., expected: file:///}.
+   */
+  @Test
+  def testRangedReadOfAReferenceOnANonLocalScheme(): Unit = {
+    val localPath = createTestFile(tempDir, "ranged-non-local.bin", 10000)
+    val inputDF = sparkSession.createDataFrame(Seq(
+      (onScheme("s3a", localPath), 0L, 100L),
+      (onScheme("s3a", localPath), 100L, 100L)
+    )).toDF("external_path", "offset", "length")
+      .withColumn("data", blobStructCol("data", col("external_path"), col("offset"), col("length")))
+      .select("offset", "data")
+      .coalesce(1)
+
+    val results = BatchedBlobReader.readBatched(inputDF, nonLocalSchemeStorageConf).orderBy("offset").collect()
+
+    assertEquals(2, results.length)
+    results.zipWithIndex.foreach { case (row, i) =>
+      val data = row.getAs[Array[Byte]]("data")
+      assertEquals(100, data.length)
+      assertBytesContent(data, expectedOffset = i * 100)
+    }
+  }
+
+  @Test
+  def testWholeFileReadOfAReferenceOnANonLocalScheme(): Unit = {
+    val localPath = createTestFile(tempDir, "whole-non-local.bin", 512)
+    val inputDF = sparkSession.createDataFrame(Seq(Tuple1(onScheme("gs", localPath))))
+      .toDF("external_path")
+      .withColumn("data", wholeFileBlobStructCol("data", col("external_path")))
+      .select("data")
+      .coalesce(1)
+
+    val results = BatchedBlobReader.readBatched(inputDF, nonLocalSchemeStorageConf).collect()
+
+    assertEquals(1, results.length)
+    val data = results(0).getAs[Array[Byte]]("data")
+    assertEquals(512, data.length)
+    assertBytesContent(data)
+  }
+
+  /**
+   * One partition referencing two buckets on the same scheme. Hadoop keys its filesystem cache by
+   * scheme and authority and FileSystem.checkPath validates both, so a reader that resolved storage
+   * once would serve the second bucket through the first bucket's handle and fail with
+   * Wrong FS: s3a://bucket-b/..., expected: s3a://bucket-a.
+   */
+  @Test
+  def testReferencesInTwoBucketsInOnePartition(): Unit = {
+    val firstPath = createTestFile(tempDir, "two-bucket-first.bin", 1000)
+    val secondPath = createTestFile(tempDir, "two-bucket-second.bin", 1000)
+    val inputDF = sparkSession.createDataFrame(Seq(
+      ("a", s"s3a://bucket-a$firstPath", 0L, 100L),
+      ("b", s"s3a://bucket-b$secondPath", 0L, 100L)
+    )).toDF("bucket", "external_path", "offset", "length")
+      .withColumn("data", blobStructCol("data", col("external_path"), col("offset"), col("length")))
+      .select("bucket", "data")
+      .coalesce(1)
+
+    val results = BatchedBlobReader.readBatched(inputDF, nonLocalSchemeStorageConf).orderBy("bucket").collect()
+
+    assertEquals(2, results.length)
+    assertEquals(Seq("a", "b"), results.map(_.getAs[String]("bucket")).toSeq)
+    results.foreach { row =>
+      val data = row.getAs[Array[Byte]]("data")
+      assertEquals(100, data.length)
+      assertBytesContent(data)
+    }
+  }
+
+  /**
+   * Every storage the reader resolves is closed. HoodieHadoopStorage.close is a no-op because it
+   * does not own the cached Hadoop filesystem, but hoodie.storage.class is pluggable and another
+   * implementation may hold resources, so the reader must not leak the handles it creates.
+   */
+  @Test
+  def testResolvedStorageIsClosed(): Unit = {
+    val localPath = createTestFile(tempDir, "counted-close.bin", 1000)
+    val conf = nonLocalSchemeStorageConf
+    conf.set(HoodieStorageConfig.HOODIE_STORAGE_CLASS.key, classOf[CountingHoodieStorage].getName)
+
+    val inputDF = sparkSession.createDataFrame(Seq(
+      (onScheme("s3a", localPath), 0L, 100L),
+      (onScheme("s3a", localPath), 500L, 100L)
+    )).toDF("external_path", "offset", "length")
+      .withColumn("data", blobStructCol("data", col("external_path"), col("offset"), col("length")))
+      .select("offset", "data")
+      .coalesce(1)
+
+    CountingHoodieStorage.reset()
+    val results = BatchedBlobReader.readBatched(inputDF, conf).collect()
+    assertEquals(2, results.length)
+
+    val constructed = CountingHoodieStorage.constructed.get()
+    assertTrue(constructed > 0, "the reader should have resolved storage at least once")
+    assertEquals(constructed, CountingHoodieStorage.closed.get(),
+      s"every resolved storage must be closed, constructed $constructed")
+  }
+
+  /**
+   * Harness sanity, so none of the tests above can pass for the wrong reason: the borrowed schemes
+   * must reach the local file the test wrote, and must not be silently rewritten to {@code file}.
+   */
+  @Test
+  def testBorrowedSchemesReachLocalFiles(): Unit = {
+    val localPath = createTestFile(tempDir, "harness-sanity.bin", 256)
+    val conf = nonLocalSchemeStorageConf
+    Seq("s3a", "gs").foreach { scheme =>
+      val path = new StoragePath(onScheme(scheme, localPath))
+      val storage = HoodieStorageUtils.getStorage(path, conf)
+      try {
+        assertEquals(scheme, storage.getScheme)
+        assertEquals(256, storage.getPathInfo(path).getLength)
+      } finally {
+        storage.close()
+      }
+    }
+    val localStorage = HoodieTestUtils.getLocalStorage(conf)
+    try {
+      assertEquals("file", localStorage.getScheme)
+    } finally {
+      localStorage.close()
+    }
+  }
+
+  private def onScheme(scheme: String, localPath: String): String = s"$scheme://test-bucket$localPath"
+
+  /**
+   * The table's storage configuration with the local filesystem also exposed under two object-store
+   * schemes. Neither scheme has a real implementation on this module's test classpath, so nothing
+   * else claims them.
+   */
+  private def nonLocalSchemeStorageConf: StorageConfiguration[_] = {

Review Comment:
   πŸ€– nit: in Scala, a parameterless `def` without `()` signals a stable, side-effect-free property β€” calling it twice is expected to be the same as calling it once. This method allocates a fresh `Configuration` each time, so it should carry `()` (i.e. `def nonLocalSchemeStorageConf(): StorageConfiguration[_]`) to signal that to callers.
   
   <sub><i>⚠️ AI-generated; verify before applying. React πŸ‘/πŸ‘Ž to flag quality.</i></sub>



-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5418133581

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 181d0af120e0701d1691e8e70f379bc172f0f893 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547) 
   * 71194c7855f81fe799ad464c32016b38e1607fc3 UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5418815998

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 181d0af120e0701d1691e8e70f379bc172f0f893 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547) 
   * 71194c7855f81fe799ad464c32016b38e1607fc3 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548) 
   * dc10637b32cc67fedcb090c7023d3d18bb335281 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550) 
   * cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551) 
   * d348d056ac652807fccd679989b67f57434562cd Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "codecov-commenter (via GitHub)" <gi...@apache.org>.
codecov-commenter commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5418102013

   ## [Codecov](https://app.codecov.io/gh/apache/hudi/pull/19737?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
   :white_check_mark: All modified and coverable lines are covered by tests.
   :white_check_mark: Project coverage is 77.95%. Comparing base ([`6aa6a86`](https://app.codecov.io/gh/apache/hudi/commit/6aa6a86f3dad86bcf9de03e46447aede8d327ba6?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`71194c7`](https://app.codecov.io/gh/apache/hudi/commit/71194c7855f81fe799ad464c32016b38e1607fc3?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
   
   <details><summary>Additional details and impacted files</summary>
   
   
   
   ```diff
   @@             Coverage Diff              @@
   ##             master   #19737      +/-   ##
   ============================================
   - Coverage     77.95%   77.95%   -0.01%     
   + Complexity    33453    33452       -1     
   ============================================
     Files          2539     2539              
     Lines        140895   140884      -11     
     Branches      17009    17009              
   ============================================
   - Hits         109834   109823      -11     
     Misses        23399    23399              
     Partials       7662     7662              
   ```
   
   | [Components](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=components&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Ξ” | |
   |---|---|---|
   | [hudi-common](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `83.47% <ΓΈ> (-0.01%)` | :arrow_down: |
   | [hudi-client](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `83.05% <ΓΈ> (ΓΈ)` | |
   | [hudi-flink](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `85.59% <ΓΈ> (ΓΈ)` | |
   | [hudi-spark-datasource](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `72.36% <ΓΈ> (-0.02%)` | :arrow_down: |
   | [hudi-utilities](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `74.31% <ΓΈ> (ΓΈ)` | |
   | [hudi-cli](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `15.06% <ΓΈ> (ΓΈ)` | |
   | [hudi-hadoop](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `69.23% <ΓΈ> (ΓΈ)` | |
   | [hudi-sync](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `75.54% <ΓΈ> (ΓΈ)` | |
   | [hudi-io](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `79.76% <ΓΈ> (ΓΈ)` | |
   | [hudi-timeline-service](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `83.44% <ΓΈ> (ΓΈ)` | |
   | [hudi-cloud](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `64.33% <ΓΈ> (ΓΈ)` | |
   | [hudi-kafka-connect](https://app.codecov.io/gh/apache/hudi/pull/19737/components?src=pr&el=component&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `53.20% <ΓΈ> (ΓΈ)` | |
   
   | [Flag](https://app.codecov.io/gh/apache/hudi/pull/19737/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Ξ” | |
   |---|---|---|
   | [hadoop-mr-java-client](https://app.codecov.io/gh/apache/hudi/pull/19737/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `43.72% <ΓΈ> (-0.01%)` | :arrow_down: |
   
   Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#carryforward-flags-in-the-pull-request-comment) to find out more.
   
   | [Files with missing lines](https://app.codecov.io/gh/apache/hudi/pull/19737?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Ξ” | |
   |---|---|---|
   | [...e/hudi/table/action/rollback/RollbackHelperV1.java](https://app.codecov.io/gh/apache/hudi/pull/19737?src=pr&el=tree&filepath=hudi-client%2Fhudi-client-common%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fhudi%2Ftable%2Faction%2Frollback%2FRollbackHelperV1.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-aHVkaS1jbGllbnQvaHVkaS1jbGllbnQtY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9odWRpL3RhYmxlL2FjdGlvbi9yb2xsYmFjay9Sb2xsYmFja0hlbHBlclYxLmphdmE=) | `86.54% <ΓΈ> (ΓΈ)` | |
   | [...rg/apache/hudi/common/util/HoodieStorageUtils.java](https://app.codecov.io/gh/apache/hudi/pull/19737?src=pr&el=tree&filepath=hudi-common%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fhudi%2Fcommon%2Futil%2FHoodieStorageUtils.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-aHVkaS1jb21tb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2h1ZGkvY29tbW9uL3V0aWwvSG9vZGllU3RvcmFnZVV0aWxzLmphdmE=) | `57.14% <ΓΈ> (-5.36%)` | :arrow_down: |
   | [...apache/spark/sql/hudi/blob/BatchedBlobReader.scala](https://app.codecov.io/gh/apache/hudi/pull/19737?src=pr&el=tree&filepath=hudi-spark-datasource%2Fhudi-spark-common%2Fsrc%2Fmain%2Fscala%2Forg%2Fapache%2Fspark%2Fsql%2Fhudi%2Fblob%2FBatchedBlobReader.scala&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-aHVkaS1zcGFyay1kYXRhc291cmNlL2h1ZGktc3BhcmstY29tbW9uL3NyYy9tYWluL3NjYWxhL29yZy9hcGFjaGUvc3Bhcmsvc3FsL2h1ZGkvYmxvYi9CYXRjaGVkQmxvYlJlYWRlci5zY2FsYQ==) | `81.38% <ΓΈ> (-0.66%)` | :arrow_down: |
   </details>
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
   - :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5418339623

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 181d0af120e0701d1691e8e70f379bc172f0f893 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547) 
   * 71194c7855f81fe799ad464c32016b38e1607fc3 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548) 
   * dc10637b32cc67fedcb090c7023d3d18bb335281 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "rahil-c (via GitHub)" <gi...@apache.org>.
rahil-c commented on code in PR #19737:
URL: https://github.com/apache/hudi/pull/19737#discussion_r3859861177


##########
hudi-spark-datasource/hudi-spark-common/src/main/scala/org/apache/spark/sql/hudi/blob/BatchedBlobReader.scala:
##########
@@ -691,17 +715,16 @@ object BatchedBlobReader {
 
     // Apply mapPartitions
     val result = df.mapPartitions { partition =>
-      // Create storage and reader for this partition
-      val storage = HoodieStorageUtils.getStorage(broadcastConf.value)
-      val reader = new BatchedBlobReader(storage, maxGapBytes, lookaheadSize)
+      // Create reader for this partition
+      val reader = new BatchedBlobReader(
+        HoodieStorageUtils.getStorage(_, broadcastConf.value), maxGapBytes, lookaheadSize)

Review Comment:
   Resolving per read gives up the amortization master had here. Each blob read now pays `ReflectionUtils.loadClass` (the `Class` is cached in `CLAZZ_CACHE`, but `getConstructor(...).newInstance(...)` is not), `HadoopFSUtils.prepareHadoopConf`'s full `System.getenv()` scan, and `path.getFileSystem(conf)` -> `FileSystem.get` under the global `FileSystem$Cache` monitor. That is once per row on the whole-file path and once per merged range on the ranged path, where before it was once per partition, in a reader whose purpose is amortizing work across many rows.
   
   I think the reasoning in fe217b9b is half right: Hadoop's static cache does stop the `FileSystem` being rebuilt, but it does not make the lookup free (it takes a JVM-wide monitor, contended by every task thread on the executor) and it does not stop `getStorage` reflecting a fresh wrapper each call.
   
   Would a memo keyed by (scheme, authority) get the correctness this buys without the per-read cost? It keeps the multi-filesystem property that dropping the single handle was for, and unlike the earlier per-partition handle it carries no one-filesystem assumption:
   
   ```scala
   val byFs = mutable.Map.empty[(String, String), HoodieStorage]
   val reader = new BatchedBlobReader(
     p => byFs.getOrElseUpdate((p.toUri.getScheme, p.toUri.getAuthority),
       HoodieStorageUtils.getStorage(p, broadcastConf.value)),
     maxGapBytes, lookaheadSize)
   TaskContext.get().addTaskCompletionListener[Unit](_ => byFs.values.foreach(_.close()))
   ```
   
   That does reintroduce the caller-side cache and the completion listener you removed, so happy to be told the per-read cost is small enough against object-store latency not to be worth it. Mostly I wanted the tradeoff on the record, since `testResolvedStorageIsClosed` asserts construction equals close but does not pin how many constructions a scan does.



-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5419355241

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2 Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551) 
   * d348d056ac652807fccd679989b67f57434562cd Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5418200097

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 181d0af120e0701d1691e8e70f379bc172f0f893 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547) 
   * 71194c7855f81fe799ad464c32016b38e1607fc3 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5420694412

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     }, {
       "hash" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561",
       "triggerID" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "triggerType" : "PUSH"
     }, {
       "hash" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564",
       "triggerID" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d938141e1dfbcbde489dbdb16752ab41742b6372",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16566",
       "triggerID" : "d938141e1dfbcbde489dbdb16752ab41742b6372",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * d348d056ac652807fccd679989b67f57434562cd Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   * 75159370be785aaee659c81355eb2a10da4fa5ec Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561) 
   * fe217b9ba08c637e50d2cbccae6bb04445dc4ad0 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564) 
   * d938141e1dfbcbde489dbdb16752ab41742b6372 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16566) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5420657571

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     }, {
       "hash" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561",
       "triggerID" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "triggerType" : "PUSH"
     }, {
       "hash" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564",
       "triggerID" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d938141e1dfbcbde489dbdb16752ab41742b6372",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "d938141e1dfbcbde489dbdb16752ab41742b6372",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * d348d056ac652807fccd679989b67f57434562cd Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   * 75159370be785aaee659c81355eb2a10da4fa5ec Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561) 
   * fe217b9ba08c637e50d2cbccae6bb04445dc4ad0 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564) 
   * d938141e1dfbcbde489dbdb16752ab41742b6372 UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5421295992

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     }, {
       "hash" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561",
       "triggerID" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "triggerType" : "PUSH"
     }, {
       "hash" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564",
       "triggerID" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d938141e1dfbcbde489dbdb16752ab41742b6372",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16566",
       "triggerID" : "d938141e1dfbcbde489dbdb16752ab41742b6372",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * fe217b9ba08c637e50d2cbccae6bb04445dc4ad0 Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564) 
   * d938141e1dfbcbde489dbdb16752ab41742b6372 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16566) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5420533135

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     }, {
       "hash" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561",
       "triggerID" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "triggerType" : "PUSH"
     }, {
       "hash" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * d348d056ac652807fccd679989b67f57434562cd Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   * 75159370be785aaee659c81355eb2a10da4fa5ec Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561) 
   * fe217b9ba08c637e50d2cbccae6bb04445dc4ad0 UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5420581425

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     }, {
       "hash" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561",
       "triggerID" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "triggerType" : "PUSH"
     }, {
       "hash" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564",
       "triggerID" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * d348d056ac652807fccd679989b67f57434562cd Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   * 75159370be785aaee659c81355eb2a10da4fa5ec Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561) 
   * fe217b9ba08c637e50d2cbccae6bb04445dc4ad0 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5418900841

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 71194c7855f81fe799ad464c32016b38e1607fc3 Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548) 
   * dc10637b32cc67fedcb090c7023d3d18bb335281 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550) 
   * cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551) 
   * d348d056ac652807fccd679989b67f57434562cd Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5418771531

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 181d0af120e0701d1691e8e70f379bc172f0f893 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547) 
   * 71194c7855f81fe799ad464c32016b38e1607fc3 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548) 
   * dc10637b32cc67fedcb090c7023d3d18bb335281 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550) 
   * cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551) 
   * d348d056ac652807fccd679989b67f57434562cd UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5419259912

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * dc10637b32cc67fedcb090c7023d3d18bb335281 Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550) 
   * cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551) 
   * d348d056ac652807fccd679989b67f57434562cd Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5420048336

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     }, {
       "hash" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * d348d056ac652807fccd679989b67f57434562cd Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553) 
   * 75159370be785aaee659c81355eb2a10da4fa5ec UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "yihua (via GitHub)" <gi...@apache.org>.
yihua commented on code in PR #19737:
URL: https://github.com/apache/hudi/pull/19737#discussion_r3859882020


##########
hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/hudi/blob/BlobTestHelpers.scala:
##########
@@ -71,6 +75,37 @@ object BlobTestHelpers {
     ).as(name, blobMetadata)
   }
 
+  /**
+   * Exposes the local filesystem under the given non-local schemes, so a test can tell apart storage
+   * resolved from a path and storage resolved from a default file:/// URI without a remote object
+   * store.
+   *
+   * Hadoop caches filesystems statically, keyed by scheme and authority rather than by
+   * configuration, so a borrowed impl would outlive the test for the whole fork and the next test to
+   * use that scheme would silently read local files. Both the configuration and the cache are put
+   * back afterwards.
+   */
+  def withBorrowedSchemes[T](hadoopConf: Configuration, authorities: Seq[String], schemes: String*)(body: => T): T = {

Review Comment:
   Given this is test class and super nit, not going to address it.



##########
hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/hudi/blob/TestBatchedBlobReader.scala:
##########
@@ -454,4 +461,147 @@ class TestBatchedBlobReader extends HoodieClientTestBase {
     assertTrue(thrown.getCause.isInstanceOf[IllegalArgumentException])
     assertTrue(thrown.getCause.getMessage.contains("Overlapping blob ranges detected"))
   }
+
+  /**
+   * Blob references are absolute paths carried in row data, so the filesystem a partition must read
+   * is not known until the rows arrive. These tests put the referenced files behind an object-store
+   * scheme, which is where storage resolved from a default {@code file:///} URI fails with
+   * {@code IllegalArgumentException: Wrong FS: s3a://..., expected: file:///}.
+   */
+  @Test
+  def testRangedReadOfAReferenceOnANonLocalScheme(): Unit = {
+    val localPath = createTestFile(tempDir, "ranged-non-local.bin", 10000)
+    val inputDF = sparkSession.createDataFrame(Seq(
+      (onScheme("s3a", localPath), 0L, 100L),
+      (onScheme("s3a", localPath), 100L, 100L)
+    )).toDF("external_path", "offset", "length")
+      .withColumn("data", blobStructCol("data", col("external_path"), col("offset"), col("length")))
+      .select("offset", "data")
+      .coalesce(1)
+
+    val results = BatchedBlobReader.readBatched(inputDF, nonLocalSchemeStorageConf).orderBy("offset").collect()
+
+    assertEquals(2, results.length)
+    results.zipWithIndex.foreach { case (row, i) =>
+      val data = row.getAs[Array[Byte]]("data")
+      assertEquals(100, data.length)
+      assertBytesContent(data, expectedOffset = i * 100)
+    }
+  }
+
+  @Test
+  def testWholeFileReadOfAReferenceOnANonLocalScheme(): Unit = {
+    val localPath = createTestFile(tempDir, "whole-non-local.bin", 512)
+    val inputDF = sparkSession.createDataFrame(Seq(Tuple1(onScheme("gs", localPath))))
+      .toDF("external_path")
+      .withColumn("data", wholeFileBlobStructCol("data", col("external_path")))
+      .select("data")
+      .coalesce(1)
+
+    val results = BatchedBlobReader.readBatched(inputDF, nonLocalSchemeStorageConf).collect()
+
+    assertEquals(1, results.length)
+    val data = results(0).getAs[Array[Byte]]("data")
+    assertEquals(512, data.length)
+    assertBytesContent(data)
+  }
+
+  /**
+   * One partition referencing two buckets on the same scheme. Hadoop keys its filesystem cache by
+   * scheme and authority and FileSystem.checkPath validates both, so a reader that resolved storage
+   * once would serve the second bucket through the first bucket's handle and fail with
+   * Wrong FS: s3a://bucket-b/..., expected: s3a://bucket-a.
+   */
+  @Test
+  def testReferencesInTwoBucketsInOnePartition(): Unit = {
+    val firstPath = createTestFile(tempDir, "two-bucket-first.bin", 1000)
+    val secondPath = createTestFile(tempDir, "two-bucket-second.bin", 1000)
+    val inputDF = sparkSession.createDataFrame(Seq(
+      ("a", s"s3a://bucket-a$firstPath", 0L, 100L),
+      ("b", s"s3a://bucket-b$secondPath", 0L, 100L)
+    )).toDF("bucket", "external_path", "offset", "length")
+      .withColumn("data", blobStructCol("data", col("external_path"), col("offset"), col("length")))
+      .select("bucket", "data")
+      .coalesce(1)
+
+    val results = BatchedBlobReader.readBatched(inputDF, nonLocalSchemeStorageConf).orderBy("bucket").collect()
+
+    assertEquals(2, results.length)
+    assertEquals(Seq("a", "b"), results.map(_.getAs[String]("bucket")).toSeq)
+    results.foreach { row =>
+      val data = row.getAs[Array[Byte]]("data")
+      assertEquals(100, data.length)
+      assertBytesContent(data)
+    }
+  }
+
+  /**
+   * Every storage the reader resolves is closed. HoodieHadoopStorage.close is a no-op because it
+   * does not own the cached Hadoop filesystem, but hoodie.storage.class is pluggable and another
+   * implementation may hold resources, so the reader must not leak the handles it creates.
+   */
+  @Test
+  def testResolvedStorageIsClosed(): Unit = {
+    val localPath = createTestFile(tempDir, "counted-close.bin", 1000)
+    val conf = nonLocalSchemeStorageConf
+    conf.set(HoodieStorageConfig.HOODIE_STORAGE_CLASS.key, classOf[CountingHoodieStorage].getName)
+
+    val inputDF = sparkSession.createDataFrame(Seq(
+      (onScheme("s3a", localPath), 0L, 100L),
+      (onScheme("s3a", localPath), 500L, 100L)
+    )).toDF("external_path", "offset", "length")
+      .withColumn("data", blobStructCol("data", col("external_path"), col("offset"), col("length")))
+      .select("offset", "data")
+      .coalesce(1)
+
+    CountingHoodieStorage.reset()
+    val results = BatchedBlobReader.readBatched(inputDF, conf).collect()
+    assertEquals(2, results.length)
+
+    val constructed = CountingHoodieStorage.constructed.get()
+    assertTrue(constructed > 0, "the reader should have resolved storage at least once")
+    assertEquals(constructed, CountingHoodieStorage.closed.get(),
+      s"every resolved storage must be closed, constructed $constructed")
+  }
+
+  /**
+   * Harness sanity, so none of the tests above can pass for the wrong reason: the borrowed schemes
+   * must reach the local file the test wrote, and must not be silently rewritten to {@code file}.
+   */
+  @Test
+  def testBorrowedSchemesReachLocalFiles(): Unit = {
+    val localPath = createTestFile(tempDir, "harness-sanity.bin", 256)
+    val conf = nonLocalSchemeStorageConf
+    Seq("s3a", "gs").foreach { scheme =>
+      val path = new StoragePath(onScheme(scheme, localPath))
+      val storage = HoodieStorageUtils.getStorage(path, conf)
+      try {
+        assertEquals(scheme, storage.getScheme)
+        assertEquals(256, storage.getPathInfo(path).getLength)
+      } finally {
+        storage.close()
+      }
+    }
+    val localStorage = HoodieTestUtils.getLocalStorage(conf)
+    try {
+      assertEquals("file", localStorage.getScheme)
+    } finally {
+      localStorage.close()
+    }
+  }
+
+  private def onScheme(scheme: String, localPath: String): String = s"$scheme://test-bucket$localPath"
+
+  /**
+   * The table's storage configuration with the local filesystem also exposed under two object-store
+   * schemes. Neither scheme has a real implementation on this module's test classpath, so nothing
+   * else claims them.
+   */
+  private def nonLocalSchemeStorageConf: StorageConfiguration[_] = {

Review Comment:
   Given this is test class and super nit, not going to address it.



-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5418472338

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 181d0af120e0701d1691e8e70f379bc172f0f893 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547) 
   * 71194c7855f81fe799ad464c32016b38e1607fc3 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548) 
   * dc10637b32cc67fedcb090c7023d3d18bb335281 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550) 
   * cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2 UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5417895152

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 181d0af120e0701d1691e8e70f379bc172f0f893 UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5418274129

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 181d0af120e0701d1691e8e70f379bc172f0f893 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547) 
   * 71194c7855f81fe799ad464c32016b38e1607fc3 Azure: [PENDING](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548) 
   * dc10637b32cc67fedcb090c7023d3d18bb335281 UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "yihua (via GitHub)" <gi...@apache.org>.
yihua commented on code in PR #19737:
URL: https://github.com/apache/hudi/pull/19737#discussion_r3859877899


##########
hudi-spark-datasource/hudi-spark-common/src/main/scala/org/apache/spark/sql/hudi/blob/BatchedBlobReader.scala:
##########
@@ -691,17 +715,16 @@ object BatchedBlobReader {
 
     // Apply mapPartitions
     val result = df.mapPartitions { partition =>
-      // Create storage and reader for this partition
-      val storage = HoodieStorageUtils.getStorage(broadcastConf.value)
-      val reader = new BatchedBlobReader(storage, maxGapBytes, lookaheadSize)
+      // Create reader for this partition
+      val reader = new BatchedBlobReader(
+        HoodieStorageUtils.getStorage(_, broadcastConf.value), maxGapBytes, lookaheadSize)

Review Comment:
   If we want to add a cache, it should not be added at this reader layer; it should be added in the `HoodieStorage` layer.  For now, the cache is overkill, and per-blob instantiation overhead is extremely low, so keeping the current implementation for simplicity.  If this becomes a bottleneck, we can optimize this in a follow-up.



-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "hudi-bot (via GitHub)" <gi...@apache.org>.
hudi-bot commented on PR #19737:
URL: https://github.com/apache/hudi/pull/19737#issuecomment-5421635557

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16547",
       "triggerID" : "181d0af120e0701d1691e8e70f379bc172f0f893",
       "triggerType" : "PUSH"
     }, {
       "hash" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16548",
       "triggerID" : "71194c7855f81fe799ad464c32016b38e1607fc3",
       "triggerType" : "PUSH"
     }, {
       "hash" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16550",
       "triggerID" : "dc10637b32cc67fedcb090c7023d3d18bb335281",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16551",
       "triggerID" : "cf2d1ec0f6f6eea53e2004ca534809fb5940f3f2",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d348d056ac652807fccd679989b67f57434562cd",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16553",
       "triggerID" : "d348d056ac652807fccd679989b67f57434562cd",
       "triggerType" : "PUSH"
     }, {
       "hash" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16561",
       "triggerID" : "75159370be785aaee659c81355eb2a10da4fa5ec",
       "triggerType" : "PUSH"
     }, {
       "hash" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16564",
       "triggerID" : "fe217b9ba08c637e50d2cbccae6bb04445dc4ad0",
       "triggerType" : "PUSH"
     }, {
       "hash" : "d938141e1dfbcbde489dbdb16752ab41742b6372",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16566",
       "triggerID" : "d938141e1dfbcbde489dbdb16752ab41742b6372",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * d938141e1dfbcbde489dbdb16752ab41742b6372 Azure: [SUCCESS](https://dev.azure.com/apachehudi/a1a51da7-8592-47d4-88dc-fd67bed336bb/_build/results?buildId=16566) 
   
   <details>
   <summary>Bot commands</summary>
     @hudi-bot supports the following commands:
   
    - `@hudi-bot run azure` re-run the last Azure build
   </details>


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(storage): resolve HoodieStorage from a path instead of a default local URI [hudi]

Posted by "yihua (via GitHub)" <gi...@apache.org>.
yihua merged PR #19737:
URL: https://github.com/apache/hudi/pull/19737


-- 
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: commits-unsubscribe@hudi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org