[
https://issues.apache.org/jira/browse/DAFFODIL-2664?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17496062#comment-17496062
]
Steve Lawrence commented on DAFFODIL-2664:
------------------------------------------
I think this is due to changes in the alignment algorithm where we are less
aggressive about optimizing out alignment (in favor of correctness) and so
there's alignment and length unparsers creating a deadlock. If we make a
slight tweak to the schema, it avoids this without needing changes to Daffodil.
PR is here:
https://github.com/DFDLSchemas/PNG/pull/3
> PNG DFDL Schema fails regression testing on 3.3.0-SNAPSHOT
> ----------------------------------------------------------
>
> Key: DAFFODIL-2664
> URL: https://issues.apache.org/jira/browse/DAFFODIL-2664
> Project: Daffodil
> Issue Type: Bug
> Components: DFDL Schemas, QA
> Affects Versions: 3.3.0
> Reporter: Mike Beckerle
> Priority: Blocker
>
> Just noticed that PNG fails its tests now on 3.3.0-SNAPSHOT as of git hash
> 62d7bbe69847d85c780f40855c5cfef29a5a7c23
>
> First, it gets a million SDWs, so needs changes to suppress them, or have the
> things causing all these warnings fixed.
> One example SDW is this, but there are tons of others also:
> {code:java}
> [error] SchemaDefinitionWarning: Schema Definition Warning: Counterintuitive
> placement detected. Wrap the discriminator or assert in an empty sequence to
> evaluate before the contents.{code}
> The real backtrace is a Runtime SDE at unparse time:
> {code:java}
> [error] SuspensionDeadlockException: Runtime Schema Definition Error:
> Expressions/Unparsers are circularly deadlocked (mutually defined):
> [error] - SuspendableExpression(Length, expr={ if
> (fn:exists(../IHDR)) then dfdl:valueLength(../IHDR, 'bytes') else if
> (fn:exists(../PLTE)) then fn:count(../PLTE/Entry) * 3 else if
> (fn:exists(../IDAT)) then dfdl:valueLength(../IDAT/Data, 'bytes') else if
> (fn:exists(../IEND)) then dfdl:valueLength(../IEND, 'bytes') else if
> (fn:exists(../cHRM)) then 32 else if (fn:exists(../gAMA)) then
> dfdl:valueLength(../gAMA/Image_Gamma, 'bytes') else if
> (fn:exists(../iCCP)) then dfdl:valueLength(../iCCP/Profile_Name, 'bytes') +
> dfdl:valueLength(../iCCP/Compressed_Profile, 'bytes') + 2 else if
> (fn:exists(../sBIT)) then ( if
> (fn:exists(../sBIT/Color_Type/Color_Type_0)) then 1 else if
> (fn:exists(../sBIT/Color_Type/Color_Types_2_and_3)) then 3 else if
> (fn:exists(../sBIT/Color_Type/Color_Type_4)) then 4 else if
> (fn:exists(../sBIT/Color_Type/Color_Type_6)) then 4 else fn:error('png',
> 'fn:error called.', .) ) else if (fn:exists(../sRGB)) then 1 else
> if (fn:exists(../tEXt)) then dfdl:valueLength(../tEXt/Keyword, 'bytes') +
> dfdl:valueLength(../tEXt/Text, 'bytes') + 1 else if (fn:exists(../zTXt))
> then dfdl:valueLength(../zTXt/Keyword, 'bytes') +
> dfdl:valueLength(../zTXt/Compressed_Text_Datastream, 'bytes') + 2 else if
> (fn:exists(../iTXt)) then dfdl:valueLength(../iTXt/Keyword, 'bytes') +
> dfdl:valueLength(../iTXt/Language_Tag, 'bytes') +
> dfdl:valueLength(../iTXt/Translated_Keyword, 'bytes') +
> dfdl:valueLength(../iTXt/Text, 'bytes') + 5 else if (fn:exists(../bKGD))
> then ( if (fn:exists(../bKGD/Color_Types_0_and_4)) then 2 else if
> (fn:exists(../bKGD/Color_Types_2_and_6)) then 6 else if
> (fn:exists(../bKGD/Color_Type_3)) then 1 else fn:error('png', 'fn:error
> called.', .) ) else if (fn:exists(../hIST)) then
> fn:count(../hIST/Frequency) * 2 else if (fn:exists(../tRNS)) then (
> if (fn:exists(../tRNS/Grey)) then 2 else if (fn:exists(../tRNS/Red))
> then 6 else if (fn:exists(../tRNS/Alpha)) then fn:count(../tRNS/Alpha)
> else fn:error('png', 'fn:error called.', .) ) else if
> (fn:exists(../pHYs)) then 9 else if (fn:exists(../sPLT)) then ( if
> (../sPLT/Sample_Depth eq 8) then
> (fn:count(../sPLT/Palette_Entries/Eight_bit_Sample_Depth) * 6) +
> dfdl:valueLength(../sPLT/Palette_Name, 'bytes') + 2 else
> (fn:count(../sPLT/Palette_Entries/Sixteen_bit_Sample_Depth) * 10) +
> dfdl:valueLength(../sPLT/Palette_Name, 'bytes') + 2 ) else if
> (fn:exists(../tIME)) then 7 else fn:error('png', 'fn:error called.', .)
> })
> [error] - target length for element reference {}IEND expr
> <EvaluatableExpression eName='Chunk/element reference {}IEND' expr='{
> ../Length }' />
> [error] - AlignmentFillUnparserSuspendableOperation for sequence[1]
> [error] Schema context: Length Location line 53 column 14 in
> file:/home/mbeckerle/Documents/dataiti/git/dfdl-regression-test/dfdl-png/target/classes/com/mitre/png/xsd/png.dfdl.xsd
> [error] Data location was preceding byte 212, took 0.262 sec
> [error] at
> org.apache.daffodil.tdml.TDMLException$.apply(TDMLException.scala:33)
> [error] at
> org.apache.daffodil.tdml.ParserTestCase.doOnePassRoundTripUnparseExpectSuccess(TDMLRunner.scala:1146)
> [error] at
> org.apache.daffodil.tdml.ParserTestCase.runParseExpectSuccess(TDMLRunner.scala:1281)
>
> {code}
>
>
>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)