OpenIO SDS C API
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
oio_sds.h
Go to the documentation of this file.
1 /*
2 OpenIO SDS core library
3 Copyright (C) 2015-2018 OpenIO SAS, as part of OpenIO SDS
4 
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 3.0 of the License, or (at your option) any later version.
9 
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14 
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library.
17 */
18 
19 #ifndef OIO_SDS__sdk__oio_sds_h
20 #define OIO_SDS__sdk__oio_sds_h 1
21 
27 #include <stdlib.h>
28 #include <core/oiourl.h>
29 
32 #define OIO_SDS_VERSION 20180716
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 struct oio_sds_s;
39 struct oio_error_s;
40 
45 {
48 
51 
54 
57 
62 
66 };
67 
73 {
76 
80 
83 
87 
90 };
91 
95 typedef void (*oio_sds_info_reporter_f) (void *cb_data,
96  enum oio_sds_content_key_e key, const char *value);
97 
101 typedef void (*oio_sds_property_reporter_f) (void *cb_data,
102  const char *key, const char *value);
103 
110 typedef void (*oio_sds_metachunk_reporter_f) (void *cb_data,
111  unsigned int seq, size_t offset, size_t length);
112 
113 
114 
115 /* API-global --------------------------------------------------------------- */
116 
117 /* OpenIO SDK internally relies on GLib-2.0 logging features,
118  * so this only sets a callback into GLib's system. The calling app
119  * keeps the freedom to change this. */
120 
125 extern volatile int oio_sds_default_autocreate;
126 
127 
132 void oio_log_to_syslog (void);
133 
141 void oio_log_to_stderr (void);
142 
146 void oio_log_nothing (void);
147 
155 void oio_log_more (void);
156 
157 #ifdef OIO_SDS_VERSION
158 
162 unsigned int oio_sds_version (void);
163 #endif /* defined OIO_SDS_VERSION */
164 
165 
166 /* Error management --------------------------------------------------------- */
167 
172 void oio_error_free (struct oio_error_s *e);
173 
178 void oio_error_pfree (struct oio_error_s **pe);
179 
185 int oio_error_code (const struct oio_error_s *e);
186 
192 const char * oio_error_message (const struct oio_error_s *e);
193 
194 
195 
196 /* Client-related features -------------------------------------------------- */
197 
205 struct oio_error_s * oio_sds_init (struct oio_sds_s **out, const char *ns);
206 
207 /* destructor */
208 void oio_sds_free (struct oio_sds_s *sds);
209 
211 void oio_sds_pfree (struct oio_sds_s **psds);
212 
214 int oio_sds_configure (struct oio_sds_s *sds, enum oio_sds_config_e what,
215  void *pv, unsigned int vlen);
216 
217 
218 
219 /* Create / destroy --------------------------------------------------------- */
220 
222 struct oio_error_s* oio_sds_create (struct oio_sds_s *sds,
223  struct oio_url_s *url);
224 
225 struct oio_error_s* oio_sds_delete_container(struct oio_sds_s *sds,
226  struct oio_url_s *url);
227 
228 
229 
230 /* Download ----------------------------------------------------------------- */
231 
234 typedef int (*oio_sds_dl_hook_f) (void*, const unsigned char*, size_t);
235 
237 {
241 };
242 
244 {
245  /* output variable: how many bytes have been read, at all */
246  size_t out_size;
247 
249 
250  union {
251  struct {
252  const char *path;
253  } file;
254  struct {
255  unsigned char *ptr;
256  size_t length;
257  } buffer;
258  struct {
260  void *ctx;
261 
262  /* set 'length' to ((size_t)-1) to mark it unset and allow the
263  * whole content to be downloaded. If set, it must be coherent
264  * with the ranges provided. */
265  size_t length;
266  } hook;
267  } data;
268 };
269 
271 {
272  size_t offset;
273  size_t size;
274 };
275 
277 {
278  struct oio_url_s *url;
279 
284 };
285 
286 struct oio_error_s* oio_sds_download (struct oio_sds_s *sds,
287  struct oio_sds_dl_src_s *src, struct oio_sds_dl_dst_s *dst);
288 
293 struct oio_error_s* oio_sds_download_to_file (struct oio_sds_s *sds,
294  struct oio_url_s *u, const char *local);
295 
306 struct oio_error_s* oio_sds_show_content (struct oio_sds_s *sds,
307  struct oio_url_s *u, void *cb_data,
308  oio_sds_info_reporter_f cb_info,
309  oio_sds_metachunk_reporter_f cb_metachunks,
310  oio_sds_property_reporter_f cb_props);
311 
312 
313 
314 /* Upload ------------------------------------------------------------------- */
315 
317 {
318  struct oio_url_s *url;
319 
320  /* Should the container be autocreated */
321  unsigned int autocreate : 1;
322 
323  /* Should the data be appended to the content in place. When set to 1,
324  * `content_id` and `meta_pos` must be set. */
325  unsigned int append : 1;
326 
327  /* Do a partial upload. When set to 1, `content_id` and `meta_pos` are
328  * mandatory. */
329  unsigned int partial : 1;
330 
331  /* output variable: how many bytes have been uploaded */
332  size_t out_size;
333 
334  /* The unique content name.
335  * Optional when both `partial` and `append` are set to 0.
336  * When set, it MUST be an hexadecimal string (with an even number of
337  * characters). */
338  const char *content_id;
339 
340  /* NULL-terminated array of property keys and values.
341  * Set to NULL when you have no property to set upon the upload. */
342  const char * const * properties;
343 
344  /* Position of the first metachunk that is to be modified */
345  int meta_pos;
346 
347  /* Offset of the first byte of the metachunk, relative to the
348  * beginning of the content, used to check write alignment. */
349  size_t offset;
350 
351  /* Size of the chunks we will send, in bytes.
352  * If set to 0, the default will be used. */
353  size_t chunk_size;
354 };
355 
356 #define OIO_SDS_UPLOAD_DST_INIT {NULL, 0, 0, 0, 0, NULL, NULL, 0, 0, 0}
357 
362 struct oio_sds_ul_s;
363 
365  struct oio_sds_ul_dst_s *dst);
366 
367 struct oio_error_s * oio_sds_upload_prepare (struct oio_sds_ul_s *ul,
368  size_t size);
369 
370 struct oio_error_s * oio_sds_upload_feed (struct oio_sds_ul_s *ul,
371  const unsigned char *buf, size_t len);
372 
373 struct oio_error_s * oio_sds_upload_step (struct oio_sds_ul_s *ul);
374 
375 struct oio_error_s * oio_sds_upload_commit (struct oio_sds_ul_s *ul);
376 
377 struct oio_error_s * oio_sds_upload_abort (struct oio_sds_ul_s *ul);
378 
380 int oio_sds_upload_greedy (struct oio_sds_ul_s *ul);
381 
383 int oio_sds_upload_done (struct oio_sds_ul_s *ul);
384 
387 int oio_sds_upload_needs_ecd(struct oio_sds_ul_s *ul);
388 
389 void oio_sds_upload_clean (struct oio_sds_ul_s *ul);
390 
396 #define OIO_SDS_UL__ERROR ((size_t)-2)
397 #define OIO_SDS_UL__DONE ((size_t)-1)
398 #define OIO_SDS_UL__NODATA ((size_t)0)
399 
400 typedef size_t (*oio_sds_ul_hook_f) (void*, unsigned char *p, size_t s);
401 
403 {
405  /*OIO_UL_SRC_HOOK_RANDOM, */ /* coming soon */
406 };
407 
409 {
411 
412  union {
413  struct {
415  void *ctx;
416  size_t size;
417  } hook;
418  } data;
419 };
420 
421 #define OIO_SDS_UPLOAD_SRC_INIT {.type=0, .data={ .hook={.cb=NULL, .ctx=NULL, .size=0}}}
422 
423 /* works with fully qualified urls (content) and local paths */
424 struct oio_error_s* oio_sds_upload (struct oio_sds_s *sds,
425  struct oio_sds_ul_src_s *src, struct oio_sds_ul_dst_s *dst);
426 
429 struct oio_error_s* oio_sds_upload_from_file (struct oio_sds_s *sds,
430  struct oio_sds_ul_dst_s *dst, const char *local,
431  size_t off, size_t len);
432 
435 struct oio_error_s* oio_sds_upload_from_buffer (struct oio_sds_s *sds,
436  struct oio_sds_ul_dst_s *dst, void *base, size_t len);
437 
438 
439 
440 /* List --------------------------------------------------------------------- */
441 
443 {
444  struct oio_url_s *url;
445  const char *prefix;
446  const char *marker;
447  const char *end;
448 
449  /* 0 means not set */
450  size_t max_items;
451 
452  /* 0 means no set */
453  char delimiter;
454 
455  unsigned char flag_nodeleted : 1;
456  unsigned char flag_allversions : 1;
457  unsigned char flag_properties : 1;
458 };
459 
461 {
462  const char *name;
463  const char *hash;
464  size_t size;
465  size_t version;
467  const char * const *properties;
468 };
469 
471 {
474  void *ctx;
475 
477  int (*on_item) (void *ctx, const struct oio_sds_list_item_s *item);
478 
480  int (*on_prefix) (void *ctx, const char *prefix);
481 
484  int (*on_bound) (void *ctx, const char *next_marker);
485 
487  size_t out_count;
488 
492 };
493 
502 struct oio_error_s* oio_sds_list (struct oio_sds_s *sds,
503  struct oio_sds_list_param_s *param,
504  struct oio_sds_list_listener_s *listener);
505 
506 /* Quota -------------------------------------------------------------------- */
507 
512 {
514  size_t used_bytes;
515 
517  size_t quota_bytes;
518 
521 };
522 
532 struct oio_error_s* oio_sds_get_usage (struct oio_sds_s *sds,
533  struct oio_url_s *u, struct oio_sds_usage_s *out);
534 
535 
536 
537 /* Misc. -------------------------------------------------------------------- */
538 
547 struct oio_error_s* oio_sds_drain(struct oio_sds_s *sds, struct oio_url_s *u);
548 
552 struct oio_error_s* oio_sds_delete (struct oio_sds_s *sds, struct oio_url_s *u);
553 
555 struct oio_error_s* oio_sds_has (struct oio_sds_s *sds, struct oio_url_s *url,
556  int *phas);
557 
558 
559 typedef void (*on_element_f) (void *ctx, const char *key, const char *value);
560 
562 struct oio_error_s* oio_sds_get_content_properties (struct oio_sds_s *sds,
563  struct oio_url_s *url, on_element_f fct, void* ctx);
564 
566 struct oio_error_s* oio_sds_set_content_properties(struct oio_sds_s *sds,
567  struct oio_url_s *url, const char * const *val);
568 
570 struct oio_error_s* oio_sds_get_container_properties (struct oio_sds_s *sds,
571  struct oio_url_s *url, on_element_f fct, void* ctx);
572 
574 struct oio_error_s* oio_sds_set_container_properties(struct oio_sds_s *sds,
575  struct oio_url_s *url, const char * const *val);
576 
583 struct oio_error_s* oio_sds_truncate(struct oio_sds_s *sds,
584  struct oio_url_s *u, size_t size);
585 
586 #ifdef __cplusplus
587 }
588 #endif
589 
591 #endif /*OIO_SDS__sdk__oio_sds_h*/
struct oio_error_s * oio_sds_get_content_properties(struct oio_sds_s *sds, struct oio_url_s *url, on_element_f fct, void *ctx)
Definition: sds.c:2589
int meta_pos
Definition: oio_sds.h:345
unsigned char flag_allversions
Definition: oio_sds.h:456
const char *const * properties
Definition: oio_sds.h:342
int(* on_item)(void *ctx, const struct oio_sds_list_item_s *item)
Definition: oio_sds.h:477
void(* oio_sds_info_reporter_f)(void *cb_data, enum oio_sds_content_key_e key, const char *value)
Definition: oio_sds.h:95
void oio_log_to_syslog(void)
Definition: sds.c:407
Definition: oio_sds.h:239
oio_sds_config_e
Definition: oio_sds.h:44
Definition: oio_sds.h:270
struct oio_error_s * oio_sds_upload_from_buffer(struct oio_sds_s *sds, struct oio_sds_ul_dst_s *dst, void *base, size_t len)
Definition: sds.c:2123
struct oio_error_s * oio_sds_set_content_properties(struct oio_sds_s *sds, struct oio_url_s *url, const char *const *val)
Definition: sds.c:2597
struct oio_error_s * oio_sds_upload(struct oio_sds_s *sds, struct oio_sds_ul_src_s *src, struct oio_sds_ul_dst_s *dst)
Definition: sds.c:2048
Definition: oio_sds.h:82
struct oio_sds_dl_dst_s::@0::@2 buffer
int oio_sds_upload_greedy(struct oio_sds_ul_s *ul)
Definition: sds.c:1353
struct oio_sds_dl_dst_s::@0::@1 file
size_t out_count
Definition: oio_sds.h:487
int oio_error_code(const struct oio_error_s *e)
Definition: sds.c:452
struct oio_error_s * oio_sds_delete(struct oio_sds_s *sds, struct oio_url_s *u)
Definition: sds.c:2444
unsigned char flag_properties
Definition: oio_sds.h:457
struct oio_error_s * oio_sds_upload_from_file(struct oio_sds_s *sds, struct oio_sds_ul_dst_s *dst, const char *local, size_t off, size_t len)
Definition: sds.c:2081
oio_sds_dl_dst_type_e
Definition: oio_sds.h:236
size_t size
Definition: oio_sds.h:464
unsigned int partial
Definition: oio_sds.h:329
struct oio_sds_ul_dst_s * dst
Definition: sds.c:1185
int out_truncated
Definition: oio_sds.h:491
struct oio_error_s * oio_sds_create(struct oio_sds_s *sds, struct oio_url_s *url)
Definition: sds.c:562
size_t out_size
Definition: oio_sds.h:246
void oio_error_free(struct oio_error_s *e)
Definition: sds.c:437
Definition: sds.c:1175
Definition: oio_sds.h:47
void * ctx
Definition: oio_sds.h:260
const char * name
Definition: oio_sds.h:462
const char * marker
Definition: oio_sds.h:446
struct oio_error_s * oio_sds_set_container_properties(struct oio_sds_s *sds, struct oio_url_s *url, const char *const *val)
Definition: sds.c:2575
void oio_sds_upload_clean(struct oio_sds_ul_s *ul)
Definition: sds.c:1308
Definition: oio_sds.h:404
size_t size
Definition: oio_sds.h:416
size_t chunk_size
Definition: oio_sds.h:353
Definition: oio_sds.h:243
const char * content_id
Definition: oio_sds.h:338
unsigned int autocreate
Definition: oio_sds.h:321
size_t max_items
Definition: oio_sds.h:450
size_t offset
Definition: oio_sds.h:349
void * ctx
Definition: oio_sds.h:415
struct oio_error_s * oio_sds_get_usage(struct oio_sds_s *sds, struct oio_url_s *u, struct oio_sds_usage_s *out)
Definition: sds.c:2366
size_t length
Definition: oio_sds.h:256
Definition: oio_sds.h:511
Definition: url.c:30
oio_sds_dl_hook_f cb
Definition: oio_sds.h:259
char delimiter
Definition: oio_sds.h:453
size_t version
Definition: oio_sds.h:465
void oio_error_pfree(struct oio_error_s **pe)
Definition: sds.c:444
const char * oio_error_message(const struct oio_error_s *e)
Definition: sds.c:459
struct oio_sds_ul_src_s::@4::@5 hook
enum oio_sds_ul_src_type_e type
Definition: oio_sds.h:410
size_t offset
Definition: oio_sds.h:272
Definition: oio_sds.h:238
struct oio_error_s * oio_sds_upload_commit(struct oio_sds_ul_s *ul)
Definition: sds.c:1867
struct oio_url_s * url
Definition: oio_sds.h:278
void oio_sds_pfree(struct oio_sds_s **psds)
Definition: sds.c:509
struct oio_error_s * oio_sds_download(struct oio_sds_s *sds, struct oio_sds_dl_src_s *src, struct oio_sds_dl_dst_s *dst)
Definition: sds.c:1136
Definition: oio_sds.h:86
size_t quota_bytes
Definition: oio_sds.h:517
struct oio_error_s * oio_sds_download_to_file(struct oio_sds_s *sds, struct oio_url_s *u, const char *local)
Definition: sds.c:1156
const char *const * properties
Definition: oio_sds.h:467
struct oio_error_s * oio_sds_init(struct oio_sds_s **out, const char *ns)
Definition: sds.c:468
const char * hash
Definition: oio_sds.h:463
struct oio_sds_ul_s * oio_sds_upload_init(struct oio_sds_s *sds, struct oio_sds_ul_dst_s *dst)
Definition: sds.c:1253
struct oio_url_s * url
Definition: oio_sds.h:444
Definition: oio_sds.h:460
size_t(* oio_sds_ul_hook_f)(void *, unsigned char *p, size_t s)
Definition: oio_sds.h:400
Definition: oio_sds.h:316
void(* on_element_f)(void *ctx, const char *key, const char *value)
Definition: oio_sds.h:559
int(* oio_sds_dl_hook_f)(void *, const unsigned char *, size_t)
Definition: oio_sds.h:234
void oio_sds_free(struct oio_sds_s *sds)
Definition: sds.c:495
Definition: oio_sds.h:89
volatile int oio_sds_default_autocreate
Definition: oio_sds.h:56
const char * path
Definition: oio_sds.h:252
unsigned char flag_nodeleted
Definition: oio_sds.h:455
oio_sds_content_key_e
Definition: oio_sds.h:72
void oio_log_more(void)
Definition: sds.c:421
void(* oio_sds_property_reporter_f)(void *cb_data, const char *key, const char *value)
Definition: oio_sds.h:101
Definition: oio_sds.h:50
enum oio_sds_dl_dst_type_e type
Definition: oio_sds.h:248
struct oio_error_s * oio_sds_delete_container(struct oio_sds_s *sds, struct oio_url_s *url)
Definition: sds.c:2457
int(* on_bound)(void *ctx, const char *next_marker)
Definition: oio_sds.h:484
const char * prefix
Definition: oio_sds.h:445
size_t out_size
Definition: oio_sds.h:332
unsigned int oio_sds_version(void)
Definition: sds.c:63
unsigned char * ptr
Definition: oio_sds.h:255
size_t used_bytes
Definition: oio_sds.h:514
Definition: oio_sds.h:61
struct oio_error_s * oio_sds_upload_abort(struct oio_sds_ul_s *ul)
Definition: sds.c:1922
int oio_sds_configure(struct oio_sds_s *sds, enum oio_sds_config_e what, void *pv, unsigned int vlen)
Definition: sds.c:517
struct oio_error_s * oio_sds_has(struct oio_sds_s *sds, struct oio_url_s *url, int *phas)
Definition: sds.c:2520
Definition: oio_sds.h:75
struct oio_error_s * oio_sds_upload_prepare(struct oio_sds_ul_s *ul, size_t size)
Definition: sds.c:1366
Definition: oio_sds.h:53
size_t size
Definition: oio_sds.h:273
struct oio_error_s * oio_sds_list(struct oio_sds_s *sds, struct oio_sds_list_param_s *param, struct oio_sds_list_listener_s *listener)
Definition: sds.c:2283
struct oio_sds_s * sds
Definition: sds.c:1184
struct oio_error_s * oio_sds_show_content(struct oio_sds_s *sds, struct oio_url_s *u, void *cb_data, oio_sds_info_reporter_f cb_info, oio_sds_metachunk_reporter_f cb_metachunks, oio_sds_property_reporter_f cb_props)
Definition: sds.c:2470
Definition: oio_sds.h:240
void(* oio_sds_metachunk_reporter_f)(void *cb_data, unsigned int seq, size_t offset, size_t length)
Definition: oio_sds.h:110
unsigned int append
Definition: oio_sds.h:325
void oio_log_nothing(void)
Definition: sds.c:428
int used_objects
Definition: oio_sds.h:520
int oio_sds_upload_needs_ecd(struct oio_sds_ul_s *ul)
Definition: sds.c:1360
int oio_sds_upload_done(struct oio_sds_ul_s *ul)
Definition: sds.c:1342
oio_sds_ul_src_type_e
Definition: oio_sds.h:402
int(* on_prefix)(void *ctx, const char *prefix)
Definition: oio_sds.h:480
struct oio_error_s * oio_sds_drain(struct oio_sds_s *sds, struct oio_url_s *u)
Definition: sds.c:2432
struct oio_sds_dl_dst_s::@0::@3 hook
struct oio_error_s * oio_sds_truncate(struct oio_sds_s *sds, struct oio_url_s *u, size_t size)
Definition: sds.c:2420
void oio_log_to_stderr(void)
Definition: sds.c:414
Definition: oio_sds.h:442
struct oio_url_s * url
Definition: oio_sds.h:318
oio_sds_ul_hook_f cb
Definition: oio_sds.h:414
struct oio_error_s * oio_sds_upload_step(struct oio_sds_ul_s *ul)
Definition: sds.c:1724
struct oio_error_s * oio_sds_upload_feed(struct oio_sds_ul_s *ul, const unsigned char *buf, size_t len)
Definition: sds.c:1515
void * ctx
Definition: oio_sds.h:474
Definition: oio_sds.h:79
union oio_sds_ul_src_s::@4 data
Definition: sds.c:40
struct oio_error_s * oio_sds_get_container_properties(struct oio_sds_s *sds, struct oio_url_s *url, on_element_f fct, void *ctx)
Definition: sds.c:2567
Definition: oio_sds.h:276
Definition: oio_sds.h:65
Definition: oio_sds.h:470
struct oio_sds_dl_range_s ** ranges
Definition: oio_sds.h:283
const char * end
Definition: oio_sds.h:447
Definition: oio_sds.h:408
union oio_sds_dl_dst_s::@0 data