Class ReactorRolloutDifferTest
java.lang.Object
scripting.ReactorRolloutDifferTest
Track B(Nashorn → GraalJS)— C4 rollout②:reactor 類別黃金參考 differ。
對應計畫 C4 的出口條件「Tier2+Tier3 differ 過關」。reactor 與 portal 不同之處:
- 進入點:reactor 線上以
engine.put("rm", ..)+invokeFunction("act")呼叫 (無引數,經全域rm),而非 portal 的getInterface(PortalScript).enter(ppi)SAM。 故本檔的轉錄 differ 走invokeFunction("act"),綁定 parity 以typeof act === "function"逐檔比對(線上實際呼叫路徑)。 - 快取/執行緒模型:reactor 引擎為 per-client 快取(AbstractScriptManager,非 portal 的
行程級單例),但
ReactorScriptManager.act()會被 Netty worker(HitReactor/TouchReactor) 與 MapTimer(ActivateItemReactor/delayedHitReactor)兩執行緒族挾「同一 client」並發呼叫 → 同一 (client, reactorId) 的引擎共用一條 GraalJS Context、禁並發 → 需 per-(client,reactorId) 序列化 (見ReactorScriptManager.act(MapleClient, MapleReactor)與MapleClient.getReactorScriptLock(int))。本檔下半的 並發回歸組在引擎層重現危害並佐證該鎖。
同一 JVM 並存 nashorn-core(黃金參考)與 GraalJS(候選),由
ScriptEngines.fresh(ScriptEngines.Backend) 建立。不需 DB / wz / 網路 / Timer。
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classstatic final class受信任第一方腳本以HostAccess.ALL直呼本物件的 public 方法 —— 與線上rm(ReactorActionManager)同樣的 host-interop 路徑。 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid全scripts/reactor/*.js在 nashorn-core 與 GraalJS 必須等價(非「全部成功」): 解析分歧(XOR)= 零:不得有任何腳本「一引擎解析成功、另一引擎失敗」。void佐證修補:套上 per-(client,rid)ReentrantLock(即 ReactorScriptManager.act 對 GraalJS 路徑的 作法)→ 無例外、maxInFlight<=1。void重現危害:單一共用 GraalJS Context 被兩執行緒同時invokeFunction("act")(線上 act 路徑) → 拋多執行緒例外(或一度重疊)。void
-
Constructor Details
-
ReactorRolloutDifferTest
public ReactorRolloutDifferTest()
-
-
Method Details
-
corpusParseAndActBindingAreEngineEquivalent
全scripts/reactor/*.js在 nashorn-core 與 GraalJS 必須等價(非「全部成功」):- 解析分歧(XOR)= 零:不得有任何腳本「一引擎解析成功、另一引擎失敗」。E4X/Nashorn-only
語法殘留會在此現形 —— rollout 硬門檻。(語料偵察 workflow 已掃全 272 檔:零 E4X、零 Java.type/
importClass、唯一 interop 為
new java.awt.Point屬兩引擎 parity。) - act 綁定逐檔等價:eval(容忍頂層丟)後
typeof act === "function"兩引擎須一致 —— 驗ReactorScriptManager.act(MapleClient, MapleReactor)線上實際走的invokeFunction("act")路徑。
「兩引擎皆解析失敗」≠ 分歧(記錄到
build/reactor-parse-broken-both.txt,不擋 rollout)。- Throws:
Exception
- 解析分歧(XOR)= 零:不得有任何腳本「一引擎解析成功、另一引擎失敗」。E4X/Nashorn-only
語法殘留會在此現形 —— rollout 硬門檻。(語料偵察 workflow 已掃全 272 檔:零 E4X、零 Java.type/
importClass、唯一 interop 為
-
tier2TranscriptsMatchAcrossEngines
-
perScriptNameLockSerializesConcurrentReactorEntry
佐證修補:套上 per-(client,rid)ReentrantLock(即 ReactorScriptManager.act 對 GraalJS 路徑的 作法)→ 無例外、maxInFlight<=1。- Throws:
Exception
-