comparison src/org/eclipse/jetty/io/nio/SelectorManager.java @ 943:96f60ce98949

remove Timeout
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 11 Oct 2016 02:02:48 -0600
parents c157a786ed0b
children 1d24b6e422fa
comparison
equal deleted inserted replaced
942:c157a786ed0b 943:96f60ce98949
44 import org.eclipse.jetty.util.component.AbstractLifeCycle; 44 import org.eclipse.jetty.util.component.AbstractLifeCycle;
45 import org.eclipse.jetty.util.component.AggregateLifeCycle; 45 import org.eclipse.jetty.util.component.AggregateLifeCycle;
46 import org.eclipse.jetty.util.component.Dumpable; 46 import org.eclipse.jetty.util.component.Dumpable;
47 import org.slf4j.Logger; 47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory; 48 import org.slf4j.LoggerFactory;
49 import org.eclipse.jetty.util.thread.Timeout;
50 49
51 50
52 /* ------------------------------------------------------------ */ 51 /* ------------------------------------------------------------ */
53 /** 52 /**
54 * The Selector Manager manages and number of SelectSets to allow 53 * The Selector Manager manages and number of SelectSets to allow
328 /* ------------------------------------------------------------------------------- */ 327 /* ------------------------------------------------------------------------------- */
329 /* ------------------------------------------------------------------------------- */ 328 /* ------------------------------------------------------------------------------- */
330 public class SelectSet implements Dumpable 329 public class SelectSet implements Dumpable
331 { 330 {
332 private final int _setID; 331 private final int _setID;
333 private final Timeout _timeout; 332 private volatile long _now = System.currentTimeMillis();
334 333
335 private final ConcurrentLinkedQueue<Object> _changes = new ConcurrentLinkedQueue<Object>(); 334 private final ConcurrentLinkedQueue<Object> _changes = new ConcurrentLinkedQueue<Object>();
336 335
337 private volatile Selector _selector; 336 private volatile Selector _selector;
338 337
348 SelectSet(int acceptorID) throws Exception 347 SelectSet(int acceptorID) throws Exception
349 { 348 {
350 _setID=acceptorID; 349 _setID=acceptorID;
351 350
352 _idleTick = System.currentTimeMillis(); 351 _idleTick = System.currentTimeMillis();
353 _timeout = new Timeout(this);
354 _timeout.setDuration(0L);
355 352
356 // create a selector; 353 // create a selector;
357 _selector = Selector.open(); 354 _selector = Selector.open();
358 _monitorNext=System.currentTimeMillis()+__MONITOR_PERIOD; 355 _monitorNext=System.currentTimeMillis()+__MONITOR_PERIOD;
359 } 356 }
474 471
475 472
476 // Do and instant select to see if any connections can be handled. 473 // Do and instant select to see if any connections can be handled.
477 int selected=selector.selectNow(); 474 int selected=selector.selectNow();
478 475
479 long now=System.currentTimeMillis(); 476 _now = System.currentTimeMillis();
480 477
481 // if no immediate things to do 478 // if no immediate things to do
482 if (selected==0 && selector.selectedKeys().isEmpty()) 479 if (selected==0 && selector.selectedKeys().isEmpty())
483 { 480 {
484 // If we are in pausing mode 481 // If we are in pausing mode
490 } 487 }
491 catch(InterruptedException e) 488 catch(InterruptedException e)
492 { 489 {
493 LOG.trace("",e); 490 LOG.trace("",e);
494 } 491 }
495 now=System.currentTimeMillis(); 492 _now = System.currentTimeMillis();
496 } 493 }
497 494
498 // workout how long to wait in select 495 // workout how long to wait in select
499 _timeout.setNow(now);
500
501 long wait = _changes.size()==0?__IDLE_TICK:0L; 496 long wait = _changes.size()==0?__IDLE_TICK:0L;
502 497
503 // If we should wait with a select 498 // If we should wait with a select
504 if (wait>0) 499 if (wait>0)
505 { 500 {
506 long before=now; 501 long before = _now;
507 selector.select(wait); 502 selector.select(wait);
508 now = System.currentTimeMillis(); 503 _now = System.currentTimeMillis();
509 _timeout.setNow(now);
510 504
511 // If we are monitoring for busy selector 505 // If we are monitoring for busy selector
512 // and this select did not wait more than 1ms 506 // and this select did not wait more than 1ms
513 if (__MONITOR_PERIOD>0 && now-before <=1) 507 if (__MONITOR_PERIOD>0 && _now-before <=1)
514 { 508 {
515 // count this as a busy select and if there have been too many this monitor cycle 509 // count this as a busy select and if there have been too many this monitor cycle
516 if (++_busySelects>__MAX_SELECTS) 510 if (++_busySelects>__MAX_SELECTS)
517 { 511 {
518 // Start injecting pauses 512 // Start injecting pauses
623 } 617 }
624 618
625 // Everything always handled 619 // Everything always handled
626 selector.selectedKeys().clear(); 620 selector.selectedKeys().clear();
627 621
628 now=System.currentTimeMillis(); 622 _now = System.currentTimeMillis();
629 _timeout.setNow(now);
630 623
631 // Idle tick 624 // Idle tick
632 if (now-_idleTick>__IDLE_TICK) 625 if (_now-_idleTick>__IDLE_TICK)
633 { 626 {
634 _idleTick=now; 627 _idleTick = _now;
635 628
636 final long idle_now=((_lowResourcesConnections>0 && selector.keys().size()>_lowResourcesConnections)) 629 final long idle_now=((_lowResourcesConnections>0 && selector.keys().size()>_lowResourcesConnections))
637 ?(now+_maxIdleTime) 630 ?(_now+_maxIdleTime)
638 :now; 631 :_now;
639 632
640 execute(new Runnable() 633 execute(new Runnable()
641 { 634 {
642 public void run() 635 public void run()
643 { 636 {
650 }); 643 });
651 644
652 } 645 }
653 646
654 // Reset busy select monitor counts 647 // Reset busy select monitor counts
655 if (__MONITOR_PERIOD>0 && now>_monitorNext) 648 if (__MONITOR_PERIOD>0 && _now>_monitorNext)
656 { 649 {
657 _busySelects=0; 650 _busySelects=0;
658 _pausing=false; 651 _pausing=false;
659 _monitorNext=now+__MONITOR_PERIOD; 652 _monitorNext=_now+__MONITOR_PERIOD;
660 653
661 } 654 }
662 } 655 }
663 catch (ClosedSelectorException e) 656 catch (ClosedSelectorException e)
664 { 657 {
716 return SelectorManager.this; 709 return SelectorManager.this;
717 } 710 }
718 711
719 public long getNow() 712 public long getNow()
720 { 713 {
721 return _timeout.getNow(); 714 return _now;
722 } 715 }
723 716
724 public void wakeup() 717 public void wakeup()
725 { 718 {
726 try 719 try