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