Github user lw-lin commented on a diff in the pull request:

    https://github.com/apache/spark/pull/16987#discussion_r103404486
  
    --- Diff: 
sql/core/src/main/scala/org/apache/spark/sql/execution/streaming/FileStreamSource.scala
 ---
    @@ -159,28 +161,64 @@ class FileStreamSource(
     
       /**
        * If the source has a metadata log indicating which files should be 
read, then we should use it.
    -   * We figure out whether there exists some metadata log only when user 
gives a non-glob path.
    +   * Only when user gives a non-glob path that will we figure out whether 
the source has some
    +   * metadata log
    +   *
    +   * None        means we don't know at the moment
    +   * Some(true)  means we know for sure the source DOES have metadata
    +   * Some(false) means we know for sure the source DOSE NOT have metadata
        */
    -  private val sourceHasMetadata: Boolean =
    -    !SparkHadoopUtil.get.isGlobPath(new Path(path)) &&
    -      FileStreamSink.hasMetadata(Seq(path), 
sparkSession.sessionState.newHadoopConf())
    +  @volatile private[sql] var sourceHasMetadata: Option[Boolean] =
    +    if (SparkHadoopUtil.get.isGlobPath(new Path(path))) Some(false) else 
None
    +
    +  private def allFilesUsingInMemoryFileIndex() = {
    +    val globbedPaths = 
SparkHadoopUtil.get.globPathIfNecessary(qualifiedBasePath)
    +    val fileIndex = new InMemoryFileIndex(sparkSession, globbedPaths, 
options, Some(new StructType))
    +    fileIndex.allFiles()
    +  }
    +
    +  private def allFilesUsingMetadataLogFileIndex() = {
    +    // Note if `sourceHasMetadata` holds, then `qualifiedBasePath` is 
guaranteed to be a
    +    // non-glob path
    +    new MetadataLogFileIndex(sparkSession, qualifiedBasePath).allFiles()
    +  }
     
       /**
        * Returns a list of files found, sorted by their timestamp.
        */
       private def fetchAllFiles(): Seq[(String, Long)] = {
         val startTime = System.nanoTime
    -    val catalog =
    -      if (sourceHasMetadata) {
    -        // Note if `sourceHasMetadata` holds, then `qualifiedBasePath` is 
guaranteed to be a
    -        // non-glob path
    -        new MetadataLogFileIndex(sparkSession, qualifiedBasePath)
    +
    --- End diff --
    
    then based on `sourceHasMetadata`'s value, we can choose which `FileIndex` 
should be used. As showed below, `case None` should be dealt with most care.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to