CR #893
open[CR-080] POC-14 授權額度更新(讀寫分離)真機驗證發現:14-2 讀模型投影查無資料(事件未同步)/14-3 斷線補償與 14-4 鏈路追蹤未實測/附:channel 檢查約束導致 ORA-02290→500
0%
Description
【發現情境】POC-14 授權額度更新(讀寫分離)真機驗證(2026-10-24,authorization-service 8092/limit-service 8098/posting 8087;FR SYS-2.1/ISS-2.4)。
架構要求:讀寫分離下以 event + Kafka,交易資料皆 1 秒內同步到 read DB(更新餘額及新增明細)。
【14-1 額度扣減:部分(授權成功,但讀模型無資料可驗餘額)】
- 實測:POST /authorizations 三筆(200,000/300,000/500,000 分=2,000/3,000/5,000 元)→ 皆 201,
authNo AUTH000072/073/074,各產生 holdId;但 decision 皆為 REFERRAL(測試卡無額度資料)。 - ⚠️ 未能取得「可用餘額 40,000 元」之實測值:讀模型投影查無資料(見 14-2)。
【14-2 明細查詢:部分/未驗證(投影查無資料)】
- 實測:
GET /api/v1/limit-projections/accounts/{accountId}/instruments→ 404CC-PLT-4040,
log 明載「查無該帳戶之額度投影資料(可能尚無佔用事件)…本查詢非權威,授權請走 limit-service」。 - 程式查證:讀模型機制確實存在——
authorization-service本地limit_holds投影(註載「已實作#A-128,以authorizationId去重」)、
AccountLimitChangedEvent(讀模型為本地投影)、亂序防護(已套用較新序號則略過,不覆寫較新狀態)、
「該帳戶無資料則如實回 empty(不造假 asOf、不造假 0 筆清單)」。 - ⚠️ 但本次授權後投影仍無資料,無法驗證「餘額 40,000、明細依交易順序排序」;需查 Kafka 事件是否送出/消費(CR-待驗證)。
【14-3 補償機制、14-4 鏈路追蹤:未驗證】
- 14-3 需「Kafka 到 read DB 網路斷線」之演練(5 筆授權後恢復,驗證餘額 30,000 與順序)——本次未做。
- 14-4 需三段日誌(AP/Kafka/Listener)具同一追蹤識別碼——本次未取得。
【實測過程中的兩個重要環境/輸入發現(供後續參考)】
-
authorizations表有檢查約束channel IN ('POS','EC','ATM','MOBILE','WEB','API');
送X-Channel: POC會觸發 ORA-02290 → 500 CC-PLT-5000(極易誤判為服務損壞)。改用POS後即 201。 - 讀模型投影為非權威,授權應走
limit-service;且投影「無資料時如實回 empty」是刻意設計,不是缺陷。
【交付】證據 docs/08-evidence/POC-14_*(3 份授權 201+1 份投影 404);本 POC 之詳細動畫頁待下次續做(本輪預算受限)。
RA Updated by Redmine Admin about 19 hours ago
【CR-080 查證+修復完成(2026-10-25,#A-396)】■ 14-2 更正:「投影查無資料」非缺陷——全鏈路真機實證:POST /limit-holds → limit 發射 limit.hold.created.v1 → auth LimitHoldListener 消費 → CC_AUTH.LIMIT_HOLDS 投影落列 → GET /limit-projections/accounts/{id}/instruments 200(instruments 明細+holdAttribution/lagSeconds 如實)。10-24 之 404 係:①測試卡之帳戶當時尚無任何 hold 事件(404=如實回 empty 之刻意設計);②limit-service 當時為舊 jar。■ 14-1 補驗:授權 card ****1111(帳戶 ...0001)→ APPROVED(AUTH000136/137;10-24 之 REFERRAL 係人工複核門檻:50,000 分>門檻,10,000 分門檻內即 APPROVED)→ 投影差額實證 +10,000(holdAmount 2,180,000→2,190,000,asOf 更新)。■ 修復:X-Channel 值域檢核——非法值(POC)原直落 DDL CHECK → ORA-02290 → 500,改 HTTP 層檢核 → 400 CC-PLT-4003(真機複驗;auth 165 測 0 失敗+1 負樣本)。■ ★ 如實記錄未達/未驗:①同步「1 秒內」未達——實測 lag ~12s(=outbox relay 排程間隔,屬調校項,可縮短 relay-delay);②14-3 斷線補償演練、14-4 三段追蹤(AP/Kafka/Listener 同一 traceId)未做——本 CR 維持 In Progress。證據 docs/08-evidence/CR-080_修復驗證_20261025/(18 份)。