2017-02-22 50 views
7

Mamy kilka demonów nodejs, które wykorzystują mangustę podczas dzielenia tej samej warstwy trwałości (wspólny moduł zawierający zapytania).Ciemna magia mangusty: "Niepoprawny argument do znalezieniaOne"

W jednym z tych demonów (zawsze tego samego) losowo (kilka razy w tygodniu) pojawia się następujący błąd z mangusta:

mangusta: Invalid argument findOne()

Sprawdziliśmy wszystkie zapytania i nie byliśmy w stanie ustalić, skąd to może pochodzić. Stos wywołań błędów jest inny za każdym razem (brak konkretnego wywołania mangusty wydaje się powodować ten problem), więc nie sądzimy, że jest to specyficzne dla logiki biznesowej.

W tym celu niektóre debugowanie dodaliśmy następujące rejestrowanie w przypadku błąd się powtórzy:

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 jest argument, że mangusta narzeka. log() spowoduje JSON.stringify() całą rzecz.

Jest to jeden z dzienników, które wynikały z tej rozmowy:

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

Teraz to mnie myli się jeszcze bardziej ... jak można conds być {} i null w tym samym czasie ?!

Odpowiedzi szukam:

  • Jak mogę odtworzyć tego rodzaju obiektu, który conds zawiera?
  • Jak postępowałbyś z błędem, który zdarza się przypadkowo i rzadko?
  • Czy można więcej rejestrować, aby określić, jaki rodzaj wartości ma lub skąd pochodzi?

Wszelkie pomysły doceniane!

+0

Jaką wersję węzła używasz? Pytam, ponieważ widziałem to losowo z Węzłem 7.4.0, ale NIE z 6.9.2. – Brett

+0

Widziałem inne, naprawdę niepokojące rzeczy, które wyglądały, jakby miały coś wspólnego z tajemniczo zerowymi obiektami zapytania w węźle 7 z Mongoose 4, znowu nie były obserwowane z Węzłem 6. – Brett

+0

Pracowaliśmy na najbardziej aktualnych wersjach 7.x od jakiegoś czasu. Zrobiłem już jakiś czas temu prośbę o zwolnienie, aby w ogóle uzyskać mangusta. Dziwne jest to, że wszystkie inne demony, które uruchomiliśmy w tej samej wersji węzła, nie mają tego problemu: -/ Dzięki za napiwek! – patrickd

Odpowiedz

5

Jest to prawdopodobnie node bug z PR do ustalenia here. To jeszcze nie jest zawarte w wydaniu.

Nie można wiarygodnie odtwarzać, ponieważ wydaje się, że zależy to od wskaźników i zbierania śmieci w wersji 8. Muszę tylko poczekać, aż zostanie on zainstalowany na wcześniejszym etapie.