Advertisement
s243a

RequestSender.finish

Jun 20th, 2015
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.39 KB | None | 0 0
  1. // line 1562 of https://github.com/freenet/fred/blob/3fcc2d1b3a0d5ccbeb73928d6b267440e5b4c17b/src/freenet/node/RequestSender.java#L1
  2. private void finish(int code, PeerNode next, boolean fromOfferedKey) {
  3.         if(logMINOR) Logger.minor(this, "finish("+code+ ") on "+this+" from "+next);
  4.        
  5.         boolean doOpennet;
  6.        
  7.         synchronized(this) {
  8.             if(status != NOT_FINISHED) {
  9.                 if(logMINOR) Logger.minor(this, "Status already set to "+status+" - returning on "+this+" would be setting "+code+" from "+next);
  10.                 if(next != null) next.noLongerRoutingTo(origTag, fromOfferedKey);
  11.                 return;
  12.             }
  13.             doOpennet = code == SUCCESS && !(fromOfferedKey || isSSK);
  14.             if(doOpennet)
  15.                 origTag.waitingForOpennet(next); // Call this first so we don't unlock.
  16.             if(next != null) next.noLongerRoutingTo(origTag, fromOfferedKey);
  17.             // After calling both, THEN tell handler.
  18.             status = code;
  19.             if(status == SUCCESS)
  20.                 successFrom = next;
  21.             notifyAll();
  22.         }
  23.        
  24.         boolean shouldUnlock = doOpennet && next != null;
  25.        
  26.         if(status == SUCCESS) {
  27.             if((!isSSK) && transferTime > 0 && logMINOR) {
  28.                 long timeTaken = System.currentTimeMillis() - startTime;
  29.                 synchronized(avgTimeTaken) {
  30.                     avgTimeTaken.report(timeTaken);
  31.                     avgTimeTakenTransfer.report(transferTime);
  32.                     if(logMINOR) Logger.minor(this, "Successful CHK request took "+timeTaken+" average "+avgTimeTaken);
  33.                     if(logMINOR) Logger.minor(this, "Successful CHK request transfer "+transferTime+" average "+avgTimeTakenTransfer);
  34.                     if(logMINOR) Logger.minor(this, "Search phase: median "+(avgTimeTaken.currentValue() - avgTimeTakenTransfer.currentValue())+"ms, mean "+(avgTimeTaken.meanValue() - avgTimeTakenTransfer.meanValue())+"ms");
  35.                 }
  36.             }
  37.             if(next != null) {
  38.                 next.onSuccess(false, isSSK);
  39.             }
  40.             // FIXME should this be called when fromOfferedKey??
  41.             node.nodeStats.requestCompleted(true, source != null, isSSK);
  42.            
  43.             fireRequestSenderFinished(code, fromOfferedKey);
  44.            
  45.             if(doOpennet) {
  46.                 if(finishOpennet(next))
  47.                     shouldUnlock = false;
  48.             }
  49.         } else {
  50.             node.nodeStats.requestCompleted(false, source != null, isSSK);
  51.             fireRequestSenderFinished(code, fromOfferedKey);
  52.         }
  53.        
  54.         if(shouldUnlock) next.noLongerRoutingTo(origTag, fromOfferedKey);
  55.        
  56.         synchronized(this) {
  57.             opennetFinished = true;
  58.             notifyAll();
  59.         }
  60.        
  61.     }
  62.    
  63.     AsyncMessageCallback finishOpennetOnAck(final PeerNode next) {
  64.        
  65.         return new AsyncMessageCallback() {
  66.  
  67.             private boolean completed;
  68.            
  69.             @Override
  70.             public void sent() {
  71.                 // Ignore
  72.             }
  73.  
  74.             @Override
  75.             public void acknowledged() {
  76.                 synchronized(this) {
  77.                     if(completed) return;
  78.                     completed = true;
  79.                 }
  80.                 origTag.finishedWaitingForOpennet(next);
  81.             }
  82.  
  83.             @Override
  84.             public void disconnected() {
  85.                 synchronized(this) {
  86.                     if(completed) return;
  87.                     completed = true;
  88.                 }
  89.                 origTag.finishedWaitingForOpennet(next);
  90.             }
  91.  
  92.             @Override
  93.             public void fatalError() {
  94.                 synchronized(this) {
  95.                     if(completed) return;
  96.                     completed = true;
  97.                 }
  98.                 origTag.finishedWaitingForOpennet(next);
  99.             }
  100.            
  101.         };
  102.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement