~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/plugin/scheduler.h

Merged Eric from lp:~eday/drizzle/eday-merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21
21
 */
22
22
 
23
 
#ifndef DRIZZLED_PLUGIN_SCHEDULING_H
24
 
#define DRIZZLED_PLUGIN_SCHEDULING_H
 
23
#ifndef DRIZZLED_PLUGIN_SCHEDULER_H
 
24
#define DRIZZLED_PLUGIN_SCHEDULER_H
25
25
 
26
26
#include <string>
27
27
#include <vector>
28
28
 
 
29
namespace drizzled
 
30
{
 
31
namespace plugin
 
32
{
 
33
 
 
34
/**
 
35
 * This class should be used by scheduler plugins to implement custom session
 
36
 * schedulers.
 
37
 */
29
38
class Scheduler
30
39
{
31
 
private:
32
 
  uint32_t max_threads;
33
40
public:
34
 
 
35
 
  Scheduler(uint32_t threads)
36
 
    : max_threads(threads) {}
37
 
 
 
41
  Scheduler() {}
38
42
  virtual ~Scheduler() {}
39
43
 
40
 
  uint32_t get_max_threads()
41
 
  {
42
 
    return max_threads;
43
 
  }
44
 
 
45
 
  virtual uint32_t count(void)= 0;
46
 
  virtual bool add_connection(Session *session)= 0;
47
 
 
48
 
  virtual bool end_thread(Session *, bool) 
49
 
  {
50
 
    my_thread_end();
51
 
    return false;
52
 
  }
53
 
  virtual bool init_new_connection_thread(void)
54
 
  {
55
 
    if (my_thread_init())
56
 
      return true;
57
 
    return false;
58
 
  }
59
 
 
60
 
  virtual void post_kill_notification(Session *) {}
 
44
  /**
 
45
   * Add a session to the scheduler. When the scheduler is ready to run the
 
46
   * session, it should call session->run().
 
47
   */
 
48
  virtual bool addSession(Session *session)= 0;
 
49
 
 
50
  /**
 
51
   * Notify the scheduler that it should be killed gracefully.
 
52
   */
 
53
  virtual void killSession(Session *) {}
 
54
 
 
55
  /**
 
56
   * This is called when a scheduler should kill the session immedaitely.
 
57
   */
 
58
  virtual void killSessionNow(Session *) {}
61
59
};
62
60
 
63
61
class SchedulerFactory
77
75
  {
78
76
    aliases.push_back(alias);
79
77
  }
80
 
 
81
78
};
82
79
 
83
 
#endif /* DRIZZLED_PLUGIN_SCHEDULING_H */
 
80
} /* end namespace drizzled::plugin */
 
81
} /* end namespace drizzled */
 
82
 
 
83
#endif /* DRIZZLED_PLUGIN_SCHEDULER_H */