2017-02-22 73 views
7

我們有幾個nodejs守護進程在共享相同的持久層(包含查詢的共享模塊)時利用貓鼬。黑暗貓鼬魔法:「無效的參數findOne」

在這些守護進程中的一個(總是同一個),我們隨機(數週時間)得到貓鼬以下錯誤:

貓鼬:無效的參數findOne()

我們已經檢查了所有查詢,但無法找出可能來自哪裏。錯誤調用堆棧每次都不相同(沒有特定的貓鼬調用似乎會導致此問題),所以我們不認爲這是特定於業務邏輯的。

爲了做一些調試,我們添加了以下日誌記錄的情況下,該錯誤再次出現:

log({ 
    // What mongoose checks (both false -> the error). 
    isInstanceOfMQuery: conds instanceof mquery, 
    isObject: mquery.utils.isObject(conds), 
    // Trying to find out what this value is. 
    conds, 
    toString: Object.prototype.toString.call(conds) 
    inspect: util.inspect(conds, { showHidden: true, depth: null, showProxy: true }) 
}) 

conds是貓鼬被抱怨的理由。 log()將JSON.stringify()整個事情。

這是源於此呼叫日誌之一:

{ 
    "isInstanceOfMQuery": false, 
    "isObject": false, 
    "conds": {}, 
    "toString": "[object Null]" 
    "inspect": "{}", 
} 

現在,這個讓我困惑甚至更多... conds如何能在同一時間{}null

答案我在尋找:

  • 我怎樣才能重現此那種conds包含對象的?
  • 你會如何處理一個顯然隨機且很少發生的錯誤?
  • 有更多的我們可以登錄,以確定conds具有什麼樣的價值或來自哪裏?

任何想法讚賞!

+0

你正在運行什麼版本的節點?我問,因爲我已經看到了隨機與節點7.4.0但不是與6.9.2。 – Brett

+0

我看到一些其他非常令人震驚的東西,看起來像是在使用Mongoose 4在節點7中使用神奇空查詢對象做的事情,再次沒有觀察到節點6. – Brett

+0

我們已經運行在最新的7.x版本相當長一段時間了。我剛纔做了一個拉動要求,讓貓鼬一起工作。奇怪的是,我們使用同一個節點版本運行的所有其他守護進程都沒有這個問題: -/ 感謝您的提示! – patrickd

回答

5

這可能是node bug與公關修復here。它尚未包含在發行版中。

這不是可靠的重現性,因爲它似乎依賴於指針和v8的垃圾回收。只需等待它在上游固定。