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 
67 };
68 
74 {
77 
81 
84 
88 
91 };
92 
96 typedef void (*oio_sds_info_reporter_f) (void *cb_data,
97  enum oio_sds_content_key_e key, const char *value);
98 
102 typedef void (*oio_sds_property_reporter_f) (void *cb_data,
103  const char *key, const char *value);
104 
111 typedef void (*oio_sds_metachunk_reporter_f) (void *cb_data,
112  unsigned int seq, size_t offset, size_t length);
113 
114 
115 
116 /* API-global --------------------------------------------------------------- */
117 
118 /* OpenIO SDK internally relies on GLib-2.0 logging features,
119  * so this only sets a callback into GLib's system. The calling app
120  * keeps the freedom to change this. */
121 
126 extern volatile int oio_sds_default_autocreate;
127 
128 
133 void oio_log_to_syslog (void);
134 
142 void oio_log_to_stderr (void);
143 
147 void oio_log_nothing (void);
148 
156 void oio_log_more (void);
157 
158 #ifdef OIO_SDS_VERSION
159 
163 unsigned int oio_sds_version (void);
164 #endif /* defined OIO_SDS_VERSION */
165 
166 
167 /* Error management --------------------------------------------------------- */
168 
173 void oio_error_free (struct oio_error_s *e);
174 
179 void oio_error_pfree (struct oio_error_s **pe);
180 
186 int oio_error_code (const struct oio_error_s *e);
187 
193 const char * oio_error_message (const struct oio_error_s *e);
194 
195 
196 
197 /* Client-related features -------------------------------------------------- */
198 
206 struct oio_error_s * oio_sds_init (struct oio_sds_s **out, const char *ns);
207 
208 /* destructor */
209 void oio_sds_free (struct oio_sds_s *sds);
210 
212 void oio_sds_pfree (struct oio_sds_s **psds);
213 
215 int oio_sds_configure (struct oio_sds_s *sds, enum oio_sds_config_e what,
216  void *pv, unsigned int vlen);
217 
218 
219 
220 /* Create / destroy --------------------------------------------------------- */
221 
223 struct oio_error_s* oio_sds_create (struct oio_sds_s *sds,
224  struct oio_url_s *url);
225 
226 struct oio_error_s* oio_sds_delete_container(struct oio_sds_s *sds,
227  struct oio_url_s *url);
228 
229 
230 
231 /* Download ----------------------------------------------------------------- */
232 
235 typedef int (*oio_sds_dl_hook_f) (void*, const unsigned char*, size_t);
236 
238 {
242 };
243 
245 {
246  /* output variable: how many bytes have been read, at all */
247  size_t out_size;
248 
250 
251  union {
252  struct {
253  const char *path;
254  } file;
255  struct {
256  unsigned char *ptr;
257  size_t length;
258  } buffer;
259  struct {
261  void *ctx;
262 
263  /* set 'length' to ((size_t)-1) to mark it unset and allow the
264  * whole content to be downloaded. If set, it must be coherent
265  * with the ranges provided. */
266  size_t length;
267  } hook;
268  } data;
269 };
270 
272 {
273  size_t offset;
274  size_t size;
275 };
276 
278 {
279  struct oio_url_s *url;
280 
285 };
286 
287 struct oio_error_s* oio_sds_download (struct oio_sds_s *sds,
288  struct oio_sds_dl_src_s *src, struct oio_sds_dl_dst_s *dst);
289 
294 struct oio_error_s* oio_sds_download_to_file (struct oio_sds_s *sds,
295  struct oio_url_s *u, const char *local);
296 
307 struct oio_error_s* oio_sds_show_content (struct oio_sds_s *sds,
308  struct oio_url_s *u, void *cb_data,
309  oio_sds_info_reporter_f cb_info,
310  oio_sds_metachunk_reporter_f cb_metachunks,
311  oio_sds_property_reporter_f cb_props);
312 
313 
314 
315 /* Upload ------------------------------------------------------------------- */
316 
318 {
319  struct oio_url_s *url;
320 
321  /* Should the container be autocreated */
322  unsigned int autocreate : 1;
323 
324  /* Should the data be appended to the content in place. When set to 1,
325  * `content_id` and `meta_pos` must be set. */
326  unsigned int append : 1;
327 
328  /* Do a partial upload. When set to 1, `content_id` and `meta_pos` are
329  * mandatory. */
330  unsigned int partial : 1;
331 
332  /* output variable: how many bytes have been uploaded */
333  size_t out_size;
334 
335  /* The unique content name.
336  * Optional when both `partial` and `append` are set to 0.
337  * When set, it MUST be an hexadecimal string (with an even number of
338  * characters). */
339  const char *content_id;
340 
341  /* NULL-terminated array of property keys and values.
342  * Set to NULL when you have no property to set upon the upload. */
343  const char * const * properties;
344 
345  /* Position of the first metachunk that is to be modified */
346  int meta_pos;
347 
348  /* Offset of the first byte of the metachunk, relative to the
349  * beginning of the content, used to check write alignment. */
350  size_t offset;
351 
352  /* Size of the chunks we will send, in bytes.
353  * If set to 0, the default will be used. */
354  size_t chunk_size;
355 };
356 
357 #define OIO_SDS_UPLOAD_DST_INIT {NULL, 0, 0, 0, 0, NULL, NULL, 0, 0, 0}
358 
363 struct oio_sds_ul_s;
364 
366  struct oio_sds_ul_dst_s *dst);
367 
368 struct oio_error_s * oio_sds_upload_prepare (struct oio_sds_ul_s *ul,
369  size_t size);
370 
371 struct oio_error_s * oio_sds_upload_feed (struct oio_sds_ul_s *ul,
372  const unsigned char *buf, size_t len);
373 
374 struct oio_error_s * oio_sds_upload_step (struct oio_sds_ul_s *ul);
375 
376 struct oio_error_s * oio_sds_upload_commit (struct oio_sds_ul_s *ul);
377 
378 struct oio_error_s * oio_sds_upload_abort (struct oio_sds_ul_s *ul);
379 
381 int oio_sds_upload_greedy (struct oio_sds_ul_s *ul);
382 
384 int oio_sds_upload_done (struct oio_sds_ul_s *ul);
385 
388 int oio_sds_upload_needs_ecd(struct oio_sds_ul_s *ul);
389 
390 void oio_sds_upload_clean (struct oio_sds_ul_s *ul);
391 
397 #define OIO_SDS_UL__ERROR ((size_t)-2)
398 #define OIO_SDS_UL__DONE ((size_t)-1)
399 #define OIO_SDS_UL__NODATA ((size_t)0)
400 
401 typedef size_t (*oio_sds_ul_hook_f) (void*, unsigned char *p, size_t s);
402 
404 {
406  /*OIO_UL_SRC_HOOK_RANDOM, */ /* coming soon */
407 };
408 
410 {
412 
413  union {
414  struct {
416  void *ctx;
417  size_t size;
418  } hook;
419  } data;
420 };
421 
422 #define OIO_SDS_UPLOAD_SRC_INIT {.type=0, .data={ .hook={.cb=NULL, .ctx=NULL, .size=0}}}
423 
424 /* works with fully qualified urls (content) and local paths */
425 struct oio_error_s* oio_sds_upload (struct oio_sds_s *sds,
426  struct oio_sds_ul_src_s *src, struct oio_sds_ul_dst_s *dst);
427 
430 struct oio_error_s* oio_sds_upload_from_file (struct oio_sds_s *sds,
431  struct oio_sds_ul_dst_s *dst, const char *local,
432  size_t off, size_t len);
433 
436 struct oio_error_s* oio_sds_upload_from_buffer (struct oio_sds_s *sds,
437  struct oio_sds_ul_dst_s *dst, void *base, size_t len);
438 
439 
440 
441 /* List --------------------------------------------------------------------- */
442 
444 {
445  struct oio_url_s *url;
446  const char *prefix;
447  const char *marker;
448  const char *end;
449 
450  /* 0 means not set */
451  size_t max_items;
452 
453  /* 0 means no set */
454  char delimiter;
455 
456  unsigned char flag_nodeleted : 1;
457  unsigned char flag_allversions : 1;
458  unsigned char flag_properties : 1;
459 };
460 
462 {
463  const char *name;
464  const char *hash;
465  size_t size;
466  size_t version;
468  const char * const *properties;
469 };
470 
472 {
475  void *ctx;
476 
478  int (*on_item) (void *ctx, const struct oio_sds_list_item_s *item);
479 
481  int (*on_prefix) (void *ctx, const char *prefix);
482 
485  int (*on_bound) (void *ctx, const char *next_marker);
486 
488  size_t out_count;
489 
493 };
494 
503 struct oio_error_s* oio_sds_list (struct oio_sds_s *sds,
504  struct oio_sds_list_param_s *param,
505  struct oio_sds_list_listener_s *listener);
506 
507 /* Quota -------------------------------------------------------------------- */
508 
513 {
515  size_t used_bytes;
516 
518  size_t quota_bytes;
519 
522 };
523 
533 struct oio_error_s* oio_sds_get_usage (struct oio_sds_s *sds,
534  struct oio_url_s *u, struct oio_sds_usage_s *out);
535 
536 
537 
538 /* Misc. -------------------------------------------------------------------- */
539 
548 struct oio_error_s* oio_sds_drain(struct oio_sds_s *sds, struct oio_url_s *u);
549 
553 struct oio_error_s* oio_sds_delete (struct oio_sds_s *sds, struct oio_url_s *u);
554 
556 struct oio_error_s* oio_sds_has (struct oio_sds_s *sds, struct oio_url_s *url,
557  int *phas);
558 
559 
560 typedef void (*on_element_f) (void *ctx, const char *key, const char *value);
561 
563 struct oio_error_s* oio_sds_get_content_properties (struct oio_sds_s *sds,
564  struct oio_url_s *url, on_element_f fct, void* ctx);
565 
567 struct oio_error_s* oio_sds_set_content_properties(struct oio_sds_s *sds,
568  struct oio_url_s *url, const char * const *val);
569 
571 struct oio_error_s* oio_sds_get_container_properties (struct oio_sds_s *sds,
572  struct oio_url_s *url, on_element_f fct, void* ctx);
573 
575 struct oio_error_s* oio_sds_set_container_properties(struct oio_sds_s *sds,
576  struct oio_url_s *url, const char * const *val);
577 
584 struct oio_error_s* oio_sds_truncate(struct oio_sds_s *sds,
585  struct oio_url_s *u, size_t size);
586 
587 #ifdef __cplusplus
588 }
589 #endif
590 
592 #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:2455
int meta_pos
Definition: oio_sds.h:346
unsigned char flag_allversions
Definition: oio_sds.h:457
const char *const * properties
Definition: oio_sds.h:343
int(* on_item)(void *ctx, const struct oio_sds_list_item_s *item)
Definition: oio_sds.h:478
void(* oio_sds_info_reporter_f)(void *cb_data, enum oio_sds_content_key_e key, const char *value)
Definition: oio_sds.h:96
void oio_log_to_syslog(void)
Definition: sds.c:352
Definition: oio_sds.h:240
oio_sds_config_e
Definition: oio_sds.h:44
Definition: oio_sds.h:271
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:1989
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:2463
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:1914
Definition: oio_sds.h:83
struct oio_sds_dl_dst_s::@0::@2 buffer
int oio_sds_upload_greedy(struct oio_sds_ul_s *ul)
Definition: sds.c:1255
struct oio_sds_dl_dst_s::@0::@1 file
size_t out_count
Definition: oio_sds.h:488
int oio_error_code(const struct oio_error_s *e)
Definition: sds.c:397
struct oio_error_s * oio_sds_delete(struct oio_sds_s *sds, struct oio_url_s *u)
Definition: sds.c:2310
unsigned char flag_properties
Definition: oio_sds.h:458
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:1947
oio_sds_dl_dst_type_e
Definition: oio_sds.h:237
size_t size
Definition: oio_sds.h:465
unsigned int partial
Definition: oio_sds.h:330
struct oio_sds_ul_dst_s * dst
Definition: sds.c:1128
int out_truncated
Definition: oio_sds.h:492
struct oio_error_s * oio_sds_create(struct oio_sds_s *sds, struct oio_url_s *url)
Definition: sds.c:507
size_t out_size
Definition: oio_sds.h:247
void oio_error_free(struct oio_error_s *e)
Definition: sds.c:382
Definition: sds.c:1120
Definition: oio_sds.h:47
void * ctx
Definition: oio_sds.h:261
const char * name
Definition: oio_sds.h:463
const char * marker
Definition: oio_sds.h:447
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:2441
void oio_sds_upload_clean(struct oio_sds_ul_s *ul)
Definition: sds.c:1215
Definition: oio_sds.h:405
size_t size
Definition: oio_sds.h:417
size_t chunk_size
Definition: oio_sds.h:354
Definition: oio_sds.h:244
const char * content_id
Definition: oio_sds.h:339
unsigned int autocreate
Definition: oio_sds.h:322
size_t max_items
Definition: oio_sds.h:451
size_t offset
Definition: oio_sds.h:350
void * ctx
Definition: oio_sds.h:416
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:2232
size_t length
Definition: oio_sds.h:257
Definition: oio_sds.h:512
Definition: url.c:30
oio_sds_dl_hook_f cb
Definition: oio_sds.h:260
char delimiter
Definition: oio_sds.h:454
size_t version
Definition: oio_sds.h:466
void oio_error_pfree(struct oio_error_s **pe)
Definition: sds.c:389
const char * oio_error_message(const struct oio_error_s *e)
Definition: sds.c:404
struct oio_sds_ul_src_s::@4::@5 hook
enum oio_sds_ul_src_type_e type
Definition: oio_sds.h:411
size_t offset
Definition: oio_sds.h:273
Definition: oio_sds.h:239
struct oio_error_s * oio_sds_upload_commit(struct oio_sds_ul_s *ul)
Definition: sds.c:1746
struct oio_url_s * url
Definition: oio_sds.h:279
void oio_sds_pfree(struct oio_sds_s **psds)
Definition: sds.c:454
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:1081
Definition: oio_sds.h:87
size_t quota_bytes
Definition: oio_sds.h:518
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:1101
const char *const * properties
Definition: oio_sds.h:468
struct oio_error_s * oio_sds_init(struct oio_sds_s **out, const char *ns)
Definition: sds.c:413
const char * hash
Definition: oio_sds.h:464
struct oio_sds_ul_s * oio_sds_upload_init(struct oio_sds_s *sds, struct oio_sds_ul_dst_s *dst)
Definition: sds.c:1179
struct oio_url_s * url
Definition: oio_sds.h:445
Definition: oio_sds.h:461
size_t(* oio_sds_ul_hook_f)(void *, unsigned char *p, size_t s)
Definition: oio_sds.h:401
Definition: oio_sds.h:317
void(* on_element_f)(void *ctx, const char *key, const char *value)
Definition: oio_sds.h:560
int(* oio_sds_dl_hook_f)(void *, const unsigned char *, size_t)
Definition: oio_sds.h:235
void oio_sds_free(struct oio_sds_s *sds)
Definition: sds.c:440
Definition: oio_sds.h:90
volatile int oio_sds_default_autocreate
Definition: oio_sds.h:56
const char * path
Definition: oio_sds.h:253
unsigned char flag_nodeleted
Definition: oio_sds.h:456
oio_sds_content_key_e
Definition: oio_sds.h:73
void oio_log_more(void)
Definition: sds.c:366
void(* oio_sds_property_reporter_f)(void *cb_data, const char *key, const char *value)
Definition: oio_sds.h:102
Definition: oio_sds.h:50
enum oio_sds_dl_dst_type_e type
Definition: oio_sds.h:249
struct oio_error_s * oio_sds_delete_container(struct oio_sds_s *sds, struct oio_url_s *url)
Definition: sds.c:2323
int(* on_bound)(void *ctx, const char *next_marker)
Definition: oio_sds.h:485
const char * prefix
Definition: oio_sds.h:446
size_t out_size
Definition: oio_sds.h:333
unsigned int oio_sds_version(void)
Definition: sds.c:63
unsigned char * ptr
Definition: oio_sds.h:256
size_t used_bytes
Definition: oio_sds.h:515
Definition: oio_sds.h:61
struct oio_error_s * oio_sds_upload_abort(struct oio_sds_ul_s *ul)
Definition: sds.c:1788
int oio_sds_configure(struct oio_sds_s *sds, enum oio_sds_config_e what, void *pv, unsigned int vlen)
Definition: sds.c:462
struct oio_error_s * oio_sds_has(struct oio_sds_s *sds, struct oio_url_s *url, int *phas)
Definition: sds.c:2386
Definition: oio_sds.h:76
struct oio_error_s * oio_sds_upload_prepare(struct oio_sds_ul_s *ul, size_t size)
Definition: sds.c:1268
Definition: oio_sds.h:53
size_t size
Definition: oio_sds.h:274
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:2149
struct oio_sds_s * sds
Definition: sds.c:1127
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:2336
Definition: oio_sds.h:241
void(* oio_sds_metachunk_reporter_f)(void *cb_data, unsigned int seq, size_t offset, size_t length)
Definition: oio_sds.h:111
unsigned int append
Definition: oio_sds.h:326
void oio_log_nothing(void)
Definition: sds.c:373
int used_objects
Definition: oio_sds.h:521
int oio_sds_upload_needs_ecd(struct oio_sds_ul_s *ul)
Definition: sds.c:1262
int oio_sds_upload_done(struct oio_sds_ul_s *ul)
Definition: sds.c:1244
oio_sds_ul_src_type_e
Definition: oio_sds.h:403
int(* on_prefix)(void *ctx, const char *prefix)
Definition: oio_sds.h:481
struct oio_error_s * oio_sds_drain(struct oio_sds_s *sds, struct oio_url_s *u)
Definition: sds.c:2298
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:2286
void oio_log_to_stderr(void)
Definition: sds.c:359
Definition: oio_sds.h:443
struct oio_url_s * url
Definition: oio_sds.h:319
oio_sds_ul_hook_f cb
Definition: oio_sds.h:415
struct oio_error_s * oio_sds_upload_step(struct oio_sds_ul_s *ul)
Definition: sds.c:1603
struct oio_error_s * oio_sds_upload_feed(struct oio_sds_ul_s *ul, const unsigned char *buf, size_t len)
Definition: sds.c:1392
void * ctx
Definition: oio_sds.h:475
Definition: oio_sds.h:80
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:2433
Definition: oio_sds.h:277
Definition: oio_sds.h:66
Definition: oio_sds.h:471
struct oio_sds_dl_range_s ** ranges
Definition: oio_sds.h:284
const char * end
Definition: oio_sds.h:448
Definition: oio_sds.h:409
union oio_sds_dl_dst_s::@0 data