MySQL TaskStore node_executions manual-only 真實 DB 驗證設計

1. 文件目的

本文件設計 MySqlTaskStoreTaskExecutionRecord.NodeRecords 寫入真實 MySQL 5.6.2 測試資料庫的 manual-only 驗證方式。

本文件只整理驗證節點、前置資料、環境 gate、測試資料、通過條件與停止線,不直接連線資料庫、不執行 DDL、不寫入正式 DB。

2. 驗證節點名稱


MySQL TaskStore node_executions manual-only Save / Inspect

3. 驗證目的

確認 HS.DeviceControl.Infrastructure.MySql 目前的 node_executions 第一版實作,在使用者明確開啟 manual-only gate 後,可以:

4. 本節點不做的事

項目原因
建立 database目前只驗證 TaskStore,不做 DB provisioning。
自動建立 node_executionsSchema Apply / DDL Executor 尚未確認。
執行 CREATE TABLE / ALTER TABLE / DROP避免影響真實 DB 結構。
寫入正式 DB第一版只允許測試 DB。
修改 ITaskStore public contract驗證資料可用 internal / test helper 讀取,不把查詢節點明細升成正式契約。
FindById / ListRecent 回填 NodeRecords這是後續正式查詢設計,不塞進 manual-only 驗證。
驗證 command_executions 或詳細 log table兩者資料來源與邊界尚未確認。

5. 驗證前需要使用者確認

欄位建議值是否可寫入 repo備註
MySQL 版本5.6.2可寫入已知目標版本。
Host / IP<masked>不寫完整值不在文件保留完整 IP。
Port3306可寫入非敏感資訊。
Database namehs_device_control_test可寫入必須是測試 DB。
User namehs_device可寫入或遮蔽建議只給測試 DB 權限。
Password不提供範例不可寫入只能由本機環境變數提供。
Required tablestask_executions, node_executions可寫入兩張表都必須已存在。
是否驗證 indextrue可寫入使用 information_schema.STATISTICS 驗證。
是否驗證 commenttrue可寫入使用 table / column comment 驗證。
是否允許 INSERT / UPDATE / DELETEtrue可寫入必須由使用者明確確認。

6. 前置 schema 檢查

在執行寫入前,驗證流程必須先確認真實測試 DB 已具備必要 schema。

必要資料表:


task_executions
node_executions

node_executions 必要重點:

類別內容
主鍵task_id, sequence_no
必填欄位task_id, sequence_no, node_id, status, retry_count, started_at, time_taken_ms, created_at
主要索引idx_node_executions_task_id, idx_node_executions_status, idx_node_executions_device, idx_node_executions_node_id
commenttable comment 與主要 column comment 需存在

若缺少 node_executions、欄位、主鍵、索引或 comment,驗證節點應停止並回報缺口,不得自動建立或修改資料表。

7. 建議環境變數

沿用既有 MySQL TaskStore manual-only gate:


HS_MYSQL_TASKSTORE_ENABLED
HS_MYSQL_TASKSTORE_ALLOW_WRITE
HS_MYSQL_TASKSTORE_HOST
HS_MYSQL_TASKSTORE_PORT
HS_MYSQL_TASKSTORE_DATABASE
HS_MYSQL_TASKSTORE_USER
HS_MYSQL_TASKSTORE_PASSWORD
HS_MYSQL_TASKSTORE_TABLE
HS_MYSQL_TASKSTORE_TIMEOUT_SECONDS
HS_MYSQL_TASKSTORE_SSL_MODE
HS_MYSQL_TASKSTORE_CLEANUP

補充規則:

若要同時跑 schema metadata 檢查,可搭配既有 Inspector 環境變數:


HS_MYSQL_INSPECT_ENABLED=true
HS_MYSQL_INSPECT_EXPECTED_TABLES=task_executions,node_executions
HS_MYSQL_INSPECT_INCLUDE_INDEXES=true
HS_MYSQL_INSPECT_INCLUDE_COMMENTS=true

8. 測試資料設計

測試 task id 必須使用固定前綴:


