2015-11-19 10 views
15

EDIT: Temel olarak MongoDB örneğimde arkaplan işlemlerinin nasıl çalıştığını anlamak ve gerektiğinde bunları sınamak/devre dışı bırakmak için bazı ipuçları arıyorum. mongostat ve mongotop'u denedim, ancak arka plan işlemlerinin hangi işlemleri yürüttüğünü ve neyin başladığını anlama konusunda bana yardımcı olan hiçbir şey bulamadım. Testlerimi çalıştırmaya başlamadan önce db.currentOp() sürekli olarak boş bir dizi döndürür.MongoDB "arka plan işlemleri" nin izlenmesi?

Düğümle (mocha, salatalık) geliştirirken düzenli olarak testler yapıyorum.

**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) 

Biz db temizlemek ve testler çalıştırmadan önce bazı temel verilerle doldurmak için pow-mongodb-demirbaşlar kullanın: dünden beri zaman sunucusu başlatma yaklaşık% 25 aşağıdaki hata ile mongodb bağlanmaya çalışılırken başarısız , bu gerçekleşiyor. Bu başladığında AFAIK hiçbir şey büyük ölçüde değişmedi. Bu hatanın kaynağını araştırmaya bile başlayabileceğim herhangi bir fikir var mı?

+1

onay db.currentOp kullanarak arka plan süreci() çalıştıran. Etkin arkaplan işlemi durumunda, istemciniz bu hatayı –

+0

atmak üzere yapılandırılmıştır. Bu komut her zaman boş bir dizi döndürür. Muhtemelen çalıştırdığım zaman "arka plan operasyonu" bitti. Yine de, bu hatayı aşmak için bazen 3 veya 4 kez çalışmam gerekir. – joniba

+0

'db.currentOp()' ile doğru yolda olabilirsiniz, ancak belki doğru şekilde kullanmıyor olabilirsiniz. Bu yazı daha derinden gider; [MongoDB'de şu anda yürütülen işlemleri görüntüleme ve öldürme] (https://masteringmean.com/lessons/104-Viewing-and-killing-currently-executing-operations-in-MongoDB) –

cevap

3

bu durumda Arkadaşınız olacaktır:

db.currentOp(true) 

gerçek belirtme boşta bağlantı ve sistem işlemleri ile ilgili işlemleri kapsar.

Buraya bakın:

+0

Um, soru hakkındaki yorumları okuyor musunuz? – joniba

+0

Tabii ki yaptım, ama durumunuzda yardımcı olabilecek ekstra bir parametre olmaksızın db.currentOp() çalışmasını belirtmeye devam ettiniz. Neyse, senin sorununun duyduğuna çok sevindim :) –

4

https://docs.mongodb.org/manual/reference/method/db.currentOp/ Eh ben ne olup bittiğini izlemek ve Mongo db yoluyla sorunu çözmek için bir yol arıyordu çünkü cevap olarak işaretlemek için gitmiyorum. Yine de, problemi çözdüm. Dünyadaki en yararlı çözüm değil, fakat tüm zamanlar fongoose şemalarını çalıştıracak ve böylece tüm dizinleri kontrol edecek/yeniden oluşturacak olan sunucuyu senkronize olmayan bir şekilde başlattığımız ortaya çıktı ve aynı anda daha fazla veya daha az eşzamanlı olarak fikstür kodunu çalıştırıyordum. koleksiyonları.

Kısacası, onlara endeksleri oluştururken koleksiyonlarını silmeye çalışmayın :)