ARC SDK
DataStatus.h
1 // -*- indent-tabs-mode: nil -*-
2 
3 #ifndef __ARC_DATASTATUS_H__
4 #define __ARC_DATASTATUS_H__
5 
6 #include <iostream>
7 #include <string>
8 #include <errno.h>
9 
10 #include <arc/StringConv.h>
11 #include <arc/Utils.h>
12 
13 namespace Arc {
14 
15 #define DataStatusRetryableBase (100)
16 
17 #define DataStatusErrnoBase 1000
18 #define EARCTRANSFERTIMEOUT (DataStatusErrnoBase + 1) // Transfer timed out
19 #define EARCCHECKSUM (DataStatusErrnoBase + 2) // Checksum mismatch
20 #define EARCLOGIC (DataStatusErrnoBase + 3) // Bad logic, eg calling StartWriting on a
21  // DataPoint currently reading
22 #define EARCRESINVAL (DataStatusErrnoBase + 4) // All results obtained from a service are invalid
23 #define EARCSVCTMP (DataStatusErrnoBase + 5) // Temporary service error
24 #define EARCSVCPERM (DataStatusErrnoBase + 6) // Permanent service error
25 #define EARCUIDSWITCH (DataStatusErrnoBase + 7) // Error switching uid
26 #define EARCREQUESTTIMEOUT (DataStatusErrnoBase + 8) // Request made to remote service timed out
27 #define EARCOTHER (DataStatusErrnoBase + 9) // Other / unknown error
28 
29 #define DataStatusErrnoMax EARCOTHER
30 
32 
54  class DataStatus {
55 
56  public:
57 
59 
65  // Order is important! Must be kept synchronised with status_string[]
66 
69 
72 
75 
78 
81 
84 
87 
90 
93 
96 
99 
102 
105 
108 
111 
114 
117 
120 
123 
126 
129 
132 
135 
138 
141 
146 
151 
154 
157 
160 
163 
166 
169 
172 
175 
178 
181 
184 
187 
190 
193 
196 
199 
200  // These Retryable error codes are deprecated but kept for backwards
201  // compatibility. They will be removed in a future major release.
202  // Instead of these codes the corresponding non-retryable code should be
203  // used with an errno, and this is used to determine whether the error is
204  // retryable.
205  ReadAcquireErrorRetryable = DataStatusRetryableBase+ReadAcquireError,
206  WriteAcquireErrorRetryable = DataStatusRetryableBase+WriteAcquireError,
207  ReadResolveErrorRetryable = DataStatusRetryableBase+ReadResolveError,
208  WriteResolveErrorRetryable = DataStatusRetryableBase+WriteResolveError,
209  ReadStartErrorRetryable = DataStatusRetryableBase+ReadStartError,
210  WriteStartErrorRetryable = DataStatusRetryableBase+WriteStartError,
211  ReadErrorRetryable = DataStatusRetryableBase+ReadError,
212  WriteErrorRetryable = DataStatusRetryableBase+WriteError,
213  TransferErrorRetryable = DataStatusRetryableBase+TransferError,
214  ReadStopErrorRetryable = DataStatusRetryableBase+ReadStopError,
215  WriteStopErrorRetryable = DataStatusRetryableBase+WriteStopError,
216  PreRegisterErrorRetryable = DataStatusRetryableBase+PreRegisterError,
217  PostRegisterErrorRetryable = DataStatusRetryableBase+PostRegisterError,
218  UnregisterErrorRetryable = DataStatusRetryableBase+UnregisterError,
219  CacheErrorRetryable = DataStatusRetryableBase+CacheError,
220  DeleteErrorRetryable = DataStatusRetryableBase+DeleteError,
221  CheckErrorRetryable = DataStatusRetryableBase+CheckError,
222  ListErrorRetryable = DataStatusRetryableBase+ListError,
223  StatErrorRetryable = DataStatusRetryableBase+StatError,
224  StageErrorRetryable = DataStatusRetryableBase+StageError,
225  ReadPrepareErrorRetryable = DataStatusRetryableBase+ReadPrepareError,
226  WritePrepareErrorRetryable = DataStatusRetryableBase+WritePrepareError,
227  ReadFinishErrorRetryable = DataStatusRetryableBase+ReadFinishError,
228  WriteFinishErrorRetryable = DataStatusRetryableBase+WriteFinishError,
230  RenameErrorRetryable = DataStatusRetryableBase+RenameError,
231  GenericErrorRetryable = DataStatusRetryableBase+GenericError
232  };
233 
235 
239  DataStatus(const DataStatusType& status, std::string desc="")
240  : status(status), Errno(0), desc(desc) {
241  if (!Passed()) Errno = EARCOTHER;
242  }
243 
245 
252  DataStatus(const DataStatusType& status, int error_no, const std::string& desc="")
253  : status(status), Errno(error_no), desc(desc) {}
254 
257  : status(Success), Errno(0), desc("") {}
258 
260  bool operator==(const DataStatusType& s) {
261  return status == s;
262  }
264  bool operator==(const DataStatus& s) {
265  return status == s.status;
266  }
267 
269  bool operator!=(const DataStatusType& s) {
270  return status != s;
271  }
273  bool operator!=(const DataStatus& s) {
274  return status != s.status;
275  }
276 
278 
282  status = s;
283  Errno = 0;
284  if (!Passed()) Errno = EARCOTHER;
285  desc.clear();
286  return *this;
287  }
288 
289  DataStatus& operator=(const DataStatus& s) {
290  status = s.status;
291  Errno = s.Errno;
292  desc = s.desc;
293  return *this;
294  }
295 
297  bool operator!() const {
298  return (status != Success) && (status != SuccessCached);
299  }
301  operator bool() const {
302  return (status == Success) || (status == SuccessCached);
303  }
304 
306  bool Passed() const {
307  return ((status == Success) || (status == NotSupportedForDirectDataPointsError) ||
308  (status == ReadPrepareWait) || (status == WritePrepareWait) ||
309  (status == SuccessCached) || (status == SuccessCancelled));
310  }
311 
313 
317  bool Retryable() const;
318 
321  return status;
322  }
323 
325  void SetErrno(int error_no) {
326  Errno = error_no;
327  }
328 
330  int GetErrno() const {
331  return Errno;
332  }
333 
335  std::string GetStrErrno() const;
336 
338  void SetDesc(const std::string& d) {
339  desc = trim(d);
340  }
341 
343  std::string GetDesc() const {
344  return desc;
345  }
346 
348  operator std::string(void) const;
349 
350  private:
351 
353  DataStatusType status;
355  int Errno;
357  std::string desc;
358 
359  };
360 
362 
363  inline std::ostream& operator<<(std::ostream& o, const DataStatus& d) {
364  return (o << ((std::string)d));
365  }
366 } // namespace Arc
367 
368 
369 #endif // __ARC_DATASTATUS_H__
Arc namespace contains all core ARC classes.
Definition: ArcConfig.h:11
Inconsistent metadata.
Definition: DataStatus.h:162
Definition: DataStatus.h:231
Definition: DataStatus.h:207
Wait for destination to be prepared.
Definition: DataStatus.h:174
Definition: DataStatus.h:220
Can&#39;t write to destination.
Definition: DataStatus.h:86
Operation completed successfully.
Definition: DataStatus.h:68
Error in caching procedure.
Definition: DataStatus.h:113
DataStatusType
Status codes.
Definition: DataStatus.h:64
Error due to provided credentials are expired.
Definition: DataStatus.h:116
int GetErrno() const
Get the error number.
Definition: DataStatus.h:330
Can&#39;t rename URL.
Definition: DataStatus.h:186
bool operator==(const DataStatusType &s)
Returns true if this status type matches s.
Definition: DataStatus.h:260
Definition: DataStatus.h:227
bool operator==(const DataStatus &s)
Returns true if this status type matches the status type of s.
Definition: DataStatus.h:264
Definition: DataStatus.h:228
Definition: DataStatus.h:230
DataStatusType GetStatus() const
Get error status code.
Definition: DataStatus.h:320
Unregistration of index service URL failed.
Definition: DataStatus.h:110
bool Retryable() const
Returns true if the error was temporary and could be retried.
Definition: DataStatus.h:205
Status code returned by many DataPoint methods.
Definition: DataStatus.h:54
std::string GetDesc() const
Get a detailed description of the status.
Definition: DataStatus.h:343
Resolving of index service URL for source failed.
Definition: DataStatus.h:77
First stage of registration of index service URL failed.
Definition: DataStatus.h:104
DataStatus()
Construct a new DataStatus with fields initialised to success states.
Definition: DataStatus.h:256
Destination is bad URL or can&#39;t be used due to some reason.
Definition: DataStatus.h:74
DataStatus(const DataStatusType &status, std::string desc="")
Constructor to use when errno-like information is not available.
Definition: DataStatus.h:239
Access check failed.
Definition: DataStatus.h:140
Source is bad URL or can&#39;t be used due to some reason.
Definition: DataStatus.h:71
Last stage of registration of index service URL failed.
Definition: DataStatus.h:107
Definition: DataStatus.h:210
bool operator!() const
Returns true if status type is not a success value.
Definition: DataStatus.h:297
Can&#39;t prepare destination.
Definition: DataStatus.h:171
void SetDesc(const std::string &d)
Set a detailed description of the status, removing trailing new line if present.
Definition: DataStatus.h:338
No valid location available.
Definition: DataStatus.h:122
Error in OS.
Definition: DataStatus.h:156
bool operator!=(const DataStatusType &s)
Returns true if this status type does not match s.
Definition: DataStatus.h:269
Wait for source to be prepared.
Definition: DataStatus.h:168
Can&#39;t read from source.
Definition: DataStatus.h:83
Can&#39;t create directory.
Definition: DataStatus.h:183
Object initialization failed.
Definition: DataStatus.h:153
Can&#39;t finish source.
Definition: DataStatus.h:177
Definition: DataStatus.h:213
std::string trim(const std::string &str, const char *sep=NULL)
This method removes given separators from the beginning and the end of the string.
std::ostream & operator<<(std::ostream &, const Period &)
Prints a Period-object to the given ostream – typically cout.
Can&#39;t finish destination.
Definition: DataStatus.h:180
Definition: DataStatus.h:219
Resolving of index service URL for destination failed.
Definition: DataStatus.h:80
Definition: DataStatus.h:145
Definition: DataStatus.h:223
Definition: DataStatus.h:214
Definition: DataStatus.h:218
Definition: DataStatus.h:216
Undefined.
Definition: DataStatus.h:198
Failed while finishing writing to destination.
Definition: DataStatus.h:101
Definition: DataStatus.h:221
Error deleting location or URL.
Definition: DataStatus.h:119
DataPoint is already writing.
Definition: DataStatus.h:137
bool Passed() const
Returns true if no error occurred.
Definition: DataStatus.h:306
std::string GetStrErrno() const
Get text description of the error number.
Failed while finishing reading from source.
Definition: DataStatus.h:98
Data was already cached.
Definition: DataStatus.h:189
Definition: DataStatus.h:215
General error which doesn&#39;t fit any other error.
Definition: DataStatus.h:195
bool operator!=(const DataStatus &s)
Returns true if this status type does not match the status type of s.
Definition: DataStatus.h:273
Definition: DataStatus.h:209
Feature is unimplemented.
Definition: DataStatus.h:131
Failed while writing to destination.
Definition: DataStatus.h:92
Definition: DataStatus.h:224
File/dir stating failed.
Definition: DataStatus.h:148
Operation was cancelled successfully.
Definition: DataStatus.h:192
Directory listing failed.
Definition: DataStatus.h:143
Failed while reading from source.
Definition: DataStatus.h:89
Can&#39;t prepare source.
Definition: DataStatus.h:165
Definition: DataStatus.h:211
void SetErrno(int error_no)
Set the error number.
Definition: DataStatus.h:325
Operation has no sense for this kind of URL.
Definition: DataStatus.h:128
DataPoint is already reading.
Definition: DataStatus.h:134
Definition: DataStatus.h:225
Failed while transfering data (mostly timeout)
Definition: DataStatus.h:95
No valid location available.
Definition: DataStatus.h:125
Staging error.
Definition: DataStatus.h:159
DataStatus & operator=(const DataStatusType &s)
Assignment operator.
Definition: DataStatus.h:281
Definition: DataStatus.h:150
Definition: DataStatus.h:212
Definition: DataStatus.h:222
DataStatus(const DataStatusType &status, int error_no, const std::string &desc="")
Construct a new DataStatus with errno and optional text description.
Definition: DataStatus.h:252