CernVM-FS  2.12.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  kStateFuse // >= 2.11
108 
109  // Note: kStateOpenFilesXXX was renamed to kStateOpenChunksXXX as of 2.4
110 };
111 
112 
113 struct SavedState {
115  version = 1;
116  size = sizeof(SavedState);
118  state = NULL;
119  }
120 
121  uint32_t version;
122  uint32_t size;
124  void *state;
125 };
126 typedef std::vector<SavedState *> StateList;
127 
128 
129 struct LoadEvent {
131  version = 1;
132  size = sizeof(LoadEvent);
133  timestamp = 0;
134  }
135 
136  uint32_t version;
137  uint32_t size;
138  time_t timestamp;
139  std::string so_version;
140 };
141 typedef std::vector<LoadEvent *> EventList;
142 
143 
159  version(5),
160  size(sizeof(LoaderExports)),
161  boot_time(0),
162  foreground(false),
163  disable_watchdog(false),
164  simple_options_parsing(false),
166  { }
167 
169  for (unsigned i = 0; i < history.size(); ++i)
170  delete history[i];
171  }
172 
173  uint32_t version;
174  uint32_t size;
175  time_t boot_time;
176  std::string loader_version;
178  std::string repository_name;
179  std::string mount_point;
180  std::string config_files;
181  std::string program_name;
184 
185  // added with CernVM-FS 2.1.8 (LoaderExports Version: 2)
187 
188  // added with CernVM-FS 2.2.0 (LoaderExports Version: 3)
190 
191  // added with CernVM-FS 2.4.0 (LoaderExports Version: 4)
192  // As of CernVM-FS 2.7, this has been rebranded from
193  // struct fuse_chan **fuse_channel to
194  // void **fuse_channel_or_session
195  // in order to work with both libfuse2 and libfuse3
197 
198  // Linux only, stores the major:minor internal mountpoint identifier
199  // The identifier is read just after mount from /proc/self/mountinfo
200  // If it cannot be determined (e.g. on macOS), device_id is "0:0".
201  std::string device_id;
202 };
203 
204 
213 struct CvmfsExports {
215  version = 1;
216  size = sizeof(CvmfsExports);
217  fnAltProcessFlavor = NULL;
218  fnInit = NULL;
219  fnSpawn = NULL;
220  fnFini = NULL;
221  fnGetErrorMsg = NULL;
222  fnMaintenanceMode = NULL;
223  fnSaveState = NULL;
224  fnRestoreState = NULL;
225  fnFreeSavedState = NULL;
226  memset(&cvmfs_operations, 0, sizeof(cvmfs_operations));
227  }
228 
229  uint32_t version;
230  uint32_t size;
231  std::string so_version;
232 
233  int (*fnAltProcessFlavor)(int argc, char **argv);
234  int (*fnInit)(const LoaderExports *loader_exports);
235  void (*fnSpawn)();
236  void (*fnFini)();
237  std::string (*fnGetErrorMsg)();
238  bool (*fnMaintenanceMode)(const int fd_progress);
239  bool (*fnSaveState)(const int fd_progress, StateList *saved_states);
240  bool (*fnRestoreState)(const int fd_progress, const StateList &saved_states);
241  void (*fnFreeSavedState)(const int fd_progress,
242  const StateList &saved_states);
243  struct fuse_lowlevel_ops cvmfs_operations;
244 };
245 
250 };
251 
252 Failures Reload(const int fd_progress, const bool stop_and_go,
253  const ReloadMode reload_mode = kReloadLegacy);
254 
255 } // namespace loader
256 
257 #endif // CVMFS_LOADER_H_
std::string repository_name
Definition: loader.h:178
uint32_t version
Definition: loader.h:173
std::string mount_point
Definition: loader.h:179
uint32_t size
Definition: loader.h:122
time_t timestamp
Definition: loader.h:138
EventList history
Definition: loader.h:182
Failures Reload(const int fd_progress, const bool stop_and_go, const ReloadMode reload_mode)
Definition: loader.cc:546
ReloadMode
Definition: loader.h:246
int(* fnAltProcessFlavor)(int argc, char **argv)
Definition: loader.h:233
string * usyslog_path_
Definition: loader.cc:129
std::string so_version
Definition: loader.h:139
void(* fnFini)()
Definition: loader.h:236
StateId state_id
Definition: loader.h:123
const char * Code2Ascii(const Failures error)
Definition: loader.h:58
void ** fuse_channel_or_session
Definition: loader.h:196
std::string program_name
Definition: loader.h:181
std::string loader_version
Definition: loader.h:176
bool(* fnSaveState)(const int fd_progress, StateList *saved_states)
Definition: loader.h:239
std::string so_version
Definition: loader.h:231
bool(* fnRestoreState)(const int fd_progress, const StateList &saved_states)
Definition: loader.h:240
std::string config_files
Definition: loader.h:180
uint32_t version
Definition: loader.h:121
struct fuse_lowlevel_ops cvmfs_operations
Definition: loader.h:243
int(* fnInit)(const LoaderExports *loader_exports)
Definition: loader.h:234
bool simple_options_parsing
Definition: loader.h:189
bool(* fnMaintenanceMode)(const int fd_progress)
Definition: loader.h:238
void(* fnFreeSavedState)(const int fd_progress, const StateList &saved_states)
Definition: loader.h:241
Failures
Definition: loader.h:27
std::string device_id
Definition: loader.h:201
void(* fnSpawn)()
Definition: loader.h:235
std::string(* fnGetErrorMsg)()
Definition: loader.h:237
uint32_t version
Definition: loader.h:229
std::vector< SavedState * > StateList
Definition: loader.h:126
StateList saved_states
Definition: loader.h:183
uint32_t size
Definition: loader.h:137
std::vector< LoadEvent * > EventList
Definition: loader.h:141
uint32_t version
Definition: loader.h:136
StateId
Definition: loader.h:91