[ 
https://issues.apache.org/jira/browse/HUDI-9223?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lokesh Jain updated HUDI-9223:
------------------------------
    Priority: Critical  (was: Major)

> Reading the metadata fails when there is a delete block in col stats metadata
> -----------------------------------------------------------------------------
>
>                 Key: HUDI-9223
>                 URL: https://issues.apache.org/jira/browse/HUDI-9223
>             Project: Apache Hudi
>          Issue Type: Sub-task
>          Components: metadata
>            Reporter: Lokesh Jain
>            Priority: Critical
>             Fix For: 1.0.2
>
>
> Lets say user has created a table with 0.15 and the sequence of commits has 
> led to creation of delete block in column stats metadata.
> Now if we query the data using 1.0 binary table version 6, we are hitting 
> class cast exception.
> {code:java}
> java.lang.ClassCastException: class 
> org.apache.avro.generic.GenericData$Record cannot be cast to class 
> org.apache.hudi.avro.model.HoodieDeleteRecordList 
> (org.apache.avro.generic.GenericData$Record is in unnamed module of loader 
> 'app'; org.apache.hudi.avro.model.HoodieDeleteRecordList is in unnamed module 
> of loader scala.reflect.internal.util.ScalaClassLoader$URLClassLoader 
> @cf08c97)
>     at 
> org.apache.hudi.common.table.log.block.HoodieDeleteBlock.deserialize(HoodieDeleteBlock.java:169)
>     at 
> org.apache.hudi.common.table.log.block.HoodieDeleteBlock.getRecordsToDelete(HoodieDeleteBlock.java:124)
>     at 
> org.apache.hudi.common.table.log.AbstractHoodieLogRecordScanner.processQueuedBlocksForInstant(AbstractHoodieLogRecordScanner.java:680)
>     at 
> org.apache.hudi.common.table.log.AbstractHoodieLogRecordScanner.scanInternalV1(AbstractHoodieLogRecordScanner.java:380)
>     at 
> org.apache.hudi.common.table.log.AbstractHoodieLogRecordScanner.scanInternal(AbstractHoodieLogRecordScanner.java:252)
>     at 
> org.apache.hudi.common.table.log.HoodieMergedLogRecordScanner.scanByKeyPrefixes(HoodieMergedLogRecordScanner.java:199)
>     at 
> org.apache.hudi.metadata.HoodieMetadataLogRecordReader.getRecordsByKeyPrefixes(HoodieMetadataLogRecordReader.java:87)
>     at 
> org.apache.hudi.metadata.HoodieBackedTableMetadata.readLogRecords(HoodieBackedTableMetadata.java:380)
>     at 
> org.apache.hudi.metadata.HoodieBackedTableMetadata.lambda$getRecordsByKeyPrefixes$7539c171$1(HoodieBackedTableMetadata.java:235)
>     at 
> org.apache.hudi.common.function.FunctionWrapper.lambda$throwingMapWrapper$0(FunctionWrapper.java:38)
>     at 
> org.apache.hudi.common.data.HoodieListData.lambda$flatMap$0(HoodieListData.java:135)
>     at 
> java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
>     at 
> java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
>     at 
> java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
>     at 
> java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
>     at 
> java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:952)
>     at 
> java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:926)
>     at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327)
>     at 
> java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)
>     at 
> java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
>     at 
> java.base/java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:408)
>     at 
> java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:736)
>     at 
> java.base/java.util.stream.ReduceOps$ReduceOp.evaluateParallel(ReduceOps.java:919)
>     at 
> java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
>     at 
> java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
>     at 
> org.apache.hudi.common.data.HoodieListPairData.groupByKey(HoodieListPairData.java:115)
>     at 
> org.apache.hudi.ColumnStatsIndexSupport.transpose(ColumnStatsIndexSupport.scala:251)
>     at 
> org.apache.hudi.ColumnStatsIndexSupport.$anonfun$loadTransposed$1(ColumnStatsIndexSupport.scala:145)
>     at 
> org.apache.hudi.HoodieCatalystUtils$.withPersistedData(HoodieCatalystUtils.scala:61)
>     at 
> org.apache.hudi.ColumnStatsIndexSupport.loadTransposed(ColumnStatsIndexSupport.scala:144)
>     at 
> org.apache.hudi.ColumnStatsIndexSupport.computeCandidateFileNames(ColumnStatsIndexSupport.scala:96)
>     at 
> org.apache.hudi.SparkBaseIndexSupport.computeCandidateIsStrict(SparkBaseIndexSupport.scala:66)
>     at 
> org.apache.hudi.HoodieFileIndex.$anonfun$lookupCandidateFilesInMetadataTable$3(HoodieFileIndex.scala:414)
>     at 
> org.apache.hudi.HoodieFileIndex.$anonfun$lookupCandidateFilesInMetadataTable$3$adapted(HoodieFileIndex.scala:411)
>     at 
> scala.collection.TraversableLike$WithFilter.$anonfun$foreach$1(TraversableLike.scala:985)
>     at scala.collection.immutable.List.foreach(List.scala:431)
>     at 
> scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:984)
>     at 
> org.apache.hudi.HoodieFileIndex.$anonfun$lookupCandidateFilesInMetadataTable$1(HoodieFileIndex.scala:411)
>     at scala.util.Try$.apply(Try.scala:213)
>     at 
> org.apache.hudi.HoodieFileIndex.lookupCandidateFilesInMetadataTable(HoodieFileIndex.scala:398)
>     at 
> org.apache.hudi.HoodieFileIndex.filterFileSlices(HoodieFileIndex.scala:247)
>     at org.apache.hudi.HoodieFileIndex.listFiles(HoodieFileIndex.scala:169)
>     at 
> org.apache.spark.sql.execution.FileSourceScanLike.selectedPartitions(DataSourceScanExec.scala:256)
>     at 
> org.apache.spark.sql.execution.FileSourceScanLike.selectedPartitions$(DataSourceScanExec.scala:251)
>     at 
> org.apache.spark.sql.execution.FileSourceScanExec.selectedPartitions$lzycompute(DataSourceScanExec.scala:506)
>     at 
> org.apache.spark.sql.execution.FileSourceScanExec.selectedPartitions(DataSourceScanExec.scala:506)
>     at 
> org.apache.spark.sql.execution.FileSourceScanLike.dynamicallySelectedPartitions(DataSourceScanExec.scala:286)
>     at 
> org.apache.spark.sql.execution.FileSourceScanLike.dynamicallySelectedPartitions$(DataSourceScanExec.scala:267)
>     at 
> org.apache.spark.sql.execution.FileSourceScanExec.dynamicallySelectedPartitions$lzycompute(DataSourceScanExec.scala:506)
>     at 
> org.apache.spark.sql.execution.FileSourceScanExec.dynamicallySelectedPartitions(DataSourceScanExec.scala:506)
>     at 
> org.apache.spark.sql.execution.FileSourceScanExec.inputRDD$lzycompute(DataSourceScanExec.scala:554)
>     at 
> org.apache.spark.sql.execution.FileSourceScanExec.inputRDD(DataSourceScanExec.scala:537)
>     at 
> org.apache.spark.sql.execution.FileSourceScanExec.doExecuteColumnar(DataSourceScanExec.scala:588)
>     at 
> org.apache.spark.sql.execution.SparkPlan.$anonfun$executeColumnar$1(SparkPlan.scala:222)
>     at 
> org.apache.spark.sql.execution.SparkPlan.$anonfun$executeQuery$1(SparkPlan.scala:246)
>     at 
> org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
>     at 
> org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:243)
>     at 
> org.apache.spark.sql.execution.SparkPlan.executeColumnar(SparkPlan.scala:218)
>     at 
> org.apache.spark.sql.execution.InputAdapter.doExecuteColumnar(WholeStageCodegenExec.scala:521)
>     at 
> org.apache.spark.sql.execution.SparkPlan.$anonfun$executeColumnar$1(SparkPlan.scala:222)
>     at 
> org.apache.spark.sql.execution.SparkPlan.$anonfun$executeQuery$1(SparkPlan.scala:246)
>     at 
> org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
>     at 
> org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:243)
>     at 
> org.apache.spark.sql.execution.SparkPlan.executeColumnar(SparkPlan.scala:218)
>     at 
> org.apache.spark.sql.execution.ColumnarToRowExec.inputRDDs(Columnar.scala:207)
>     at 
> org.apache.spark.sql.execution.FilterExec.inputRDDs(basicPhysicalOperators.scala:238)
>     at 
> org.apache.spark.sql.execution.ProjectExec.inputRDDs(basicPhysicalOperators.scala:51)
>     at 
> org.apache.spark.sql.execution.WholeStageCodegenExec.doExecute(WholeStageCodegenExec.scala:751)
>     at 
> org.apache.spark.sql.execution.SparkPlan.$anonfun$execute$1(SparkPlan.scala:195)
>     at 
> org.apache.spark.sql.execution.SparkPlan.$anonfun$executeQuery$1(SparkPlan.scala:246)
>     at 
> org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
>     at 
> org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:243)
>     at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:191)
>     at 
> org.apache.spark.sql.execution.SparkPlan.getByteArrayRdd(SparkPlan.scala:364)
>     at 
> org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:498)
>     at 
> org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:483)
>     at 
> org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:61)
>     at org.apache.spark.sql.Dataset.collectFromPlan(Dataset.scala:4177)
>     at org.apache.spark.sql.Dataset.$anonfun$head$1(Dataset.scala:3161)
>     at org.apache.spark.sql.Dataset.$anonfun$withAction$2(Dataset.scala:4167)
>     at 
> org.apache.spark.sql.execution.QueryExecution$.withInternalError(QueryExecution.scala:526)
>     at org.apache.spark.sql.Dataset.$anonfun$withAction$1(Dataset.scala:4165)
>     at 
> org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$6(SQLExecution.scala:118)
>     at 
> org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:195)
>     at 
> org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:103)
>     at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:827)
>     at 
> org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:65)
>     at org.apache.spark.sql.Dataset.withAction(Dataset.scala:4165)
>     at org.apache.spark.sql.Dataset.head(Dataset.scala:3161)
>     at org.apache.spark.sql.Dataset.take(Dataset.scala:3382)
>     at org.apache.spark.sql.Dataset.getRows(Dataset.scala:284)
>     at org.apache.spark.sql.Dataset.showString(Dataset.scala:323)
>     at org.apache.spark.sql.Dataset.show(Dataset.scala:811)
>     at $line17.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:22)
>     at $line17.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:26)
>     at $line17.$read$$iw$$iw$$iw$$iw$$iw$$iw.<init>(<console>:28)
>     at $line17.$read$$iw$$iw$$iw$$iw$$iw.<init>(<console>:30)
>     at $line17.$read$$iw$$iw$$iw$$iw.<init>(<console>:32)
>     at $line17.$read$$iw$$iw$$iw.<init>(<console>:34)
>     at $line17.$read$$iw$$iw.<init>(<console>:36)
>     at $line17.$read$$iw.<init>(<console>:38)
>     at $line17.$read.<init>(<console>:40)
>     at $line17.$read$.<init>(<console>:44)
>     at $line17.$read$.<clinit>(<console>)
>     at $line17.$eval$.$print$lzycompute(<console>:7)
>     at $line17.$eval$.$print(<console>:6)
>     at $line17.$eval.$print(<console>)
>     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)
>     at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>     at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>     at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:747)
>     at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:1020)
>     at scala.tools.nsc.interpreter.IMain.$anonfun$interpret$1(IMain.scala:568)
>     at 
> scala.reflect.internal.util.ScalaClassLoader.asContext(ScalaClassLoader.scala:36)
>     at 
> scala.reflect.internal.util.ScalaClassLoader.asContext$(ScalaClassLoader.scala:116)
>     at 
> scala.reflect.internal.util.AbstractFileClassLoader.asContext(AbstractFileClassLoader.scala:41)
>     at scala.tools.nsc.interpreter.IMain.loadAndRunReq$1(IMain.scala:567)
>     at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:594)
>     at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:564)
>     at 
> scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:865)
>     at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:733)
>     at scala.tools.nsc.interpreter.ILoop.processLine(ILoop.scala:435)
>     at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:456)
>     at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:239)
>     at org.apache.spark.repl.Main$.doMain(Main.scala:78)
>     at org.apache.spark.repl.Main$.main(Main.scala:58)
>     at org.apache.spark.repl.Main.main(Main.scala)
>     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)
>     at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>     at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>     at 
> org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
>     at 
> org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:1020)
>     at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:192)
>     at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:215)
>     at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:91)
>     at 
> org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1111)
>     at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1120)
>     at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
> 25/03/26 18:41:44 ERROR AbstractHoodieLogRecordScanner: Got exception when 
> reading log file
> java.lang.ClassCastException: class 
> org.apache.avro.generic.GenericData$Record cannot be cast to class 
> org.apache.hudi.avro.model.HoodieDeleteRecordList 
> (org.apache.avro.generic.GenericData$Record is in unnamed module of loader 
> 'app'; org.apache.hudi.avro.model.HoodieDeleteRecordList is in unnamed module 
> of loader scala.reflect.internal.util.ScalaClassLoader$URLClassLoader 
> @cf08c97)
>     at 
> org.apache.hudi.common.table.log.block.HoodieDeleteBlock.deserialize(HoodieDeleteBlock.java:169)
>     at 
> org.apache.hudi.common.table.log.block.HoodieDeleteBlock.getRecordsToDelete(HoodieDeleteBlock.java:124)
>     at 
> org.apache.hudi.common.table.log.AbstractHoodieLogRecordScanner.processQueuedBlocksForInstant(AbstractHoodieLogRecordScanner.java:680)
>     at 
> org.apache.hudi.common.table.log.AbstractHoodieLogRecordScanner.scanInternalV1(AbstractHoodieLogRecordScanner.java:380)
>     at 
> org.apache.hudi.common.table.log.AbstractHoodieLogRecordScanner.scanInternal(AbstractHoodieLogRecordScanner.java:252)
>     at 
> org.apache.hudi.common.table.log.HoodieMergedLogRecordScanner.scanByKeyPrefixes(HoodieMergedLogRecordScanner.java:199)
>     at 
> org.apache.hudi.metadata.HoodieMetadataLogRecordReader.getRecordsByKeyPrefixes(HoodieMetadataLogRecordReader.java:87)
>     at 
> org.apache.hudi.metadata.HoodieBackedTableMetadata.readLogRecords(HoodieBackedTableMetadata.java:380)
>     at 
> org.apache.hudi.metadata.HoodieBackedTableMetadata.lambda$getRecordsByKeyPrefixes$7539c171$1(HoodieBackedTableMetadata.java:235)
>     at 
> org.apache.hudi.common.function.FunctionWrapper.lambda$throwingMapWrapper$0(FunctionWrapper.java:38)
>     at 
> org.apache.hudi.common.data.HoodieListData.lambda$flatMap$0(HoodieListData.java:135)
>     at 
> java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
>     at 
> java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
>     at 
> java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
>     at 
> java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
>     at 
> java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:952)
>     at 
> java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:926)
>     at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327)
>     at 
> java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)
>     at 
> java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
>     at 
> java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
>     at 
> java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
>     at 
> java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
>     at 
> java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
>  {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to