Skip to content

test: BackendSpeedComparisonTest が legacy パーサー経路 (JavaCodeCalculatorV3 ctor) でハング — #19 の残り #20

Description

@opaopa6969

症状

#19 (P4 プローブ経路、9b651ef で解消) とは 別の ハング箇所。フルスイートで BackendSpeedComparisonTest が35分以上 CPU 張り付きになる。

スレッドダンプ (2026-06-12, cpu=2100s ≒ elapsed)

"main" RUNNABLE
  at org.unlaxer.context.ParseContext.consume(ParseContext.java:205)
  ... (LazyChoice/CPPComment 等 legacy combinator の深いバックトラック) ...
  at org.unlaxer.tinyexpression.parser.TinyExpressionParser.parse(TinyExpressionParser.java:50)
  at org.unlaxer.tinyexpression.parser.FormulaParser.parse(FormulaParser.java:27)
  at org.unlaxer.tinyexpression.evaluator.javacode.JavaCodeCalculatorV3.<init>(JavaCodeCalculatorV3.java:147)
  at org.unlaxer.tinyexpression.evaluator.ast.AstEmbeddedExpressionRuntime.evaluateFormula(AstEmbeddedExpressionRuntime.java:256)
  at org.unlaxer.tinyexpression.evaluator.ast.AstEmbeddedExpressionRuntime.tryEvaluateFormulaDirect(AstEmbeddedExpressionRuntime.java:48)
  at org.unlaxer.tinyexpression.evaluator.ast.P4TypedAstEvaluator.tryEvaluateStructuredBinarySourceSnippet(P4TypedAstEvaluator.java:173)
  ...

#19 との違い

#19 本件
経路 P4 プローブ (Calculator 構築時) 評価時: P4TypedAstEvaluator → AstEmbeddedExpressionRuntime → JavaCodeCalculatorV3 ctor
爆発するパーサー 生成 P4 文法 legacy TinyExpressionParser (手書きコンビネータ)
9b651ef の deadline カバー済み カバー外

対処案

  1. AstEmbeddedExpressionRuntime.evaluateFormulaJavaCodeCalculatorV3 の legacy パースにも test: AstEvaluatorCalculatorTest が P4PreferredAstMapper.parseViaMapperCompat で CPU 張り付きハング — mvn verify が完走しない #19 と同じ協調的期限 (TransactionListener.onBegin で期限超過 throw) を適用し、超過時は structured-binary スニペット委譲を諦めて通常の評価経路へフォールバック
  2. 暫定: CI/ローカルのフルランでは -Dtest='!BackendSpeedComparisonTest' で除外 (test-baseline 運用開始時の既知ハングとして記録)
  3. 根本: unlaxer の packrat メモ化 (perf: packrat メモ化 (opt-in) — 生成文法の指数バックトラックで downstream がハングした実例への根本対策 unlaxer-parser#40) は legacy/P4 両経路に効く

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions