先仔細直視所有事實
上周五下午,同事在執行 SUMAX FE 時,報告它的執行結果有重複輸出的問題。
結果去查 log,哈,log 檔的輸出也亂了。
本來以為是 web server 呼叫 SUMAX 的方式出問題。加班試了幾種執行方式,想避掉這樣的干擾,但結果並不理想。
星期六早上又用一個小時的時間試另一種執行方式,結果可行。所以,我有至少有一個方案可行了
經過兩天的休息的沉澱後... 我腦子有一個想法出來,會不會,問題背後的本質是一樣的 - 全域變數的控制。
所以,今天針對上述問題進行程式碼的調整:
1. 在模組中,將部分全域用傳參數的方式取代。除非不得已,否則不用全域變數。
2. 以 batch id 名稱區隔不同的 logger。
現在,無論將程式直接嵌入或 藉由 cgi 機制執行都有正常的輸出結果與 log 了。
問題發生時,為何沒立刻想到呢? 證據已經如此明顯,都是後見之明說的。
問題發生時,先別忙著找兇手。而是應先仔細直視所有事實。這是絕對必要的,從此出發之後,將這些事實進一步歸類,這對解題將有非常大的幫助。
留言
張貼留言