SIONlib  1.7.1
Scalable I/O library for parallel access to task-local files
sion_keyvalue.c
Go to the documentation of this file.
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2016 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 
14 #include <stdlib.h>
15 #include <stdio.h>
16 #include <string.h>
17 #include <time.h>
18 #include <assert.h>
19 
20 #include <sys/types.h>
21 #include <sys/stat.h>
22 #include <fcntl.h>
23 #include <unistd.h>
24 
25 
26 #include "sion.h"
27 #include "sion_debug.h"
28 #include "sion_error_handler.h"
29 #include "sion_filedesc.h"
30 #include "sion_tools.h"
31 #include "sion_fd.h"
32 #include "sion_file.h"
33 #include "sion_metadata.h"
34 #include "sion_internal.h"
35 #include "sion_internal_seek.h"
36 #include "sion_printts.h"
37 #include "sion_keyvalue.h"
38 #include "sion_keyvalue_inline.h"
39 
40 #define DFUNCTION "_sion_keyval_check_env"
41 int _sion_keyval_check_env(_sion_filedesc *sion_filedesc, sion_int64 file_mode_flags) {
42  const char *t;
43  int rc=1;
44  sion_int32 keyvalmode_env;
45  sion_int32 keyvalmode_parm;
46 
47  DPRINTFP((2, DFUNCTION, -1, "keyval mode is initially set to %s\n", sion_keyval_type_to_str((int) sion_filedesc->keyvalmode)));
48 
49  /* check env-var */
50  keyvalmode_env=SION_KEYVAL_NOTSET;
51  t = _sion_getenv("SION_KEYVALUE_MODE");
52  if(t) {
53  if (strstr(t, "inline")) keyvalmode_env=SION_KEYVAL_INLINE;
54  if (strstr(t, "meta")) keyvalmode_env=SION_KEYVAL_META;
55  if (strstr(t, "hash")) keyvalmode_env=SION_KEYVAL_HASH;
56  if (strstr(t, "none")) keyvalmode_env=SION_KEYVAL_NONE;
57  if (strstr(t, "unknown")) keyvalmode_env=SION_KEYVAL_UNKNOWN;
58  }
59  DPRINTFP((2, DFUNCTION, -1, "keyval mode from env is=%s\n", sion_keyval_type_to_str((int) keyvalmode_env)));
60 
61  /* check file mode from open call */
62  keyvalmode_parm=SION_KEYVAL_NOTSET;
63  if(file_mode_flags&_SION_FMODE_KEYVAL_INLINE) keyvalmode_parm=SION_KEYVAL_INLINE;
64  if(file_mode_flags&_SION_FMODE_KEYVAL_META) keyvalmode_parm=SION_KEYVAL_META;
65  if(file_mode_flags&_SION_FMODE_KEYVAL_HASH) keyvalmode_parm=SION_KEYVAL_HASH;
66  if(file_mode_flags&_SION_FMODE_KEYVAL_NONE) keyvalmode_parm=SION_KEYVAL_NONE;
67  if(file_mode_flags&_SION_FMODE_KEYVAL_UNKNOWN) keyvalmode_parm=SION_KEYVAL_UNKNOWN;
68  DPRINTFP((2, DFUNCTION, -1, "keyval mode from parameter is=%s\n", sion_keyval_type_to_str((int) keyvalmode_parm)));
69 
70  if(file_mode_flags&_SION_FMODE_READ) {
71  DPRINTFP((2, DFUNCTION, -1, "file is opened for reading\n"));
72  /* keyvalmode is already read from meta-data of file */
73  /* open parameter and environment have to be identical */
74 
75  if(keyvalmode_parm==SION_KEYVAL_UNKNOWN) {
76  /* user will query mode later */
77  DPRINTFP((2, DFUNCTION, -1, "file read: parameter is 'unknown' keyvalmode will taken from file ...\n"));
78 
79  } else {
80  /* check for consistency */
81  if((keyvalmode_parm!=SION_KEYVAL_NOTSET) && (keyvalmode_parm!=sion_filedesc->keyvalmode)) {
82  DPRINTFP((2, DFUNCTION, -1, "file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n"));
83  return(_sion_errorprint(0,_SION_ERROR_RETURN,"file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n"));
84  }
85  if((keyvalmode_env!=SION_KEYVAL_NOTSET) && (keyvalmode_env!=sion_filedesc->keyvalmode)) {
86  DPRINTFP((2, DFUNCTION, -1, "file read: keyvalmode of file is different to requested keyvalmode from environment, aborting ...\n"));
87  return(_sion_errorprint(0,_SION_ERROR_RETURN,"file read: keyvalmode of file is different to requested keyvalmode from env-var, aborting ...\n"));
88  }
89  }
90 
91  } else {
92 
93  DPRINTFP((2, DFUNCTION, -1, "file is opened for writing\n"));
94  /* order: first env, then parameter */
95  sion_filedesc->keyvalmode=SION_KEYVAL_NONE;
96  if(keyvalmode_env!=SION_KEYVAL_NOTSET) sion_filedesc->keyvalmode=keyvalmode_env;
97  if(keyvalmode_parm!=SION_KEYVAL_NOTSET) sion_filedesc->keyvalmode=keyvalmode_parm;
98  }
99 
100 
101  DPRINTFP((2, DFUNCTION, -1, "keyval mode is=%s\n", sion_keyval_type_to_str((int) sion_filedesc->keyvalmode)));
102  return (rc);
103 }
104 #undef DFUNCTION
105 
106 /* dup internal data structures from first to second sion_filedesc */
107 #define DFUNCTION "_sion_keyval_dup_dataptr"
108 int _sion_keyval_dup_dataptr(_sion_filedesc *sion_filedesc, _sion_filedesc *new_filedesc) {
109  int rc=0;
110  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
111 
112  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
113  rc=_sion_keyval_dup_dataptr_inline(sion_filedesc,new_filedesc);
114  } else {
115  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to call sion_keyval_dup_dataptr in inknown keyval mode , aborting ...\n"));
116  }
117 
118  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
119  return (rc);
120 }
121 #undef DFUNCTION
122 
123 
124 
125 #define DFUNCTION "sion_fwrite_key"
126 
141 size_t sion_fwrite_key(const void *data, uint64_t key, size_t size, size_t nitems, int sid) {
142  size_t rc=0, frc;
143  size_t len;
144  _sion_filedesc *sion_filedesc;
145 
146  /* */ DPRINTFTS(-1, "enter sion_fwrite_key");
147  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
148 
149  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
150  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
151  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
152  }
153  if(sion_filedesc->rank<0) { /* empty file */
154  return(SION_NOT_SUCCESS);
155  }
156  DPRINTFP((2, DFUNCTION, -1, "fwrite_key: key=%d size=%d, nitems=%d\n",(int) key,(int) size, (int) nitems));
157 
158  len=size*nitems;
159 
160  /* store key and length */
161  frc=_sion_store_and_write_key_and_len(sion_filedesc,key,len);
162  if(frc != SION_SUCCESS) {
163  return(_sion_errorprint_on_rank(-1,_SION_ERROR_RETURN,sion_filedesc->rank,
164  "could not write meta data to file (frc=%d sid=%d) ...", (int) frc, sid));
165  }
166 
167  /* store data */
168  frc=_sion_write_value(sion_filedesc,data,key,len);
169  if(frc != len) {
170  return(_sion_errorprint_on_rank(-1,_SION_ERROR_RETURN,sion_filedesc->rank,
171  "could not write data (%d bytes) to file (frc=%d sid=%d) ...", (int) len, (int) frc, sid));
172  }
173 
174  rc=(size_t) len / size;
175 
176  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
177  /* */ DPRINTFTS(-1, "leave sion_fwrite_key");
178  return (rc);
179 }
180 #undef DFUNCTION
181 
182 
183 
184 #define DFUNCTION "sion_fread_key"
185 
200 size_t sion_fread_key(void *data, uint64_t key, size_t size, size_t nitems, int sid) {
201  size_t rc=0, frc;
202  size_t len, datalen=0;
203  _sion_filedesc *sion_filedesc;
204 
205  /* */ DPRINTFTS(-1, "enter sion_fread_key");
206  DPRINTFP((8, DFUNCTION, -1, "enter\n"));
207 
208  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
209  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
210  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
211  }
212  if(sion_filedesc->rank<0) { /* empty file */
213  return(SION_NOT_SUCCESS);
214  }
215  DPRINTFP((32, DFUNCTION, -1, "fread_key: sid=%d key=%ld size=%d, nitems=%d\n",(int) sid, (long) key,(int) size, (int) nitems));
216 
217  len=size*nitems;
218 
219  /* find key and length */
220  if (_sion_find_and_read_key_and_len(sion_filedesc,key,len,&datalen) !=
221  SION_SUCCESS) {
222  DPRINTFP((8, DFUNCTION, -1, "_sion_find_and_read_key_and_len return NOT SUCCESS\n"));
223  return(SION_NOT_SUCCESS);
224  }
225 
226  /* read as much elements of size <size> as posible */
227  len = ( (int) datalen/size ) * size;
228 
229  /* read data */
230  frc=_sion_read_value(sion_filedesc,data,key,len);
231  if(frc != len) {
232  return(SION_NOT_SUCCESS);
233  }
234 
235  rc=(size_t) len / size;
236 
237  DPRINTFP((8, DFUNCTION, -1, "leave rc=%d\n",(int) rc));
238  /* */ DPRINTFTS(-1, "leave sion_fread_key");
239  return (rc);
240 }
241 #undef DFUNCTION
242 
243 #define DFUNCTION "sion_key_full_scan"
244 
252 int sion_key_full_scan(int sid) {
253  size_t rc=SION_NOT_SUCCESS;
254  _sion_filedesc *sion_filedesc;
255 
256  /* */ DPRINTFTS(-1, "enter sion_key_full_scan");
257  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
258 
259  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
260  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
261  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
262  }
263  if(sion_filedesc->rank<0) { /* empty file */
264  return(SION_NOT_SUCCESS);
265  }
266  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
267  rc=_sion_key_full_scan_inline(sion_filedesc);
268  } else {
269  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to perform full scan of file which is not opened in that mode, aborting ...\n"));
270  }
271 
272  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
273  /* */ DPRINTFTS(-1, "leave sion_key_full_scan");
274  return (rc);
275 }
276 #undef DFUNCTION
277 
278 
279 #define DFUNCTION "sion_fread_key_iterator_reset"
280 
289  size_t rc=SION_NOT_SUCCESS;
290  _sion_filedesc *sion_filedesc;
291 
292  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
293 
294  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
295  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
296  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
297  }
298  if(sion_filedesc->rank<0) { /* empty file */
299  return(SION_NOT_SUCCESS);
300  }
301 
302  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
303  rc=_sion_iterator_reset_inline(sion_filedesc);
304  } else {
305  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to reset iterator in keyval mode from file which is not opened in that mode, aborting ...\n"));
306  }
307 
308  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
309  return (rc);
310 }
311 #undef DFUNCTION
312 
313 #define DFUNCTION "sion_fread_key_iterator_next"
314 
324 int sion_fread_key_iterator_next(int sid, uint64_t *keyptr, size_t *sizeptr) {
325  size_t rc=SION_NOT_SUCCESS;
326  _sion_filedesc *sion_filedesc;
327 
328  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
329 
330  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
331  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
332  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
333  }
334  if(sion_filedesc->rank<0) { /* empty file */
335  return(SION_NOT_SUCCESS);
336  }
337  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
338  rc=_sion_iterator_next_inline(sion_filedesc, keyptr, sizeptr);
339  DPRINTFP((2, DFUNCTION, -1, "sion_fread_key_iterator_next: key=%d size=%d\n",(int) *keyptr,(int) *sizeptr));
340  } else {
341  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to forward iterator in keyval mode from file which is not opened in that mode, aborting ...\n"));
342  }
343 
344  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
345  return (rc);
346 }
347 #undef DFUNCTION
348 
349 
350 #define DFUNCTION "sion_seek_key"
351 
363 int sion_seek_key(int sid, uint64_t key, int entrynum, sion_int64 posinentry) {
364  size_t rc=SION_NOT_SUCCESS;
365  _sion_filedesc *sion_filedesc;
366 
367  /* */ DPRINTFTS(-1, "enter sion_seek_key");
368  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
369 
370  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
371  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
372  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
373  }
374  if(sion_filedesc->rank<0) { /* empty file */
375  return(SION_NOT_SUCCESS);
376  }
377 
378  if( (posinentry==SION_CURRENT_POS) && (entrynum!=SION_CURRENT_BLOCK) ) {
379  return(_sion_errorprint(0,_SION_ERROR_RETURN,"Error: SION_CURRENT_POS set in sion_search_key, but blovk is not SION_CURRENT_BLOCK, aborting ...\n"));
380  }
381 
382  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
383  DPRINTFP((2, DFUNCTION, -1, "sion_seek_key: key=%d entrynum=%d posinentry=%d\n",(int) key,(int) entrynum, (int) posinentry));
384  rc=_sion_seek_key_inline(sion_filedesc, key, entrynum, posinentry);
385  } else {
386  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to search within key in keyval mode from file which is not opened in that mode, aborting ...\n"));
387  }
388 
389  DPRINTFP((2, DFUNCTION, -1, "leave rc=%d\n",rc));
390  /* */ DPRINTFTS(-1, "leave sion_seek_key");
391  return (rc);
392 }
393 #undef DFUNCTION
394 
395 #define DFUNCTION "sion_get_keyval_mode"
396 
404 int sion_get_keyval_mode(int sid) {
405  size_t rc=SION_KEYVAL_UNKNOWN;
406 
407  _sion_filedesc *sion_filedesc;
408 
409  /* */ DPRINTFTS(-1, "enter sion_get_keyval_mode");
410  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
411 
412  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
413  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
414  return(_sion_errorprint(SION_KEYVAL_UNKNOWN,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
415  }
416 
417  rc=sion_filedesc->keyvalmode;
418 
419  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
420  /* */ DPRINTFTS(-1, "leave sion_get_keyval_mode");
421  return (rc);
422 }
423 #undef DFUNCTION
424 
425 
426 #define DFUNCTION "sion_keyval_type_to_str"
427 #define STR_PRT(X) case X: return # X
428 
436 char* sion_keyval_type_to_str (int type) {
437  switch (type) {
438  STR_PRT(SION_KEYVAL_NONE);
439  STR_PRT(SION_KEYVAL_INLINE);
440  STR_PRT(SION_KEYVAL_META);
441  STR_PRT(SION_KEYVAL_HASH);
442  STR_PRT(SION_KEYVAL_UNKNOWN);
443  }
444  return "unknown";
445 }
446 #undef DFUNCTION
447 
448 
449 
450 #define DFUNCTION "sion_key_list_iterator_reset"
451 
460  size_t rc=SION_NOT_SUCCESS;
461  _sion_filedesc *sion_filedesc;
462 
463  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
464 
465  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
466  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
467  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
468  }
469  if(sion_filedesc->rank<0) { /* empty file */
470  return(SION_NOT_SUCCESS);
471  }
472 
473  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
474  rc=_sion_key_list_iterator_reset_inline(sion_filedesc);
475  } else {
476  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to reset iterator in keyval mode from file which is not opened in that mode, aborting ...\n"));
477  }
478 
479  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
480  return (rc);
481 }
482 #undef DFUNCTION
483 
484 #define DFUNCTION "sion_key_list_iterator_next"
485 
494 int sion_key_list_iterator_next(int sid, uint64_t *keyptr) {
495  size_t rc=SION_NOT_SUCCESS;
496  _sion_filedesc *sion_filedesc;
497 
498  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
499 
500  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
501  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
502  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
503  }
504  if(sion_filedesc->rank<0) { /* empty file */
505  return(SION_NOT_SUCCESS);
506  }
507  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
508  rc=_sion_key_list_iterator_next_inline(sion_filedesc, keyptr);
509  DPRINTFP((2, DFUNCTION, -1, "sion_fread_key_iterator_next: key=%d\n",(int) *keyptr));
510  } else {
511  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to forward iterator in keyval mode from file which is not opened in that mode, aborting ...\n"));
512  }
513 
514  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
515  return (rc);
516 }
517 #undef DFUNCTION
518 
519 #define DFUNCTION "sion_key_get_stat"
520 
530 int sion_key_get_stat(int sid, uint64_t key, sion_key_stat_t *keystatptr) {
531  size_t rc=SION_NOT_SUCCESS;
532  _sion_filedesc *sion_filedesc;
533 
534  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
535 
536  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
537  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
538  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
539  }
540  if(sion_filedesc->rank<0) { /* empty file */
541  return(SION_NOT_SUCCESS);
542  }
543  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
544  rc=_sion_key_get_stat_inline(sion_filedesc, key, keystatptr);
545  DPRINTFP((2, DFUNCTION, -1, "_sion_key_get_stat_inline: key=%d rc=%d\n",(int) key, rc));
546  } else {
547  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to get stat of key from file which is not opened in that mode, aborting ...\n"));
548  }
549 
550  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
551  return (rc);
552 }
553 #undef DFUNCTION
554 
555 
556 /* internal wrapper function */
557 
558 
559 #define DFUNCTION "_sion_store_and_write_key_and_len"
560 int _sion_store_and_write_key_and_len(_sion_filedesc *sion_filedesc, uint64_t key, size_t len) {
561  int rc=0;
562  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
563 
564  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
565  rc=_sion_store_and_write_key_and_len_inline(sion_filedesc,key,len);
566  } else {
567  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to write in keyval mode from file which is not opened in that mode, aborting ...\n"));
568  }
569 
570  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
571  return (rc);
572 }
573 #undef DFUNCTION
574 
575 #define DFUNCTION "_sion_write_value"
576 int _sion_write_value(_sion_filedesc *sion_filedesc, const void *data, uint64_t key, size_t len) {
577  int rc=0;
578  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
579 
580  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
581  rc=_sion_write_value_inline(sion_filedesc,data,key,len);
582  } else {
583  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
584  }
585 
586  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
587  return (rc);
588 }
589 #undef DFUNCTION
590 
591 #define DFUNCTION "_sion_find_and_read_key_and_len"
592 int _sion_find_and_read_key_and_len(_sion_filedesc *sion_filedesc, uint64_t key, size_t len, size_t *datalen) {
593  int rc = SION_NOT_SUCCESS;
594  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
595 
596  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
597  rc=_sion_find_and_read_key_and_len_inline(sion_filedesc, key, len, datalen);
598  } else {
599  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
600  }
601 
602  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
603  return (rc);
604 }
605 #undef DFUNCTION
606 
607 #define DFUNCTION "_sion_read_value"
608 int _sion_read_value(_sion_filedesc *sion_filedesc, void *data, uint64_t key, size_t len) {
609  int rc=0;
610  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
611 
612  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
613  rc=_sion_read_value_inline(sion_filedesc,data,key,len);
614  } else {
615  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
616  }
617 
618  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
619  return (rc);
620 }
621 #undef DFUNCTION
622 
623 
int sion_seek_key(int sid, uint64_t key, int entrynum, sion_int64 posinentry)
Seek to position in key.
int sion_key_list_iterator_next(int sid, uint64_t *keyptr)
Forward to next key.
Sion File Descriptor Structure.
Definition: sion_filedesc.h:77
int sion_fread_key_iterator_next(int sid, uint64_t *keyptr, size_t *sizeptr)
Forward to next key.
#define SION_KEYVAL_HASH
Definition: sion_const.h:83
#define SION_KEYVAL_NOTSET
Definition: sion_const.h:85
#define SION_KEYVAL_INLINE
Definition: sion_const.h:81
int _sion_vcdtype(int sid)
Definition: sion_fd.c:56
#define SION_KEYVAL_NONE
Definition: sion_const.h:80
char * _sion_getenv(const char *name)
char * sion_keyval_type_to_str(int type)
Returns key value mode as string.
#define SION_KEYVAL_UNKNOWN
Definition: sion_const.h:84
void * _sion_vcdtovcon(int sid)
Definition: sion_fd.c:51
#define SION_CURRENT_POS
Definition: sion_const.h:70
int sion_fread_key_iterator_reset(int sid)
Resets key iterator.
#define SION_KEYVAL_META
Definition: sion_const.h:82
int sion_key_list_iterator_reset(int sid)
Resets key iterator.
int sion_get_keyval_mode(int sid)
Return selected mode for key value.
#define SION_FILEDESCRIPTOR
Definition: sion_fd.h:17
#define SION_CURRENT_BLOCK
Definition: sion_const.h:69
int sion_key_full_scan(int sid)
Performs a full scan of all meta data in current file.
Sion Time Stamp Header.
size_t sion_fread_key(void *data, uint64_t key, size_t size, size_t nitems, int sid)
Read data for key.
size_t sion_fwrite_key(const void *data, uint64_t key, size_t size, size_t nitems, int sid)
Writes data for key.
int sion_key_get_stat(int sid, uint64_t key, sion_key_stat_t *keystatptr)
get statistics about key