CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
jobinfo.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_NETWORK_JOBINFO_H_
6 #define CVMFS_NETWORK_JOBINFO_H_
7 
8 #include <poll.h>
9 #include <pthread.h>
10 #include <stdint.h>
11 #include <unistd.h>
12 
13 #include <cstdio>
14 #include <map>
15 #include <set>
16 #include <string>
17 #include <vector>
18 
20 #include "crypto/hash.h"
21 #include "duplex_curl.h"
22 #include "network/network_errors.h"
23 #include "network/sink.h"
24 #include "network/sink_file.h"
25 #include "network/sink_mem.h"
26 #include "network/sink_path.h"
27 #include "util/pipe.h"
28 #include "util/tube.h"
29 
30 class InterruptCue;
31 
32 namespace download {
33 
38 };
39 
48  char *data;
49  size_t size;
51 
53  : data(NULL), size(0), action(xact) { }
54  DataTubeElement(char *mov_data, size_t xsize, DataTubeAction xact)
55  : data(mov_data), size(xsize), action(xact) { }
56 
57  ~DataTubeElement() { delete data; }
58 };
59 
63 class JobInfo {
64  private:
66  int64_t id_;
72  const std::string *url_;
78  pid_t pid_;
79  uid_t uid_;
80  gid_t gid_;
81  void *cred_data_; // Per-transfer credential data
85  const std::string *extra_info_;
86 
87  // Allow byte ranges to be specified.
89  off_t range_size_;
90 
91  // Internal state
92  CURL *curl_handle_;
93  curl_slist *headers_;
94  char *info_header_;
98  z_stream zstream_;
100  std::string proxy_;
101  std::string link_;
102  bool nocache_;
105  unsigned char num_used_proxies_;
106  unsigned char num_used_metalinks_;
107  unsigned char num_used_hosts_;
108  unsigned char num_retries_;
109  unsigned backoff_ms_;
112 
113  // Don't fail-over proxies on download errors. default = false
115 
116  // TODO(heretherebedragons) c++11 allows to delegate constructors (N1986)
117  // Replace Init() with JobInfo() that is called by the other constructors
118  void Init();
119 
120  public:
124  JobInfo(const std::string *u, const bool c, const bool ph,
125  const shash::Any *h, cvmfs::Sink *s);
126 
130  JobInfo(const std::string *u, const bool ph);
131 
134  data_tube_.Destroy();
135  }
136 
139  }
140 
142 
143  void CreateDataTube() {
144  // TODO(heretherebedragons) change to weighted queue
146  }
147 
148  bool IsValidDataTube() { return data_tube_.IsValid(); }
149 
154  bool IsFileNotFound();
155 
156  pid_t *GetPidPtr() { return &pid_; }
157  uid_t *GetUidPtr() { return &uid_; }
158  gid_t *GetGidPtr() { return &gid_; }
160  z_stream *GetZstreamPtr() { return &zstream_; }
162  void **GetCredDataPtr() { return &cred_data_; }
163  curl_slist **GetHeadersPtr() { return &headers_; }
164  CURL **GetCurlHandle() { return &curl_handle_; }
167  return pipe_job_results.weak_ref();
168  }
170 
171  const std::string *url() const { return url_; }
172  bool compressed() const { return compressed_; }
173  bool probe_hosts() const { return probe_hosts_; }
174  bool head_request() const { return head_request_; }
175  bool follow_redirects() const { return follow_redirects_; }
176  bool force_nocache() const { return force_nocache_; }
177  pid_t pid() const { return pid_; }
178  uid_t uid() const { return uid_; }
179  gid_t gid() const { return gid_; }
180  void *cred_data() const { return cred_data_; }
182  cvmfs::Sink *sink() const { return sink_; }
183  const shash::Any *expected_hash() const { return expected_hash_; }
184  const std::string *extra_info() const { return extra_info_; }
185 
186  off_t range_offset() const { return range_offset_; }
187  off_t range_size() const { return range_size_; }
188 
189  CURL *curl_handle() const { return curl_handle_; }
190  curl_slist *headers() const { return headers_; }
191  char *info_header() const { return info_header_; }
192  char *tracing_header_pid() const { return tracing_header_pid_; }
193  char *tracing_header_gid() const { return tracing_header_gid_; }
194  char *tracing_header_uid() const { return tracing_header_uid_; }
195  z_stream zstream() const { return zstream_; }
197  std::string proxy() const { return proxy_; }
198  std::string link() const { return link_; }
199  bool nocache() const { return nocache_; }
200  Failures error_code() const { return error_code_; }
201  int http_code() const { return http_code_; }
202  unsigned char num_used_proxies() const { return num_used_proxies_; }
203  unsigned char num_used_metalinks() const { return num_used_metalinks_; }
204  unsigned char num_used_hosts() const { return num_used_hosts_; }
205  unsigned char num_retries() const { return num_retries_; }
206  unsigned backoff_ms() const { return backoff_ms_; }
209  }
211 
212  bool allow_failure() const { return allow_failure_; }
213  int64_t id() const { return id_; }
214 
215 
216  void SetUrl(const std::string *url) { url_ = url; }
222  }
224  void SetPid(pid_t pid) { pid_ = pid; }
225  void SetUid(uid_t uid) { uid_ = uid; }
226  void SetGid(gid_t gid) { gid_ = gid; }
230  }
234  }
235  void SetExtraInfo(const std::string *extra_info) { extra_info_ = extra_info; }
236 
239 
241  void SetHeaders(curl_slist *headers) { headers_ = headers; }
245  };
248  };
251  };
252  void SetZstream(z_stream zstream) { zstream_ = zstream; }
255  }
256  void SetProxy(const std::string &proxy) { proxy_ = proxy; }
257  void SetLink(const std::string &link) { link_ = link; }
258  void SetNocache(bool nocache) { nocache_ = nocache; }
261  void SetNumUsedProxies(unsigned char num_used_proxies) {
263  }
266  }
267  void SetNumUsedHosts(unsigned char num_used_hosts) {
269  }
274  }
277  }
278 
280 
281  // needed for fetch.h ThreadLocalStorage
282  JobInfo() { Init(); }
283 }; // JobInfo
284 
285 } // namespace download
286 
287 #endif // CVMFS_NETWORK_JOBINFO_H_
const std::string * extra_info_
Definition: jobinfo.h:85
const std::string * url_
Definition: jobinfo.h:72
z_stream * GetZstreamPtr()
Definition: jobinfo.h:160
void SetInfoHeader(char *info_header)
Definition: jobinfo.h:242
void SetHashContext(shash::ContextPtr hash_context)
Definition: jobinfo.h:253
shash::ContextPtr * GetHashContextPtr()
Definition: jobinfo.h:165
uid_t uid() const
Definition: jobinfo.h:178
UniquePtr< Pipe< kPipeDownloadJobsResults > > pipe_job_results
Pipe used for the return value.
Definition: jobinfo.h:68
int64_t atomic_int64
Definition: atomic.h:18
bool follow_redirects_
Definition: jobinfo.h:76
bool head_request_
Definition: jobinfo.h:75
bool probe_hosts() const
Definition: jobinfo.h:173
std::string link_
Definition: jobinfo.h:101
T * weak_ref() const
Definition: pointer.h:46
uid_t * GetUidPtr()
Definition: jobinfo.h:157
unsigned backoff_ms_
Definition: jobinfo.h:109
int64_t id() const
Definition: jobinfo.h:213
const shash::Any * expected_hash_
Definition: jobinfo.h:84
curl_slist ** GetHeadersPtr()
Definition: jobinfo.h:163
void SetCurrentHostChainIndex(int current_host_chain_index)
Definition: jobinfo.h:275
UniquePtr< Tube< DataTubeElement > > data_tube_
Definition: jobinfo.h:71
const std::string * url() const
Definition: jobinfo.h:171
void * cred_data() const
Definition: jobinfo.h:180
curl_slist * headers_
Definition: jobinfo.h:93
bool allow_failure() const
Definition: jobinfo.h:212
CURL * curl_handle() const
Definition: jobinfo.h:189
unsigned char num_used_hosts_
Definition: jobinfo.h:107
void SetRangeOffset(off_t range_offset)
Definition: jobinfo.h:237
void SetTracingHeaderGid(char *tracing_header_gid)
Definition: jobinfo.h:246
z_stream zstream_
Definition: jobinfo.h:98
void SetNocache(bool nocache)
Definition: jobinfo.h:258
bool IsValidDataTube()
Definition: jobinfo.h:148
void SetTracingHeaderPid(char *tracing_header_pid)
Definition: jobinfo.h:243
shash::ContextPtr hash_context_
Definition: jobinfo.h:99
Tube< DataTubeElement > * GetDataTubePtr()
Definition: jobinfo.h:169
int64_t id_
Definition: jobinfo.h:66
char * tracing_header_gid() const
Definition: jobinfo.h:193
char * info_header() const
Definition: jobinfo.h:191
static atomic_int64 next_uuid
Definition: jobinfo.h:65
unsigned char num_used_proxies_
Definition: jobinfo.h:105
bool force_nocache() const
Definition: jobinfo.h:176
void SetZstream(z_stream zstream)
Definition: jobinfo.h:252
int current_metalink_chain_index_
Definition: jobinfo.h:110
void SetLink(const std::string &link)
Definition: jobinfo.h:257
off_t range_offset() const
Definition: jobinfo.h:186
bool force_nocache_
Definition: jobinfo.h:77
void SetInterruptCue(InterruptCue *interrupt_cue)
Definition: jobinfo.h:228
bool nocache() const
Definition: jobinfo.h:199
bool IsFileNotFound()
Definition: jobinfo.cc:33
unsigned char num_used_hosts() const
Definition: jobinfo.h:204
bool follow_redirects() const
Definition: jobinfo.h:175
std::string proxy_
Definition: jobinfo.h:100
int http_code() const
Definition: jobinfo.h:201
void CreateDataTube()
Definition: jobinfo.h:143
void SetNumUsedMetalinks(unsigned char num_used_metalinks)
Definition: jobinfo.h:264
Pipe< kPipeDownloadJobsResults > * GetPipeJobResultPtr()
Definition: jobinfo.h:166
void SetHttpCode(int http_code)
Definition: jobinfo.h:260
DataTubeAction action
Definition: jobinfo.h:50
bool head_request() const
Definition: jobinfo.h:174
unsigned char num_retries() const
Definition: jobinfo.h:205
bool IsValidPipeJobResults()
Definition: jobinfo.h:141
off_t range_size() const
Definition: jobinfo.h:187
void SetCurrentMetalinkChainIndex(int current_metalink_chain_index)
Definition: jobinfo.h:272
bool compressed() const
Definition: jobinfo.h:172
cvmfs::Sink * sink() const
Definition: jobinfo.h:182
char * tracing_header_uid_
Definition: jobinfo.h:97
cvmfs::Sink * sink_
Definition: jobinfo.h:83
gid_t gid() const
Definition: jobinfo.h:179
DataTubeElement(char *mov_data, size_t xsize, DataTubeAction xact)
Definition: jobinfo.h:54
void SetForceNocache(bool force_nocache)
Definition: jobinfo.h:223
char * tracing_header_pid_
Definition: jobinfo.h:95
std::string proxy() const
Definition: jobinfo.h:197
void SetUid(uid_t uid)
Definition: jobinfo.h:225
void SetPid(pid_t pid)
Definition: jobinfo.h:224
std::string link() const
Definition: jobinfo.h:198
bool compressed_
Definition: jobinfo.h:73
void SetNumRetries(unsigned char num_retries)
Definition: jobinfo.h:270
void SetExpectedHash(const shash::Any *expected_hash)
Definition: jobinfo.h:232
void * cred_data_
Definition: jobinfo.h:81
InterruptCue * interrupt_cue() const
Definition: jobinfo.h:181
InterruptCue ** GetInterruptCuePtr()
Definition: jobinfo.h:159
shash::ContextPtr hash_context() const
Definition: jobinfo.h:196
char * tracing_header_gid_
Definition: jobinfo.h:96
bool allow_failure_
Definition: jobinfo.h:114
DataTubeAction
Definition: jobinfo.h:34
Failures error_code_
Definition: jobinfo.h:103
void SetRangeSize(off_t range_size)
Definition: jobinfo.h:238
DataTubeElement(DataTubeAction xact)
Definition: jobinfo.h:52
void SetCompressed(bool compressed)
Definition: jobinfo.h:217
char * tracing_header_uid() const
Definition: jobinfo.h:194
off_t range_offset_
Definition: jobinfo.h:88
Failures error_code() const
Definition: jobinfo.h:200
bool IsValid() const
Definition: pointer.h:47
void ** GetCredDataPtr()
Definition: jobinfo.h:162
off_t range_size_
Definition: jobinfo.h:89
pid_t * GetPidPtr()
Definition: jobinfo.h:156
char * info_header_
Definition: jobinfo.h:94
void SetErrorCode(Failures error_code)
Definition: jobinfo.h:259
void SetNumUsedProxies(unsigned char num_used_proxies)
Definition: jobinfo.h:261
void SetGid(gid_t gid)
Definition: jobinfo.h:226
void SetHeadRequest(bool head_request)
Definition: jobinfo.h:219
int current_metalink_chain_index() const
Definition: jobinfo.h:207
void SetSink(cvmfs::Sink *sink)
Definition: jobinfo.h:231
unsigned char num_retries_
Definition: jobinfo.h:108
void SetExtraInfo(const std::string *extra_info)
Definition: jobinfo.h:235
CURL ** GetCurlHandle()
Definition: jobinfo.h:164
InterruptCue * interrupt_cue_
Definition: jobinfo.h:82
void CreatePipeJobResults()
Definition: jobinfo.h:137
unsigned char num_used_metalinks() const
Definition: jobinfo.h:203
void SetCurlHandle(CURL *curl_handle)
Definition: jobinfo.h:240
void SetTracingHeaderUid(char *tracing_header_uid)
Definition: jobinfo.h:249
int current_host_chain_index_
Definition: jobinfo.h:111
curl_slist * headers() const
Definition: jobinfo.h:190
const shash::Any * expected_hash() const
Definition: jobinfo.h:183
void SetUrl(const std::string *url)
Definition: jobinfo.h:216
void SetCredData(void *cred_data)
Definition: jobinfo.h:227
CURL * curl_handle_
Definition: jobinfo.h:92
const std::string * extra_info() const
Definition: jobinfo.h:184
Definition: tube.h:39
void SetProxy(const std::string &proxy)
Definition: jobinfo.h:256
z_stream zstream() const
Definition: jobinfo.h:195
unsigned backoff_ms() const
Definition: jobinfo.h:206
pid_t pid() const
Definition: jobinfo.h:177
unsigned char num_used_proxies() const
Definition: jobinfo.h:202
int current_host_chain_index() const
Definition: jobinfo.h:210
void SetAllowFailure(bool allow_failure)
Definition: jobinfo.h:279
void SetProbeHosts(bool probe_hosts)
Definition: jobinfo.h:218
void SetNumUsedHosts(unsigned char num_used_hosts)
Definition: jobinfo.h:267
bool probe_hosts_
Definition: jobinfo.h:74
void SetHeaders(curl_slist *headers)
Definition: jobinfo.h:241
char * tracing_header_pid() const
Definition: jobinfo.h:192
void SetBackoffMs(unsigned backoff_ms)
Definition: jobinfo.h:271
void SetFollowRedirects(bool follow_redirects)
Definition: jobinfo.h:220
unsigned char num_used_metalinks_
Definition: jobinfo.h:106
void Destroy()
Definition: pointer.h:53
Failures * GetErrorCodePtr()
Definition: jobinfo.h:161
gid_t * GetGidPtr()
Definition: jobinfo.h:158