@Override AutoBuffer call(AutoBuffer ab) { ab._h2o.remove_task_tracking(ab.getTask()); return ab; }
@Override public void run() { Thread.currentThread().setPriority(Thread.MAX_PRIORITY-1); while( true ) { RPC.RPCCall r; try { r = PENDING.take(); } // Interrupted while waiting for a packet? // Blow it off and go wait again... catch( InterruptedException e ) { continue; } assert r._computed : "Found RPCCall not computed "+r._tsknum; r._ackResendCnt++; if(r._ackResendCnt % 50 == 0) Log.err("Possibly broken network, can not send ack through, got " + r._ackResendCnt + " resends."); if( !H2O.CLOUD.contains(r._client) ) { // RPC from somebody who dropped out of cloud? r._client.remove_task_tracking(r._tsknum); continue; } if( r._dt != null ) { // Not yet run the ACKACK? r.resend_ack(); // Resend ACK, hoping for ACKACK PENDING.add(r); // And queue up to send again } } } }