artificial notify failure
[charm.git] / src / ck-core / ckmemcheckpoint.h
1 #ifndef _CK_MEM_CHECKPT_
2 #define _CK_MEM_CHECKPT_
3
4 #include "CkMemCheckpoint.decl.h"
5
6 extern CkGroupID ckCheckPTGroupID;
7
8 class CkArrayCheckPTReqMessage: public CMessage_CkArrayCheckPTReqMessage {
9 public: 
10   CkArrayCheckPTReqMessage()  {}
11 };
12
13 class CkArrayCheckPTMessage: public CMessage_CkArrayCheckPTMessage {
14 public:
15         CkArrayID  aid;
16         CkGroupID  locMgr;
17         CkArrayIndex index;
18         double *packData;
19         int bud1, bud2;
20         int len;
21         int cp_flag;          // 1: from checkpoint 0: from recover
22 };
23
24 class CkCheckPTMessage: public CMessage_CkCheckPTMessage {
25 public:
26         char *packData;
27         int bud1, bud2;
28         int len;
29         int pointer;
30         int cp_flag;          // 1: from checkpoint 0: from recover
31 };
32
33 class CkProcCheckPTMessage: public CMessage_CkProcCheckPTMessage {
34 public:
35         int pe;
36         int reportPe;           // chkpt starter
37         int failedpe;
38         int cur_restart_phase;
39         int len;
40         char *packData;
41 };
42
43 // table entry base class
44 class CkCheckPTInfo {
45    friend class CkMemCheckPT;
46 protected:
47    CkArrayID aid;
48    CkGroupID locMgr;
49    CkArrayIndex index;
50    int pNo;   //another buddy
51 public:
52    CkCheckPTInfo();
53    CkCheckPTInfo(CkArrayID a, CkGroupID loc, CkArrayIndex idx, int pno):
54                   aid(a), locMgr(loc), index(idx), pNo(pno)   {}
55    virtual ~CkCheckPTInfo() {}
56    virtual void updateBuffer(CkArrayCheckPTMessage *data) = 0;
57    virtual CkArrayCheckPTMessage * getCopy() = 0;
58    virtual void updateBuddy(int b1, int b2) = 0;
59    virtual int getSize() = 0;
60 };
61
62 /// memory or disk checkpointing
63 #define CkCheckPoint_inMEM   1
64 #define CkCheckPoint_inDISK  2
65
66 class CkMemCheckPT: public CBase_CkMemCheckPT {
67 public:
68   CkMemCheckPT(int w);
69   CkMemCheckPT(CkMigrateMessage *m):CBase_CkMemCheckPT(m) {};
70   virtual ~CkMemCheckPT();
71   void pup(PUP::er& p);
72   inline int BuddyPE(int pe);
73   //void doItNow(int sp, CkCallback &);
74   void doItNow(int sp);
75   void killAfter(double);
76   void chkpLocalStart();
77   void restart(int diePe);
78   void removeArrayElements();
79   void createEntry(CkArrayID aid, CkGroupID loc, CkArrayIndex index, int buddy);
80   void recvData(CkArrayCheckPTMessage *);
81   void gotData();
82   void recvProcData(CkProcCheckPTMessage *);
83   void cpFinish();
84   void syncFiles(CkReductionMsg *);
85   void report();
86   void recoverBuddies();
87   void recoverEntry(CkArrayCheckPTMessage *msg);
88   void recoverArrayElements();
89   void quiescence(CkCallback &);
90   void resetReductionMgr();
91   void finishUp();
92   void gotReply();
93   void inmem_restore(CkArrayCheckPTMessage *m);
94   void updateLocations(int n, CkGroupID *g, CkArrayIndex *idx,int nowOnPe);
95   void generateFailure();
96   void generateSoftFailure();
97   void replicaInjectFailure();
98   
99   void resetLB(int diepe);
100   int  isFailed(int pe);
101   //void pupAllElements(PUP::er &p);
102   void startArrayCheckpoint();
103   void recvArrayCheckpoint(CkArrayCheckPTMessage *m);
104   void recoverAll(char * msg, CkVec<CkGroupID> * gmap=NULL, CkVec<CkArrayIndex> * imap=NULL);
105   void startCheckpoint();
106   void doneComparison(bool);
107   void doneRComparison(int);
108   void doneBothComparison();
109   void RollBack();
110   void recoverFromSoftFailure();
111   void notifyReplicaDie(int diePe);
112
113   void recvIter(int);
114   void getIter();
115   void recvMaxIter(int);
116   void reachChkpIter();
117   void startChkp();
118   
119 public:
120   static CkCallback  cpCallback;
121
122   static int inRestarting;
123   static int inCheckpointing;
124   static int aboutToDie;
125   static int inLoadbalancing;
126   static int replicaAlive;
127   static double startTime;
128   static char*  stage;
129   
130   bool inProgress;
131   bool localDecided;
132   int localMaxIter;
133
134   int notifyReplica;
135   bool softFailureInjected;
136   double lastChkpTime;
137   int chkpCount;
138   double chkpPeriod;
139 private:
140   CkVec<CkCheckPTInfo *> ckTable;
141   CkArrayCheckPTMessage * chkpTable[2];
142
143   int recvCount, peCount;
144   int expectCount, ackCount;
145     /// the processor who initiate the checkpointing
146   int cpStarter;
147   CkVec<int> failedPes;
148   int thisFailedPe;
149
150   int elemCount;
151
152   int recvIterCount;
153
154   int maxIter;
155
156   unsigned int localSeed;
157   unsigned int softLocalSeed;
158     /// to use memory or disk checkpointing
159   int    where;
160 private:
161   inline int isMaster(int pe);
162
163   void failed(int pe);
164   int  totalFailed();
165
166   void sendProcData();
167 };
168
169 // called in initCharm
170 void CkMemRestart(const char *, CkArgMsg *);
171
172 // called by user applications
173 // to start a checkpointing
174 void CkStartMemCheckpoint(CkCallback &cb);
175
176 // true if inside a restarting phase
177 extern "C" int CkInRestarting(); 
178 extern "C" int CkInCheckpointing(); 
179 extern "C" int CkInLdb(); 
180 extern "C" void CkSetInLdb(); 
181 extern "C" void CkResetInLdb();
182 extern "C" int CkReplicaAlive();
183 extern "C" int CkHasCheckpoints();
184
185 extern "C" void CkDieNow();
186
187 #endif