CernVM-FS  2.11.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
loader.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_LOADER_H_
6 #define CVMFS_LOADER_H_
7 
8 #define _FILE_OFFSET_BITS 64
9 
10 #include <stdint.h>
11 #include <time.h>
12 
13 #include <cstring>
14 #include <string>
15 #include <vector>
16 
17 #include "duplex_fuse.h"
18 
19 namespace loader {
20 
21 extern std::string *usyslog_path_;
22 
27 enum Failures {
28  kFailOk = 0,
36  kFailIncompatibleVersions, // TODO(jblomer)
54 
56 };
57 
58 inline const char *Code2Ascii(const Failures error) {
59  const char *texts[kFailNumEntries + 1];
60  texts[0] = "OK";
61  texts[1] = "unknown error";
62  texts[2] = "illegal options";
63  texts[3] = "permission denied";
64  texts[4] = "failed to mount";
65  texts[5] = "unable to init loader talk socket";
66  texts[6] = "cannot run FUSE event loop";
67  texts[7] = "failed to load shared library";
68  texts[8] = "incompatible library version";
69  texts[9] = "cache directory/plugin problem";
70  texts[10] = "peering problem";
71  texts[11] = "NFS maps init failure";
72  texts[12] = "quota init failure";
73  texts[13] = "watchdog failure";
74  texts[14] = "talk socket failure";
75  texts[15] = "signature verification failure";
76  texts[16] = "file catalog failure";
77  texts[17] = "maintenance mode";
78  texts[18] = "state saving failure";
79  texts[19] = "state restore failure";
80  texts[20] = "already mounted";
81  texts[21] = "double mount";
82  texts[22] = "history init failure";
83  texts[23] = "proxy auto-discovery failed";
84  texts[24] = "workspace already locked";
85  texts[25] = "revision blacklisted";
86  texts[26] = "no text";
87  return texts[error];
88 }
89 
90 
91 enum StateId {
93  kStateOpenDirs, // >= 2.1.4
94  kStateOpenChunks, // >= 2.1.4, used as of 2.1.15
95  kStateGlueBuffer, // >= 2.1.9
96  kStateInodeGeneration, // >= 2.1.9
98  kStateGlueBufferV2, // >= 2.1.10
99  kStateGlueBufferV3, // >= 2.1.15
100  kStateGlueBufferV4, // >= 2.1.20
101  kStateOpenChunksV2, // >= 2.1.20
102  kStateOpenChunksV3, // >= 2.2.0
103  kStateOpenChunksV4, // >= 2.2.3
104  kStateOpenFiles, // >= 2.4
105  kStateDentryTracker, // >= 2.7 (renamed from kStateNentryTracker in 2.10)
107 
108  // Note: kStateOpenFilesXXX was renamed to kStateOpenChunksXXX as of 2.4
109 };
110 
111 
112 struct SavedState {
114  version = 1;
115  size = sizeof(SavedState);
117  state = NULL;
118  }
119 
120  uint32_t version;
121  uint32_t size;
123  void *state;
124 };
125 typedef std::vector<SavedState *> StateList;
126 
127 
128 struct LoadEvent {
130  version = 1;
131  size = sizeof(LoadEvent);
132  timestamp = 0;
133  }
134 
135  uint32_t version;
136  uint32_t size;
137  time_t timestamp;
138  std::string so_version;
139 };
140 typedef std::vector<LoadEvent *> EventList;
141 
142 
158  version(5),
159  size(sizeof(LoaderExports)),
160  boot_time(0),
161  foreground(false),
162  disable_watchdog(false),
163  simple_options_parsing(false),
165  { }
166 
168  for (unsigned i = 0; i < history.size(); ++i)
169  delete history[i];
170  }
171 
172  uint32_t version;
173  uint32_t size;
174  time_t boot_time;
175  std::string loader_version;
177  std::string repository_name;
178  std::string mount_point;
179  std::string config_files;
180  std::string program_name;
183 
184  // added with CernVM-FS 2.1.8 (LoaderExports Version: 2)
186 
187  // added with CernVM-FS 2.2.0 (LoaderExports Version: 3)
189 
190  // added with CernVM-FS 2.4.0 (LoaderExports Version: 4)
191  // As of CernVM-FS 2.7, this has been rebranded from
192  // struct fuse_chan **fuse_channel to
193  // void **fuse_channel_or_session
194  // in order to work with both libfuse2 and libfuse3
196 
197  // Linux only, stores the major:minor internal mountpoint identifier
198  // The identifier is read just after mount from /proc/self/mountinfo
199  // If it cannot be determined (e.g. on macOS), device_id is "0:0".
200  std::string device_id;
201 };
202 
203 
212 struct CvmfsExports {
214  version = 1;
215  size = sizeof(CvmfsExports);
216  fnAltProcessFlavor = NULL;
217  fnInit = NULL;
218  fnSpawn = NULL;
219  fnFini = NULL;
220  fnGetErrorMsg = NULL;
221  fnMaintenanceMode = NULL;
222  fnSaveState = NULL;
223  fnRestoreState = NULL;
224  fnFreeSavedState = NULL;
225  memset(&cvmfs_operations, 0, sizeof(cvmfs_operations));
226  }
227 
228  uint32_t version;
229  uint32_t size;
230  std::string so_version;
231 
232  int (*fnAltProcessFlavor)(int argc, char **argv);
233  int (*fnInit)(const LoaderExports *loader_exports);
234  void (*fnSpawn)();
235  void (*fnFini)();
236  std::string (*fnGetErrorMsg)();
237  bool (*fnMaintenanceMode)(const int fd_progress);
238  bool (*fnSaveState)(const int fd_progress, StateList *saved_states);
239  bool (*fnRestoreState)(const int fd_progress, const StateList &saved_states);
240  void (*fnFreeSavedState)(const int fd_progress,
241  const StateList &saved_states);
242  struct fuse_lowlevel_ops cvmfs_operations;
243 };
244 
245 Failures Reload(const int fd_progress, const bool stop_and_go);
246 
247 } // namespace loader
248 
249 #endif // CVMFS_LOADER_H_
std::string repository_name
Definition: loader.h:177
Failures Reload(const int fd_progress, const bool stop_and_go)
Definition: loader.cc:546
uint32_t version
Definition: loader.h:172
std::string mount_point
Definition: loader.h:178
uint32_t size
Definition: loader.h:121
time_t timestamp
Definition: loader.h:137
EventList history
Definition: loader.h:181
int(* fnAltProcessFlavor)(int argc, char **argv)
Definition: loader.h:232
string * usyslog_path_
Definition: loader.cc:129
std::string so_version
Definition: loader.h:138
void(* fnFini)()
Definition: loader.h:235
StateId state_id
Definition: loader.h:122
const char * Code2Ascii(const Failures error)
Definition: loader.h:58
void ** fuse_channel_or_session
Definition: loader.h:195
std::string program_name
Definition: loader.h:180
std::string loader_version
Definition: loader.h:175
bool(* fnSaveState)(const int fd_progress, StateList *saved_states)
Definition: loader.h:238
std::string so_version
Definition: loader.h:230
bool(* fnRestoreState)(const int fd_progress, const StateList &saved_states)
Definition: loader.h:239
std::string config_files
Definition: loader.h:179
uint32_t version
Definition: loader.h:120
struct fuse_lowlevel_ops cvmfs_operations
Definition: loader.h:242
int(* fnInit)(const LoaderExports *loader_exports)
Definition: loader.h:233
bool simple_options_parsing
Definition: loader.h:188
bool(* fnMaintenanceMode)(const int fd_progress)
Definition: loader.h:237
void(* fnFreeSavedState)(const int fd_progress, const StateList &saved_states)
Definition: loader.h:240
Failures
Definition: loader.h:27
std::string device_id
Definition: loader.h:200
void(* fnSpawn)()
Definition: loader.h:234
std::string(* fnGetErrorMsg)()
Definition: loader.h:236
uint32_t version
Definition: loader.h:228
std::vector< SavedState * > StateList
Definition: loader.h:125
StateList saved_states
Definition: loader.h:182
uint32_t size
Definition: loader.h:136
std::vector< LoadEvent * > EventList
Definition: loader.h:140
uint32_t version
Definition: loader.h:135
StateId
Definition: loader.h:91