SIONlib  1.6.1
Scalable I/O library for parallel access to task-local files
sion_keyvalue.c
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2015 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 #include <stdlib.h>
10 #include <stdio.h>
11 #include <string.h>
12 #include <time.h>
13 #include <assert.h>
14 
15 #include <sys/types.h>
16 #include <sys/stat.h>
17 #include <fcntl.h>
18 #include <unistd.h>
19 
20 
21 #include "sion.h"
22 #include "sion_debug.h"
23 #include "sion_filedesc.h"
24 #include "sion_tools.h"
25 #include "sion_fd.h"
26 #include "sion_file.h"
27 #include "sion_metadata.h"
28 #include "sion_internal.h"
29 #include "sion_internal_seek.h"
30 #include "sion_printts.h"
31 #include "sion_keyvalue.h"
32 #include "sion_keyvalue_inline.h"
33 
34 #define DFUNCTION "_sion_keyval_check_env"
35 int _sion_keyval_check_env(_sion_filedesc *sion_filedesc, sion_int64 file_mode_flags) {
36  const char *t;
37  int rc=1;
38  sion_int32 keyvalmode_env;
39  sion_int32 keyvalmode_parm;
40 
41  DPRINTFP((2, DFUNCTION, -1, "keyval mode is initially set to %s\n", sion_keyval_type_to_str((int) sion_filedesc->keyvalmode)));
42 
43  /* check env-var */
44  keyvalmode_env=SION_KEYVAL_NOTSET;
45  t = _sion_getenv("SION_KEYVALUE_MODE");
46  if(t) {
47  if (strstr(t, "inline")) keyvalmode_env=SION_KEYVAL_INLINE;
48  if (strstr(t, "meta")) keyvalmode_env=SION_KEYVAL_META;
49  if (strstr(t, "hash")) keyvalmode_env=SION_KEYVAL_HASH;
50  if (strstr(t, "none")) keyvalmode_env=SION_KEYVAL_NONE;
51  if (strstr(t, "unknown")) keyvalmode_env=SION_KEYVAL_UNKNOWN;
52  }
53  DPRINTFP((2, DFUNCTION, -1, "keyval mode from env is=%s\n", sion_keyval_type_to_str((int) keyvalmode_env)));
54 
55  /* check file mode from open call */
56  keyvalmode_parm=SION_KEYVAL_NOTSET;
57  if(file_mode_flags&_SION_FMODE_KEYVAL_INLINE) keyvalmode_parm=SION_KEYVAL_INLINE;
58  if(file_mode_flags&_SION_FMODE_KEYVAL_META) keyvalmode_parm=SION_KEYVAL_META;
59  if(file_mode_flags&_SION_FMODE_KEYVAL_HASH) keyvalmode_parm=SION_KEYVAL_HASH;
60  if(file_mode_flags&_SION_FMODE_KEYVAL_NONE) keyvalmode_parm=SION_KEYVAL_NONE;
61  if(file_mode_flags&_SION_FMODE_KEYVAL_UNKNOWN) keyvalmode_parm=SION_KEYVAL_UNKNOWN;
62  DPRINTFP((2, DFUNCTION, -1, "keyval mode from parameter is=%s\n", sion_keyval_type_to_str((int) keyvalmode_parm)));
63 
64  if(file_mode_flags&_SION_FMODE_READ) {
65  DPRINTFP((2, DFUNCTION, -1, "file is opened for reading\n"));
66  /* keyvalmode is already read from meta-data of file */
67  /* open parameter and environment have to be identical */
68 
69  if(keyvalmode_parm==SION_KEYVAL_UNKNOWN) {
70  /* user will query mode later */
71  DPRINTFP((2, DFUNCTION, -1, "file read: parameter is 'unknown' keyvalmode will taken from file ...\n"));
72 
73  } else {
74  /* check for consistency */
75  if((keyvalmode_parm!=SION_KEYVAL_NOTSET) && (keyvalmode_parm!=sion_filedesc->keyvalmode)) {
76  DPRINTFP((2, DFUNCTION, -1, "file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n"));
77  return(_sion_errorprint(0,_SION_ERROR_RETURN,"file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n"));
78  }
79  if((keyvalmode_env!=SION_KEYVAL_NOTSET) && (keyvalmode_env!=sion_filedesc->keyvalmode)) {
80  DPRINTFP((2, DFUNCTION, -1, "file read: keyvalmode of file is different to requested keyvalmode from environment, aborting ...\n"));
81  return(_sion_errorprint(0,_SION_ERROR_RETURN,"file read: keyvalmode of file is different to requested keyvalmode from env-var, aborting ...\n"));
82  }
83  }
84 
85  } else {
86 
87  DPRINTFP((2, DFUNCTION, -1, "file is opened for writing\n"));
88  /* order: first env, then parameter */
89  sion_filedesc->keyvalmode=SION_KEYVAL_NONE;
90  if(keyvalmode_env!=SION_KEYVAL_NOTSET) sion_filedesc->keyvalmode=keyvalmode_env;
91  if(keyvalmode_parm!=SION_KEYVAL_NOTSET) sion_filedesc->keyvalmode=keyvalmode_parm;
92  }
93 
94 
95  DPRINTFP((2, DFUNCTION, -1, "keyval mode is=%s\n", sion_keyval_type_to_str((int) sion_filedesc->keyvalmode)));
96  return (rc);
97 }
98 #undef DFUNCTION
99 
100 /* dup internal data structures from first to second sion_filedesc */
101 #define DFUNCTION "_sion_keyval_dup_dataptr"
102 int _sion_keyval_dup_dataptr(_sion_filedesc *sion_filedesc, _sion_filedesc *new_filedesc) {
103  int rc=0;
104  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
105 
106  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
107  rc=_sion_keyval_dup_dataptr_inline(sion_filedesc,new_filedesc);
108  } else {
109  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to call sion_keyval_dup_dataptr in inknown keyval mode , aborting ...\n"));
110  }
111 
112  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
113  return (rc);
114 }
115 #undef DFUNCTION
116 
117 
118 
119 #define DFUNCTION "sion_fwrite_key"
120 
135 size_t sion_fwrite_key(const void *data, uint64_t key, size_t size, size_t nitems, int sid) {
136  size_t rc=0, frc;
137  size_t len;
138  _sion_filedesc *sion_filedesc;
139 
140  /* */ DPRINTFTS(-1, "enter sion_fwrite_key");
141  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
142 
143  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
144  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
145  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
146  }
147  if(sion_filedesc->rank<0) { /* empty file */
148  return(SION_NOT_SUCCESS);
149  }
150  DPRINTFP((2, DFUNCTION, -1, "fwrite_key: key=%d size=%d, nitems=%d\n",(int) key,(int) size, (int) nitems));
151 
152  len=size*nitems;
153 
154  /* store key and length */
155  frc=_sion_store_and_write_key_and_len(sion_filedesc,key,len);
156  if(frc != SION_SUCCESS) {
157  return(_sion_errorprint_on_rank(-1,_SION_ERROR_RETURN,sion_filedesc->rank,
158  "could not write meta data to file (frc=%d sid=%d) ...", (int) frc, sid));
159  }
160 
161  /* store data */
162  frc=_sion_write_value(sion_filedesc,data,key,len);
163  if(frc != len) {
164  return(_sion_errorprint_on_rank(-1,_SION_ERROR_RETURN,sion_filedesc->rank,
165  "could not write data (%d bytes) to file (frc=%d sid=%d) ...", (int) len, (int) frc, sid));
166  }
167 
168  rc=(size_t) len / size;
169 
170  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
171  /* */ DPRINTFTS(-1, "leave sion_fwrite_key");
172  return (rc);
173 }
174 #undef DFUNCTION
175 
176 
177 
178 #define DFUNCTION "sion_fread_key"
179 
194 size_t sion_fread_key(void *data, uint64_t key, size_t size, size_t nitems, int sid) {
195  size_t rc=0, frc;
196  size_t len, datalen=0;
197  _sion_filedesc *sion_filedesc;
198 
199  /* */ DPRINTFTS(-1, "enter sion_fread_key");
200  DPRINTFP((8, DFUNCTION, -1, "enter\n"));
201 
202  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
203  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
204  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
205  }
206  if(sion_filedesc->rank<0) { /* empty file */
207  return(SION_NOT_SUCCESS);
208  }
209  DPRINTFP((32, DFUNCTION, -1, "fread_key: sid=%d key=%ld size=%d, nitems=%d\n",(int) sid, (long) key,(int) size, (int) nitems));
210 
211  len=size*nitems;
212 
213  /* find key and length */
214  if (_sion_find_and_read_key_and_len(sion_filedesc,key,len,&datalen) !=
215  SION_SUCCESS) {
216  DPRINTFP((8, DFUNCTION, -1, "_sion_find_and_read_key_and_len return NOT SUCCESS\n"));
217  return(SION_NOT_SUCCESS);
218  }
219 
220  /* read as much elements of size <size> as posible */
221  len = ( (int) datalen/size ) * size;
222 
223  /* read data */
224  frc=_sion_read_value(sion_filedesc,data,key,len);
225  if(frc != len) {
226  return(SION_NOT_SUCCESS);
227  }
228 
229  rc=(size_t) len / size;
230 
231  DPRINTFP((8, DFUNCTION, -1, "leave rc=%d\n",(int) rc));
232  /* */ DPRINTFTS(-1, "leave sion_fread_key");
233  return (rc);
234 }
235 #undef DFUNCTION
236 
237 #define DFUNCTION "sion_key_full_scan"
238 
246 int sion_key_full_scan(int sid) {
247  size_t rc=SION_NOT_SUCCESS;
248  _sion_filedesc *sion_filedesc;
249 
250  /* */ DPRINTFTS(-1, "enter sion_key_full_scan");
251  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
252 
253  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
254  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
255  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
256  }
257  if(sion_filedesc->rank<0) { /* empty file */
258  return(SION_NOT_SUCCESS);
259  }
260  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
261  rc=_sion_key_full_scan_inline(sion_filedesc);
262  } else {
263  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to perform full scan of file which is not opened in that mode, aborting ...\n"));
264  }
265 
266  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
267  /* */ DPRINTFTS(-1, "leave sion_key_full_scan");
268  return (rc);
269 }
270 #undef DFUNCTION
271 
272 
273 #define DFUNCTION "sion_fread_key_iterator_reset"
274 
283  size_t rc=SION_NOT_SUCCESS;
284  _sion_filedesc *sion_filedesc;
285 
286  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
287 
288  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
289  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
290  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
291  }
292  if(sion_filedesc->rank<0) { /* empty file */
293  return(SION_NOT_SUCCESS);
294  }
295 
296  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
297  rc=_sion_iterator_reset_inline(sion_filedesc);
298  } else {
299  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"));
300  }
301 
302  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
303  return (rc);
304 }
305 #undef DFUNCTION
306 
307 #define DFUNCTION "sion_fread_key_iterator_next"
308 
318 int sion_fread_key_iterator_next(int sid, uint64_t *keyptr, size_t *sizeptr) {
319  size_t rc=SION_NOT_SUCCESS;
320  _sion_filedesc *sion_filedesc;
321 
322  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
323 
324  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
325  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
326  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
327  }
328  if(sion_filedesc->rank<0) { /* empty file */
329  return(SION_NOT_SUCCESS);
330  }
331  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
332  rc=_sion_iterator_next_inline(sion_filedesc, keyptr, sizeptr);
333  DPRINTFP((2, DFUNCTION, -1, "sion_fread_key_iterator_next: key=%d size=%d\n",(int) *keyptr,(int) *sizeptr));
334  } else {
335  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"));
336  }
337 
338  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
339  return (rc);
340 }
341 #undef DFUNCTION
342 
343 
344 #define DFUNCTION "sion_seek_key"
345 
357 int sion_seek_key(int sid, uint64_t key, int entrynum, sion_int64 posinentry) {
358  size_t rc=SION_NOT_SUCCESS;
359  _sion_filedesc *sion_filedesc;
360 
361  /* */ DPRINTFTS(-1, "enter sion_seek_key");
362  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
363 
364  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
365  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
366  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
367  }
368  if(sion_filedesc->rank<0) { /* empty file */
369  return(SION_NOT_SUCCESS);
370  }
371 
372  if( (posinentry==SION_CURRENT_POS) && (entrynum!=SION_CURRENT_BLOCK) ) {
373  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"));
374  }
375 
376  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
377  DPRINTFP((2, DFUNCTION, -1, "sion_seek_key: key=%d entrynum=%d posinentry=%d\n",(int) key,(int) entrynum, (int) posinentry));
378  rc=_sion_seek_key_inline(sion_filedesc, key, entrynum, posinentry);
379  } else {
380  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"));
381  }
382 
383  DPRINTFP((2, DFUNCTION, -1, "leave rc=%d\n",rc));
384  /* */ DPRINTFTS(-1, "leave sion_seek_key");
385  return (rc);
386 }
387 #undef DFUNCTION
388 
389 #define DFUNCTION "sion_get_keyval_mode"
390 
398 int sion_get_keyval_mode(int sid) {
399  size_t rc=SION_KEYVAL_UNKNOWN;
400 
401  _sion_filedesc *sion_filedesc;
402 
403  /* */ DPRINTFTS(-1, "enter sion_get_keyval_mode");
404  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
405 
406  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
407  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
408  return(_sion_errorprint(SION_KEYVAL_UNKNOWN,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
409  }
410 
411  rc=sion_filedesc->keyvalmode;
412 
413  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
414  /* */ DPRINTFTS(-1, "leave sion_get_keyval_mode");
415  return (rc);
416 }
417 #undef DFUNCTION
418 
419 
420 #define DFUNCTION "sion_keyval_type_to_str"
421 #define STR_PRT(X) case X: return # X
422 
430 char* sion_keyval_type_to_str (int type) {
431  switch (type) {
432  STR_PRT(SION_KEYVAL_NONE);
433  STR_PRT(SION_KEYVAL_INLINE);
434  STR_PRT(SION_KEYVAL_META);
435  STR_PRT(SION_KEYVAL_HASH);
436  STR_PRT(SION_KEYVAL_UNKNOWN);
437  }
438  return "unknown";
439 }
440 #undef DFUNCTION
441 
442 
443 
444 #define DFUNCTION "sion_key_list_iterator_reset"
445 
454  size_t rc=SION_NOT_SUCCESS;
455  _sion_filedesc *sion_filedesc;
456 
457  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
458 
459  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
460  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
461  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
462  }
463  if(sion_filedesc->rank<0) { /* empty file */
464  return(SION_NOT_SUCCESS);
465  }
466 
467  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
468  rc=_sion_key_list_iterator_reset_inline(sion_filedesc);
469  } else {
470  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"));
471  }
472 
473  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
474  return (rc);
475 }
476 #undef DFUNCTION
477 
478 #define DFUNCTION "sion_key_list_iterator_next"
479 
488 int sion_key_list_iterator_next(int sid, uint64_t *keyptr) {
489  size_t rc=SION_NOT_SUCCESS;
490  _sion_filedesc *sion_filedesc;
491 
492  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
493 
494  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
495  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
496  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
497  }
498  if(sion_filedesc->rank<0) { /* empty file */
499  return(SION_NOT_SUCCESS);
500  }
501  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
502  rc=_sion_key_list_iterator_next_inline(sion_filedesc, keyptr);
503  DPRINTFP((2, DFUNCTION, -1, "sion_fread_key_iterator_next: key=%d\n",(int) *keyptr));
504  } else {
505  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"));
506  }
507 
508  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
509  return (rc);
510 }
511 #undef DFUNCTION
512 
513 #define DFUNCTION "sion_key_get_stat"
514 
524 int sion_key_get_stat(int sid, uint64_t key, sion_key_stat_t *keystatptr) {
525  size_t rc=SION_NOT_SUCCESS;
526  _sion_filedesc *sion_filedesc;
527 
528  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
529 
530  if ((sid<0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR)
531  || !(sion_filedesc = _sion_vcdtovcon(sid))) {
532  return(_sion_errorprint(0,_SION_ERROR_RETURN,"invalid sion_filedesc, aborting %d ...\n", sid));
533  }
534  if(sion_filedesc->rank<0) { /* empty file */
535  return(SION_NOT_SUCCESS);
536  }
537  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
538  rc=_sion_key_get_stat_inline(sion_filedesc, key, keystatptr);
539  DPRINTFP((2, DFUNCTION, -1, "_sion_key_get_stat_inline: key=%d rc=%d\n",(int) key, rc));
540  } else {
541  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to get stat of key from file which is not opened in that mode, aborting ...\n"));
542  }
543 
544  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
545  return (rc);
546 }
547 #undef DFUNCTION
548 
549 
550 /* internal wrapper function */
551 
552 
553 #define DFUNCTION "_sion_store_and_write_key_and_len"
554 int _sion_store_and_write_key_and_len(_sion_filedesc *sion_filedesc, uint64_t key, size_t len) {
555  int rc=0;
556  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
557 
558  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
559  rc=_sion_store_and_write_key_and_len_inline(sion_filedesc,key,len);
560  } else {
561  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to write in keyval mode from file which is not opened in that mode, aborting ...\n"));
562  }
563 
564  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
565  return (rc);
566 }
567 #undef DFUNCTION
568 
569 #define DFUNCTION "_sion_write_value"
570 int _sion_write_value(_sion_filedesc *sion_filedesc, const void *data, uint64_t key, size_t len) {
571  int rc=0;
572  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
573 
574  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
575  rc=_sion_write_value_inline(sion_filedesc,data,key,len);
576  } else {
577  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
578  }
579 
580  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
581  return (rc);
582 }
583 #undef DFUNCTION
584 
585 #define DFUNCTION "_sion_find_and_read_key_and_len"
586 int _sion_find_and_read_key_and_len(_sion_filedesc *sion_filedesc, uint64_t key, size_t len, size_t *datalen) {
587  int rc = SION_NOT_SUCCESS;
588  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
589 
590  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
591  rc=_sion_find_and_read_key_and_len_inline(sion_filedesc, key, len, datalen);
592  } else {
593  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
594  }
595 
596  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
597  return (rc);
598 }
599 #undef DFUNCTION
600 
601 #define DFUNCTION "_sion_read_value"
602 int _sion_read_value(_sion_filedesc *sion_filedesc, void *data, uint64_t key, size_t len) {
603  int rc=0;
604  DPRINTFP((2, DFUNCTION, -1, "enter\n"));
605 
606  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) {
607  rc=_sion_read_value_inline(sion_filedesc,data,key,len);
608  } else {
609  return(_sion_errorprint(0,_SION_ERROR_RETURN,"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
610  }
611 
612  DPRINTFP((2, DFUNCTION, -1, "leave\n"));
613  return (rc);
614 }
615 #undef DFUNCTION
616 
617 
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:72
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
#define SION_KEYVAL_NONE
Definition: sion_const.h:80
char * sion_keyval_type_to_str(int type)
Returns key value mode as string.
#define SION_KEYVAL_UNKNOWN
Definition: sion_const.h:84
#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_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