manual-taskstore-poc-{yyyyMMddHHmmss}-{短隨機碼}

建議建立一筆 TaskExecutionRecord,至少包含兩筆節點紀錄:

sequence_nonode_idstatus用途
1manual-node-1Success驗證成功節點、設備與命令欄位。
2manual-node-2FailedSuccess驗證錯誤欄位或下一節點欄位。

建議欄位值:

欄位建議值
workflow_idmanual-mysql-taskstore-poc
device_idmanual-device-1
command_namemanual-command-1
data_summarymanual data summary
metadata_summarymanual metadata summary
transition_summarymanual transition summary

9. 建議驗證流程

1. 使用者確認目標是測試 DB,且可接受寫入與 cleanup。

2. 設定 TaskStore manual-only 環境變數。

3. 先執行 schema inspect,確認 task_executionsnode_executions 存在。

4. 若 schema inspect 缺表或缺欄位,停止並回報,不執行寫入。

5. 建立含兩筆以上 NodeRecordsTaskExecutionRecord

6. 呼叫 MySqlTaskStore.Save(record)

7. 使用 test-only / internal helper 查詢 node_executions,確認同一 task_id 的資料列數、順序與欄位值。

8. 呼叫 FindById / ListRecent 確認任務摘要仍可查。

9. 若 cleanup 開啟,先刪除 node_executions 同 task id 資料,再刪除 task_executions 同 task id 資料。

10. 輸出驗證摘要,後續回填人工驗證紀錄。

10. 建議 xUnit 範圍

後續若進入實作,建議新增或擴充 manual-only 測試:


tests/HS.DeviceControl.Infrastructure.MySql.Tests/Tasks/MySqlTaskStoreNodeExecutionsManualMySql56Tests.cs

建議測試:

測試目的
SaveAndInspectNodes_ShouldPersistNodeExecutionsWhenManualGateIsEnabled寫入含節點紀錄的 task,並查詢 node_executions 驗證資料列。
ManualGate_ShouldSkipNodeExecutionWriteWhenDisabledgate 未開時不連 DB、不寫入。
SchemaPrecheck_ShouldReportMissingNodeExecutionsWithoutWrite缺少 node_executions 時停止,不自動 DDL。

此測試仍歸類為 manual-only,不放入一般 CI 必跑路徑。

11. 通過條件

條件判斷
gate 正常未開 ENABLEDALLOW_WRITE 時不連 DB、不寫入。
schema 前置檢查正常task_executionsnode_executions 存在,必要欄位、索引與 comment 可讀。
Save 成功MySqlTaskStore.Save 未回傳錯誤。
節點資料列正確node_executions 同 task id 的筆數等於 NodeRecords.Count
順序正確sequence_no 從 1 開始並符合 NodeRecords 順序。
核心欄位正確node_idstatusretry_counttime_taken_msdevice_idcommand_name 可對回。
任務摘要仍可查FindByIdListRecent 仍能查回 task summary。
cleanup 安全僅刪除本次 task_idnode_executionstask_executions
無敏感資訊輸出不包含 password 或完整 connection string。

12. 失敗時需記錄

失敗紀錄至少包含:

不得記錄:

13. 停止線

遇到以下狀況必須停止並請使用者確認:

1. 需要建立或修改 node_executions table。

2. 需要調整欄位型別、索引或 comment。

3. 需要新增或變更 ITaskStore public method。

4. 需要讓 FindById / ListRecent 回填節點明細。

5. 需要連接正式 DB 或保存正式資料。

6. 需要調整 DB 帳號權限。

14. 目前結論

node_executions 第一版已完成 fake gateway 寫入實作與單元測試,但尚未對真實測試 DB 執行 manual-only 寫入 / 查詢驗證。

已完成 MySQL TaskStore node_executions manual-only xUnit 驗證入口實作紀錄

建議下一步在使用者確認測試 DB 已具備 node_executions table、index、comment,且明確開啟 manual-only gate 後,執行真實 DB 寫入 / 查詢驗證並整理驗證紀錄。