Pakman
Manager.h
1 #ifndef MANAGER_H
2 #define MANAGER_H
3 
4 #include <string>
5 #include <memory>
6 
7 #include <assert.h>
8 
9 #include <mpi.h>
10 
11 #include "core/Command.h"
12 
14 
31 class Manager
32 {
33  public:
34 
36  enum worker_t
37  {
38  forked_worker,
39  mpi_worker
40  };
41 
49  Manager(const Command &simulator, worker_t worker_type,
50  bool *p_program_terminated);
51 
53  ~Manager();
54 
56  bool isActive() const;
57 
59  void iterate();
60 
61  private:
62 
70  enum state_t { idle, busy, terminated };
71 
73  // Do idle stuff
74  void doIdleStuff();
75 
76  // Do busy stuff
77  void doBusyStuff();
78 
79  // Create Worker
80  void createWorker(const std::string& input_string);
81 
82  // Terminate Worker
83  void terminateWorker();
84 
85  // Flush Worker
86  void flushWorker();
87 
88  // Probe for message
89  bool probeMessage() const;
90 
91  // Probe for signal
92  bool probeSignal() const;
93 
94  // Receive message
95  std::string receiveMessage() const;
96 
97  // Receive signal
98  int receiveSignal() const;
99 
100  // Send message to Master
101  void sendMessageToMaster(const std::string& message_string);
102 
103  // Send signal to Master
104  void sendSignalToMaster(int signal);
105 
106  // Send error code to Master
107  void sendErrorCodeToMaster(int error_code);
108 
110  // Initial state is idle
111  state_t m_state = idle;
112 
113  // Command for Worker
114  const Command m_simulator;
115 
116  // Worker type (forked Worker vs MPI Worker)
117  const worker_t m_worker_type;
118 
119  // Pointer to program terminated flag
120  bool *m_p_program_terminated;
121 
122  // Pointer to Worker handler
123  std::unique_ptr<AbstractWorkerHandler> m_p_worker_handler;
124 
125  // Message buffer
126  std::string m_message_buffer;
127 
128  // Message request
129  MPI_Request m_message_request = MPI_REQUEST_NULL;
130 
131  // Signal buffer
132  int m_signal_buffer;
133 
134  // Signal request
135  MPI_Request m_signal_request = MPI_REQUEST_NULL;
136 
137  // Error code buffer
138  int m_error_code_buffer;
139 
140  // Error code request
141  MPI_Request m_error_code_request = MPI_REQUEST_NULL;
142 };
143 
144 #endif // MANAGER_H
worker_t
Definition: Manager.h:36
Manager(const Command &simulator, worker_t worker_type, bool *p_program_terminated)
Definition: Manager.cc:21
bool isActive() const
Definition: Manager.cc:49
void iterate()
Definition: Manager.cc:55
~Manager()
Definition: Manager.cc:30