• unknown's avatar
    WL#3337 (Event scheduler new architecture) · 0410cc3a
    unknown authored
    This patch makes the relationship between Event_scheduler and Event_queue
    unidirectional from the former to the latter.
    
    
    
    
    The change is that the conditional on which the scheduler sleeped has been
    moved to the Event_queue and the latter does not call anymore
    Event_scheduler::queue_changed(), which in turn has be removed.
    
    
    sql/event_queue.cc:
      Remove dependency of Event_queue on Event_scheduler but not vice versa.
      Event_scheduler polls whether there is time to execute an event.
      
      Removed notify_observers() as the way of calling has changed.
      Added Event_queue::cond_wait() similar to Event_scheduler::cond_wait().
    sql/event_queue.h:
      init_queue() does not need anymore Event_scheduler object because
      the relationship is now one-way. Event_scheduler knows about Event_queue
      but not vice versa.
      
      get_top_execution_if_time() does by itself the waiting instead of
      returning abstime. This simplifies the code in Event_scheduler::run()
      get_top_execution_if_time() returns only if job_data != NULL or if
      the scheduler thread was killed.
      
      notify_observers() is no more used and therefore removed.
      
      Added Event_queue::cond_wait() because now there is waiting on a
      conditional variable in Event_queue too (like in Event_scheduler for
      ::stop()).
    sql/event_scheduler.cc:
      Change the relationship between Event_scheduler & Event_queue.
      Event_queue does not know anymore about Event_scheduler. When
      the scheduler calls get_top_element_if_time() it may fall asleep
      on a conditional of Event_queue, if either the queue is empty or
      it's still not time for activation. When the method returns it
      will return a non-null address, namely an object to be executed.
      If the return value is NULL, the thread was killed by a call to
      Event_scheduler::stop() (we assert this).
    sql/event_scheduler.h:
      Remove queue_changed() as it is obsoleted by making the relationship
      between Event_scheduler and Event_queue one-way, from the former to the
      latter. Event_queue now does not know about Event_scheduler.
      
      get_state() is changed to is_running(). The state enum should be private,
      as it is not needed to be seen from outside anymore.
    sql/events.cc:
      Event_queue does not need anymore a pointer to Event_scheduler.
    0410cc3a
event_scheduler.h 2.56 KB