iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0

馬卡龍的成長日記 Day 19

昨天,Macaron 裝好了門鈴,GitHub 一有新東西就會通知它。可是門鈴有時候會漏響,網路斷一下、服務忙一下,那一則通知可能就沒有送到。

所以除了門鈴,我還想再安排一個定時巡邏的角色,每隔一段時間就去看一次有沒有新東西,就算門鈴漏響,巡邏也會發現。我自己的電腦上其實就有一個類似的小程式,每分鐘去看一次雲端有沒有新版本,所以這個做法對我來說並不陌生。

只是這樣一來,會多出一個新的問題。

兩個人同時發現同一件事

假設我送出了一份草稿,門鈴響了,同一時間巡邏也剛好經過,發現了同一份更新。兩邊都覺得「有新東西,我來處理」,於是各自去拉檔案、各自匯入,最好的情況是同一份草稿被記了兩次,最壞的情況是兩邊互相覆蓋,誰也說不清楚最後留下的是哪一份。

解法是一把鎖。門鈴和巡邏雖然是兩個不同的入口,但它們共用同一把鎖,誰先拿到,誰才能繼續處理,另一個看到鎖已經被拿走了,就不做,等下一輪再說。

拿到鎖之後,也不相信通知

拿到鎖之後,Macaron 第一件事是比對版本。如果我這邊的版本已經跟雲端上的一樣,就代表沒有新東西,直接結束。

如果不一樣,它要看到真正的證據才會繼續:一份剛取得的最新狀態、這次的變動是一條直直往前的路沒有岔開,而且實際改到的,只有一份占卜草稿,是一般的文字檔,也通過了 Day 15 的檢查。刪除、改名、同時動到好幾個檔案、還有沒存好的修改,或兩邊已經岔開,全部都停下來。

跟門鈴一樣,通知自己說改了哪些檔案,這裡還是不算數。

計畫和收據,是兩張不同的紙

檢查完之後,Macaron 只會給出四種結論:可以處理、沒有新東西、鎖被拿走了等下一輪,或者拒絕。

這只是一份計畫。要等 Macaron 拿著同一組最新的證據重新算一次,而且結果完全一樣,才會開出一張收據,而那張收據上也清楚寫著,這次的匯入其實還沒有真的執行。

存好了,也要自己再讀一次

這一天我覺得最有感的,是「存好了」這三個字。

收據開出來之後要存起來,儲存的地方會回一句「好,存好了」。但如果那個地方只是把你給它的東西,原封不動地回給你,其實根本沒有存呢?聽起來很不可能,可是在系統的世界裡,回應說成功,跟真的成功之間,是有縫的。

所以現在,Macaron 存完之後會自己再去讀一次,把讀回來的內容跟原本要存的東西逐項比對,版本、檔案位置、內容指紋全部一樣,才算真的存好。讀不到,或者讀到的不一樣,都算失敗;同一份更新第二次來,會安全地回報「已經處理過了」;同一個版本卻帶著不同的內容來,就是衝突,不會默默蓋掉原本的。

(需作者補充:你自己有沒有遇過「系統說成功了,其實沒有」的經驗?如果有,這裡是很好的真實例子。)

今天,巡邏還沒有真的上班

今天沒有真的每隔幾分鐘去巡一次,也沒有真的拉檔案或寫進資料庫,所有的收據上都標著:這只是測試的紀錄,實際的匯入還沒有執行。

草稿來回的這一段先告一段落。明天,我們回到發布這件事:我在管理頻道裡說一句「9/8 晚上 8 點發布」,Macaron 要怎麼聽懂?


上一篇
Day 18|GitHub 按了門鈴,但我先不讓它直接開門
下一篇
Day 20|Macaron 如何確認發佈時間?
系列文
Macaron:30 天打造一位會占卜的 AI Agent 共 20 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言