php swoole & octane

最近在處理一些很奇怪的問題,就是資料會遺失! 正確來說應該是沒有存起來。那時根據手上的資料可以發現的狀況有:

  • id 有跳號
  • nginx 的確有request 進來
  • mysql audit log 沒有新增以及刪除的紀錄。

這就非常奇怪了,那時候有懷疑是 trx 的問題,但經檢視程式碼看起來應該不可能,因為有 try cache,且數量也都正確。

後來才發現啊 .. catch(Exception e) 要改成 } catch (\Throwable $e) { 才行。不然一些 runtime error (像是語法錯誤之類的嚴重錯誤都會捕捉不到)。捕捉不到呢就會無法rollback ,也沒有commit ,因此這個 trx 就會一直存在,加上 swoole 經查是warm connection ,因此後續request 用到同一個worker的話 資料都不會出現…….. 。

這就是最大的坑了….. 所以難怪會有這種狀況。

發表留言