~stewart/percona-playback/cassert-header

« back to all changes in this revision

Viewing changes to src/supervisor.h

  • Committer: Oleg Tsarev
  • Date: 2011-05-04 21:38:59 UTC
  • mfrom: (108.1.18 sbt)
  • Revision ID: oleg.tsarev@percona.com-20110504213859-pw1mgjmuj9gz44vb
merge split_by_transaction

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef __REPLAY_LOG__SUPERVISOR__H__
 
2
#define __REPLAY_LOG__SUPERVISOR__H__
 
3
 
 
4
#include "common.h"
 
5
 
 
6
typedef void (*troubles)(void *a_context, Error const& a_error);
 
7
 
 
8
void set_troubles(void *a_context, troubles a_function);
 
9
 
 
10
void has_troubles(Error const& error);
 
11
 
 
12
class Worker;
 
13
class Query;
 
14
template< typename T > class Queue;
 
15
typedef Queue< Query > Query_Queue;
 
16
 
 
17
class Supervisor : None_Copyable
 
18
{
 
19
public:
 
20
  typedef Query_Queue Task;
 
21
  Supervisor(std::size_t a_free_count);
 
22
  virtual ~Supervisor();
 
23
public:
 
24
  virtual void start()
 
25
  {
 
26
    Mutex::Lock lk(m_mutex);
 
27
    do_start();
 
28
  }
 
29
  virtual void stop()
 
30
  {
 
31
    Mutex::Lock lk(m_mutex);
 
32
    do_stop();
 
33
  }
 
34
  virtual void flush()
 
35
  {
 
36
    Mutex::Lock lk(m_mutex);
 
37
    do_flush();
 
38
  }
 
39
  virtual void join()
 
40
  {
 
41
    do_join();
 
42
  }
 
43
  virtual bool task_complete(Worker *a_worker, Task *a_task)
 
44
  {
 
45
    Mutex::Lock lk(m_mutex);
 
46
    return do_task_complete(a_worker);
 
47
  }
 
48
  virtual bool task_crash(Worker *a_worker, Task *a_task, Error const &a_error)
 
49
  {
 
50
    Mutex::Lock lk(m_mutex);
 
51
    return do_task_crash(a_worker);
 
52
  }
 
53
  virtual void worker_complete(Worker *a_worker)
 
54
  {
 
55
    Mutex::Lock lk(m_mutex);
 
56
    do_worker_complete(a_worker);
 
57
  }
 
58
protected:
 
59
  Mutex m_mutex;
 
60
protected:
 
61
  void do_start();
 
62
  void do_stop();
 
63
  void do_flush();
 
64
  void do_join();
 
65
  bool do_task_complete  (Worker *);
 
66
  bool do_task_crash     (Worker *);
 
67
  void do_worker_complete(Worker *);
 
68
  bool is_flush() const;
 
69
  bool is_stop() const;
 
70
  bool is_work() const;
 
71
  bool is_work(Task *) const;
 
72
  void task_start(Task*);
 
73
private:
 
74
  class Impl;
 
75
  typedef boost::shared_ptr<Impl> Impl_Pointer;
 
76
private:
 
77
  Impl_Pointer m_impl;
 
78
  friend class Worker;
 
79
};
 
80
 
 
81
#endif // __REPLAY_LOG__SUPERVISOR__H__