@Override public String print16( AutoBuffer ab ) { return "task# "+ab.getTask(); } }
public String print16( AutoBuffer b ) { return "task# "+b.getTask(); } }
@Override AutoBuffer call(AutoBuffer ab) { ab._h2o.remove_task_tracking(ab.getTask()); return ab; }
@Override public String print16( AutoBuffer ab ) { int flag = ab.getFlag(); String clazz = (flag == CLIENT_UDP_SEND) ? TypeMap.className(ab.get2()) : ""; return "task# "+ab.getTask()+" "+ clazz+" "+COOKIES[flag-SERVER_UDP_SEND]; } }
AutoBuffer call(AutoBuffer ab) { int tnum = ab.getTask(); RPC<?> t = ab._h2o.taskGet(tnum); assert t== null || t._tasknum == tnum; if( t != null ) t.response(ab); // Do the 2nd half of this task, includes ACKACK else ab.close(); // Else forgotten task, but still must ACKACK return new AutoBuffer(ab._h2o).putTask(UDP.udp.ackack.ordinal(),tnum); }
protected int response( AutoBuffer ab ) { assert _tasknum==ab.getTask(); if( _done ) return ab.close(); // Ignore duplicate response packet int flag = ab.getFlag(); // Must read flag also, to advance ab if( flag == SERVER_TCP_SEND ) return ab.close(); // Ignore UDP packet for a TCP reply assert flag == SERVER_UDP_SEND; synchronized(this) { // Install the answer under lock if( _done ) return ab.close(); // Ignore duplicate response packet UDPTimeOutThread.PENDING.remove(this); _dt.read(ab); // Read the answer (under lock?) _size_rez = ab.size(); // Record received size ab.close(); // Also finish the read (under lock?) _dt.onAck(); // One time only execute (before sending ACKACK) _done = true; // Only read one (of many) response packets ab._h2o.taskRemove(_tasknum); // Flag as task-completed, even if the result is null notifyAll(); // And notify in any case } doAllCompletions(); // Send all tasks needing completion to the work queues return 0; }
static void tcp_ack( final AutoBuffer ab ) throws IOException { int task = ab.getTask(); RPC rpc = ab._h2o.taskGet(task);
static void remote_exec( final AutoBuffer ab ) { long lo = ab.get8(0), hi = ab.get8(8); // for dbg final int task = ab.getTask(); final int flag = ab.getFlag(); assert flag==CLIENT_UDP_SEND || flag==CLIENT_TCP_SEND; // Client-side send