HOPS
HOPS class reference
MHO_LockFileHandler.hh
Go to the documentation of this file.
1 #ifndef MHO_LockFileHandler_HH__
2 #define MHO_LockFileHandler_HH__
3 
4 #include <csignal>
5 #include <cstdlib>
6 #include <unistd.h>
7 
9 #include "MHO_Tokenizer.hh"
10 
11 //return error codes
12 #define LOCK_FILESET_FAIL -6
13 #define LOCK_TIMEOUT_ERROR -5
14 #define LOCK_FILE_ERROR -4
15 #define LOCK_STALE_ERROR -3
16 #define LOCK_PARSE_ERROR -2
17 #define LOCK_PROCESS_NO_PRIORITY -1
18 #define LOCK_STATUS_OK 0
19 #define LOCK_PROCESS_HAS_PRIORITY 1
20 
21 //number of chars in lock file name
22 #define MAX_LOCKNAME_LEN 512
23 
24 namespace hops
25 {
26 
44 {
45  int validity;
46  unsigned int seq_number;
47  unsigned int pid;
48  unsigned long int time_sec;
49  unsigned long int time_usec;
50  char hostname[256];
53 };
54 
59 {
60  public:
61  //since this is a singleton we need to remove ability to copy/move
66 
74  {
75  static MHO_LockFileHandler instance;
76  return instance;
77  }
78 
84  void EnableLegacyMode() { fEnableLegacyMode = true; };
85 
89  void DisableLegacyMode() { fEnableLegacyMode = false; };
90 
98  int WaitForWriteLock(std::string directory, int& next_seq_no);
102  void RemoveWriteLock();
103 
104  private:
111  static void HandleSignal(int signal_value);
112 
119  static void init_lockfile_data(lockfile_data* data);
120 
129  static int parse_lockfile_name(char* lockfile_name_base, lockfile_data* result);
130 
141  static int create_lockfile(const char* directory, char* lockfile_name, lockfile_data* lock_data, int max_seq_no);
142 
150  static int check_stale(lockfile_data* other);
151 
160  static int lock_has_priority(lockfile_data* ours, lockfile_data* other);
171  static int at_front(const char* directory, char* lockfile_name, lockfile_data* lock_data, int cand_seq_no);
172 
179  static void remove_lockfile(lockfile_data* other);
180 
187  int wait_for_write_lock(int& next_seq_no);
188 
195  int get_max_seq_number(std::string dir);
196 
202  void SetDirectory(std::string dir);
203 
205  {
206  //register the various signals
207  std::signal(SIGINT, &HandleSignal);
208  std::signal(SIGTERM, &HandleSignal);
209  std::signal(SIGQUIT, &HandleSignal);
210  std::signal(SIGSEGV, &HandleSignal);
211  std::signal(SIGBUS, &HandleSignal);
212  std::signal(SIGHUP, &HandleSignal);
213  std::signal(SIGABRT, &HandleSignal);
214  fDirectory = "./";
215  fEnableLegacyMode = true;
216  fTokenizer.SetDelimiter(".");
217  fTokenizer.SetIncludeEmptyTokensFalse();
218  init_lockfile_data(&fProcessLockFileData);
219  };
220 
221  virtual ~MHO_LockFileHandler(){};
222 
223  //info of the current process
224  lockfile_data fProcessLockFileData;
225  //directory interface
226  std::string fDirectory;
227  MHO_DirectoryInterface fDirInterface;
228  MHO_Tokenizer fTokenizer;
229 
230  bool fEnableLegacyMode;
231 };
232 
233 } // namespace hops
234 
235 #endif
#define MAX_LOCKNAME_LEN
Definition: MHO_LockFileHandler.hh:22
Class MHO_LockFileHandler uses the singleton pattern.
Definition: MHO_LockFileHandler.hh:59
MHO_LockFileHandler & operator=(MHO_LockFileHandler &&)=delete
void RemoveWriteLock()
Removes a write lock from the file.
Definition: MHO_LockFileHandler.cc:52
void DisableLegacyMode()
Disables legacy mode by setting fEnableLegacyMode to false.
Definition: MHO_LockFileHandler.hh:89
void EnableLegacyMode()
configure the lock handler to write legacy type_2xx file (e.g. GE.X.1.ABCDEF) naming convention....
Definition: MHO_LockFileHandler.hh:84
static MHO_LockFileHandler & GetInstance()
provide public access to the only static instance
Definition: MHO_LockFileHandler.hh:73
MHO_LockFileHandler(MHO_LockFileHandler &&)=delete
MHO_LockFileHandler & operator=(MHO_LockFileHandler const &)=delete
int WaitForWriteLock(std::string directory, int &next_seq_no)
Waits for and acquires a write lock on the specified directory, setting it as the current directory.
Definition: MHO_LockFileHandler.cc:57
MHO_LockFileHandler(MHO_LockFileHandler const &)=delete
void SetIncludeEmptyTokensFalse()
Definition: MHO_Tokenizer.cc:30
void SetDelimiter(const std::string &aDelim)
Definition: MHO_Tokenizer.cc:70
Definition: fit_gsl.h:54
Definition: MHO_AdhocFlagging.hh:18
unsigned int seq_number
Definition: MHO_LockFileHandler.hh:46
char hostname[256]
Definition: MHO_LockFileHandler.hh:50
char active_directory[MAX_LOCKNAME_LEN]
Definition: MHO_LockFileHandler.hh:51
unsigned int pid
Definition: MHO_LockFileHandler.hh:47
unsigned long int time_usec
Definition: MHO_LockFileHandler.hh:49
unsigned long int time_sec
Definition: MHO_LockFileHandler.hh:48
int validity
Definition: MHO_LockFileHandler.hh:45
char lockfile_name[MAX_LOCKNAME_LEN]
Definition: MHO_LockFileHandler.hh:52
struct lockfile_data - struct for holding data about the lock file's creation
Definition: MHO_LockFileHandler.hh:44
Definition: write_lock_mechanism.h:34