private function retryOperation($node_id, $idc_list, $new_val, $op_user, $batch_type, $note = "")
 {
     //echo "$node_id, $idc_list, $new_val, $note, $op_user, $batch_type".PHP_EOL;
     $node_row = NodeServ::getNode($node_id);
     $node_whole = $node_row["node_whole"];
     $main_buss_id = $node_row["main_buss_id"];
     $sub_buss_id = $node_row["sub_buss_id"];
     $MAX_RETRY_TIMES = 3;
     $failed_idcs = $idc_list;
     //outside loop for failed idcs
     $outside_retry_time = 0;
     while (count($failed_idcs) != 0 && $outside_retry_time < $MAX_RETRY_TIMES) {
         $tmp_list = $failed_idcs;
         $failed_idcs = array();
         foreach ($tmp_list as $one_idc) {
             switch ($batch_type) {
                 case InfoDescUtil::OP_TYPE_BATCH_MOD_VALUE:
                     $ret = NodeController::modNodeValue($node_id, $one_idc, $node_whole, $main_buss_id, $sub_buss_id, $new_val, $note, $op_user);
                     break;
                 case InfoDescUtil::OP_TYPE_BATCH_ADD_SERV:
                     $ret = ServiceController::addService($node_row, $one_idc, $new_val, $op_user);
                     break;
             }
             if ($ret != 0) {
                 array_push($failed_idcs, $one_idc);
             }
         }
         $outside_retry_time++;
     }
     return $failed_idcs;
 }