EDYCJA: Zasadniczo szukam wskazówek, jak zrozumieć, jakie operacje tła są uruchomione na mojej instancji MongoDB i ewentualnie zmniejszyć/wyłączyć je w razie potrzeby, tak aby nie zakłócać uruchamiania testów. Próbowałem już mongostat
i mongotop
, ale nie znalazłem nic z nimi, co pomogło mi zrozumieć, jakie operacje w tle są uruchomione i co je inicjuje. db.currentOp()
konsekwentnie zwraca pustą tablicę po uruchomieniu, zanim zacznę wykonywać testy.Monitorowanie MongoDB "operacje w tle"?
Regularnie przeprowadzam testy podczas pracy z węzłem (mocha, ogórek). Od wczoraj, około 25% inicjowania serwera czasie błędu próbuje połączyć się MongoDB z powodu następującego błędu:
**Unhandled rejection MongoError: exception: cannot perform operation: a background operation is currently running for collection** somecollection
at Function.MongoError.create (/somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:31:11)
at /somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:793:66
at bound (domain.js:254:14)
at runBound (domain.js:267:12)
at Callbacks.emit (.../node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:94:3)
at null.messageHandler (/somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:235:23)
at Socket.<anonymous> (/somepath/node_modules/pow-mongodb-fixtures/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:294:20)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at Socket.Readable.push (_stream_readable.js:126:10)
at TCP.onread (net.js:538:20)
Używamy POW-MongoDB-uchwyty, aby wyczyścić db i wypełnić go z niektórych podstawowych danych przed uruchomieniem testy , gdzie to się dzieje. AFAIK nic wielkiego się nie zmieniło, kiedy to się zaczęło. Jakieś pomysły, w których mogę zacząć szukać źródła tego błędu?
check uruchomiony proces w tle przy użyciu db.currentOp(). W przypadku aktywnego procesu działającego w tle twój klient jest skonfigurowany do zgłaszania tego błędu. –
To polecenie zawsze zwraca pustą tablicę. Prawdopodobnie do czasu, kiedy go uruchomię, zakończyła się "operacja w tle". Niemniej jednak czasami muszę uruchomić 3 lub 4 razy, aby ominąć ten błąd. – joniba
Być może jesteś na dobrej drodze z 'db.currentOp()', ale może po prostu nie używasz go poprawnie. Ten artykuł jest bardziej szczegółowy; [Oglądanie i zabijanie aktualnie wykonywanych operacji w MongoDB] (https://masteringmean.com/lessons/104-Viewing-and-cilling-current-executing-operations- in-MongoDB) –