tenstriker opened a new issue, #10117:
URL: https://github.com/apache/iceberg/issues/10117

   ### Apache Iceberg version
   
   1.4.3
   
   ### Query engine
   
   Spark
   
   ### Please describe the bug 🐞
   
   Spark version : 3.5_2.12
   
   We have iceberg spark streaming read job reading iceberg table for new 
`append` only changes with following config:
   
   ```
       stream = (
           spark.readStream.format("iceberg")
           .option("stream-from-timestamp", str(config.stream_from_timestamp))
           .option("streaming-skip-overwrite-snapshots", "true")
           .option("streaming-skip-delete-snapshots", "true")
           .option("streaming-max-rows-per-micro-batch", 
str(MAX_ROWS_PER_BATCH))
           .load(table)
           .writeStream.queryName(config.streaming_query_name)
           .foreachBatch(partial(my_func, config))
           .option("checkpointLocation", config.checkpoint_location)
           .trigger(processingTime=f"{config.trigger_interval_seconds} seconds")
           .start()
       )
   ```
   
   This job runs fine until over the weekend we ran a Maintenance job on 
iceberg tables for Very first time. Maintenance job calls 4 stored procedure in 
sequence:
   
   1. expire_snapshots (retains last 100)
   2. rewrite_data_files (creates `replace` snapshot internally) 
   3. rewrite_manifests (creates `replace` snapshot internally) 
   4. remove_orpahan_files
   
   Maintenance job runs fine. compaction output is as expected. Step 2 and 3 
creates 2 replace snapshots as I pointed out above. But since upstream is 
continuously writing to this table there will be lot of `append` snapshots that 
would start following it.
   All in all when I query the table (which uses latest metadata.json) all data 
is returned as expected. ie. table state is up to date and consistent. 
   
   
   However,  spark streaming Read Job  which should only process `append` 
snapshot is also encountering `replace` snapshot at every trigger and somehow 
it can't go pass the `replace` snapshot and continue scanning other `append` 
snapshots.
   
   Code in `SparkMicroBatchStream` seem to skip `replace` snapshot but then 
it's not doing anything or stuck at something else. I can't pinpoint exact 
location of this happening:
   
   here's some useful logs:
   
   ```
   MicroBatchExecution:64 - Starting Trigger Calculation
   BaseMetastoreTableOperations:199 - Refreshing table metadata from new 
version: gs://...my_table/metadata/30605-26bfa08d-ee35-4af5-9fe0-.metadata.json 
(every trigger gets correct metadata json file)
   
   /*
   this is where following things should happen but it doesn't 
   CheckpointFileManager:60 Writing atomically to ...offset
   MicroBatchExecution:60 Committed offsets for batch ... 
   MicroBatchExecution:64 - walCommit took 789 ms
   MicroBatchExecution:64 - queryPlanning took 215 ms
   
   Instead as you see in following ExecutionStats is empty because nothing was 
writtern.
   */
   MicroBatchExecution:64 - latestOffset took 451 ms
   MicroBatchExecution:64 - triggerExecution took 452 ms
   MicroBatchExecution:64 - Execution stats: ExecutionStats(Map(),List(),Map())
   MicroBatchExecution:60 - Streaming query has been idle and waiting for new 
data more than 10000 ms.
    
   ```
   
   
   In spark Offset Directory last offset that was also committed was of one 
from the first `replace` snapshot. (result of rewrite_data_files) so it seems 
like iceberg couldn't compute any further `StreamingOffset` after that point 
and so nothing runs. 
   Even restarting streaming Read job stays stuck. It can't seem to get offset 
from any of the `append` snapshots that came after `replace`
   
   


-- 
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: issues-unsubscr...@iceberg.apache.org.apache.org

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


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

Reply via email to