Как убить все запросы приложений, используя Javascript на стороне сервера в mongoDB? - PullRequest
2 голосов
/ 13 апреля 2011

Это то, что я пробовал, но, похоже, не работает, убивает только 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
 }

Ответы [ 2 ]

3 голосов
/ 15 апреля 2011

Поскольку вы используете 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;
     }
  }
}
0 голосов
/ 22 апреля 2011
 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
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...