#mongodb
#mongodb
Вопрос:
Это то, что я пробовал, но, похоже, не работает, убивает только 1 операцию.
function s() {
t = db.currentOp()['inprog'];
k= new Array();
for(i=0;i< t.length;i )
{
if(t[i]["ns"].indexOf("my_namespace") != -1) //fetch all required current Operations
k.push(t[i]);
}
for(j=0;j<k.length;k )
{
db.killOp(k[j]['opid']); // kill them by opid , works only once
}
Комментарии:
1. Что происходит после вызова killOp, возвращается ли он? Это просто умирает?
2. @gates, он возвращается с соответствующим сообщением о состоянии, таким как {‘info’ :’попытка kil ….} , но завершает только 1 операцию, не все, которые упомянуты в цикле
3. @DhruvPathak — какую версию MongoDB вы используете?
4. @DhruvPathak — тогда я думаю, что JIRA в моем ответе, скорее всего, связана — попробуйте обновить и / или предложенную мной модификацию вашей функции.
5. @DhruvPathak — Мой ответ сработал для вас?
Ответ №1:
Поскольку вы используете версию v1.6, то следующая JIRA, вероятно, связана с вашей проблемой и была решена в 1.7.2:https://jira.mongodb.org/browse/SERVER-1816
Итак, если это проблема, попробуйте выполнить обновление до 1.8. Или вы могли бы попробовать следующее:
for(each operation op identified in first loop)
{
if(op still exists) { // op could have finished
kill op;
while(op still there) // May not be possible to kill op
{ // if another is being killed
wait 1 sec;
}
}
}
Ответ №2:
for(j=0;j<k.length;k )
{
db.killOp(k[j]['opid']); // kill them by opid , works only once
}
Поправьте меня, если я ошибаюсь, но так не должно быть… (j не k , потому что вы просто бесконечно увеличиваете длину k). Следовательно, j всегда будет только = 0 и уничтожать только первое значение в k.
for(j=0;j<k.length;j )
{
db.killOp(k[j]['opid']); // kill them by opid , works only once
}
Комментарии:
1. это опечатка. даже при правильном коде это убивает только первую операцию.