Как отключить все запросы приложения, используя серверный Javascript в MongoDB?

#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. это опечатка. даже при правильном коде это убивает только первую операцию.